56 lines
1.3 KiB
C
56 lines
1.3 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ML_line.c */
|
|
/* | Project : libmonochrome */
|
|
/* */
|
|
/* By: Pierre "PierrotLL" Le Gall <legallpierre89@gmail.com> */
|
|
/* Last updated: 2011/11/22 */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include <monochrome/internals.h>
|
|
|
|
void ML_line(int x1, int y1, int x2, int y2, ML_Color color)
|
|
{
|
|
int i, x, y, dx, dy, sx, sy, cumul;
|
|
x = x1;
|
|
y = y1;
|
|
dx = x2 - x1;
|
|
dy = y2 - y1;
|
|
sx = sgn(dx);
|
|
sy = sgn(dy);
|
|
dx = abs(dx);
|
|
dy = abs(dy);
|
|
ML_pixel(x, y, color);
|
|
if(dx > dy)
|
|
{
|
|
cumul = dx / 2;
|
|
for(i=1 ; i<dx ; i++)
|
|
{
|
|
x += sx;
|
|
cumul += dy;
|
|
if(cumul > dx)
|
|
{
|
|
cumul -= dx;
|
|
y += sy;
|
|
}
|
|
ML_pixel(x, y, color);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
cumul = dy / 2;
|
|
for(i=1 ; i<dy ; i++)
|
|
{
|
|
y += sy;
|
|
cumul += dx;
|
|
if(cumul > dy)
|
|
{
|
|
cumul -= dy;
|
|
x += sx;
|
|
}
|
|
ML_pixel(x, y, color);
|
|
}
|
|
}
|
|
}
|