Release 950901
[wine] / objects / linedda.c
1 /*
2  * LineDDA
3  *
4  * Copyright 1993 Bob Amstadt
5  *
6 static char Copyright[] = "Copyright  Bob Amstadt, 1993";
7 */
8
9 #include <stdlib.h>
10 #include "windows.h"
11 #include "callback.h"
12
13 /**********************************************************************
14  *              LineDDA         (GDI.100)
15  */
16 void LineDDA(short nXStart, short nYStart, short nXEnd, short nYEnd,
17              FARPROC callback, long lParam)
18 {
19     int xadd = 1, yadd = 1;
20     int err,erradd;
21     int cnt;
22     int dx = nXEnd - nXStart;
23     int dy = nYEnd - nYStart;
24
25     if (dx < 0)  {
26       dx = -dx; xadd = -1;
27     }
28     if (dy < 0)  {
29       dy = -dy; yadd = -1;
30     }
31     if (dx > dy) { /* line is "more horizontal" */
32       err = 2*dy - dx; erradd = 2*dy - 2*dx;
33       for(cnt = 0;cnt <= dx; cnt++) {
34         CallLineDDAProc(callback,nXStart,nYStart,lParam);
35         if (err > 0) {
36           nYStart += yadd;
37           err += erradd;
38         } else  {
39           err += 2*dy;
40         }
41         nXStart += xadd;
42       }
43     } else  { /* line is "more vertical" */
44       err = 2*dx - dy; erradd = 2*dx - 2*dy;
45       for(cnt = 0;cnt <= dy; cnt++) {
46         CallLineDDAProc(callback,nXStart,nYStart,lParam);
47         if (err > 0) {
48           nXStart += xadd;
49           err += erradd;
50         } else  {
51           err += 2*dx;
52         }
53         nYStart += yadd;
54       }
55     }
56 }