Implemented OleCreatePropertyFrame and
[wine] / objects / linedda.c
1 /*
2  * LineDDA
3  *
4  * Copyright 1993 Bob Amstadt
5  */
6
7 #include <stdlib.h>
8 #include "windef.h"
9 #include "wingdi.h"
10 #include "wine/wingdi16.h"
11
12
13 /**********************************************************************
14  *           LineDDA   (GDI32.@)
15  */
16 BOOL WINAPI LineDDA(INT nXStart, INT nYStart, INT nXEnd, INT nYEnd,
17                         LINEDDAPROC callback, LPARAM 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         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         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     return TRUE;
57 }