[an error occurred while processing this directive]
|
void GL_DrawLine1(int x0, int y0, int x1, int y1) {
int xdiff = x1-x0;int ydiff = y1-y0;
int xdiffby2;
int i;
char Swapped =0;
/* check if no line */
if (!(xdiff|ydiff)) {
GL_DrawPoint(x0,y0);
return;
}#if 0
/* check if horizontal line */
if (!xdiff) {
GL_DrawVLine(x0,y0,y1);
return;
}
/* check if vertical line */
if (!ydiff) {
GL_DrawHLine(y0,x0,x1);
return;
}
#endif/* check if we swap x and y for calculation */
if (Abs(xdiff) < Abs(ydiff)) {
GL_SwapInt(&xdiff,&ydiff);
GL_SwapInt(&x0,&y0);
GL_SwapInt(&x1,&y1);
Swapped =1;
}
/* make sure line direction is positive */
if (xdiff!=Abs(xdiff)) {
xdiff = -xdiff;
ydiff = -ydiff;
GL_SwapInt(&x0,&x1);
GL_SwapInt(&y0,&y1);
}
xdiffby2 = xdiff/2;
if (ydiff<0)
xdiffby2 = -xdiffby2;
/* Draw pixel by pixel solid*/
if (GUI_Context.LineStyle == GUI_LS_SOLID) {
for (i=0; i<=xdiff; i++) {
I32 l = ((I32)ydiff)*i+xdiffby2;
int y = (ABS(l)<32767) ? (y0 + ((int)l)/xdiff) : (y0 + l/xdiff);
if (!Swapped)
LCD_HL_DrawPixel(x0+i, y);
else
LCD_HL_DrawPixel(y, x0+i);
}
/* Draw pixel by pixel with fill style */
} else {
for (i=0; i<=xdiff; i++) {
long l = ((long)ydiff)*i+xdiffby2;
int y = (ABS(l)<32767) ? (y0 + ((int)l)/xdiff) : (y0 + l/xdiff);
if (!SetLineColor(i)) {
if (!Swapped)
LCD_HL_DrawPixel(x0+i, y);
else
LCD_HL_DrawPixel(y, x0+i);
}
}
}
}