/*
 *  libpipi       Pathetic image processing interface library
 *  Copyright (c) 2004-2008 Sam Hocevar <sam@zoy.org>
 *                2008 Jean-Yves Lamoureux <jylam@lnxscene.org
 *                All Rights Reserved
 *
 *  $Id$
 *
 *  This library is free software. It comes without any warranty, to
 *  the extent permitted by applicable law. You can redistribute it
 *  and/or modify it under the terms of the Do What The Fuck You Want
 *  To Public License, Version 2, as published by Sam Hocevar. See
 *  http://sam.zoy.org/wtfpl/COPYING for more details.
 */

/*
 * bezier.c: bezier curves rendering functions
 */

#include "config.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "pipi.h"
#include "pipi_internals.h"


int pipi_draw_bezier4(pipi_image_t *img ,
                      int x1, int y1,
                      int x2, int y2,
                      int x3, int y3,
                      int x4, int y4,
                      uint32_t c, int n, int aa)
{
    if(img->last_modified == PIPI_PIXELS_RGBA_U8)
    {
        float t;
        float x= x1, y= y1;
        float lx, ly;
        for(t=0; t<1; t+=(1.0f/n))
        {
            float a = t;
            float b = 1 - t;

            lx = x; ly = y;

            x = (x1*(b*b*b)) + 3*x2*(b*b)*a + 3*x4*b*(a*a) + x3*(a*a*a);
            y = (y1*(b*b*b)) + 3*y2*(b*b)*a + 3*y4*b*(a*a) + y3*(a*a*a);

            pipi_draw_line(img , lx, ly, x, y, c, aa);
        }
        pipi_draw_line(img , x, y, x3, y3, c, aa);
    }

    return 0;
}