Release 951003
[wine/multimedia.git] / objects / linedda.c
blobd53e1336e022237f600f4a21189e4880b803a5c4
1 /*
2 * LineDDA
4 * Copyright 1993 Bob Amstadt
6 static char Copyright[] = "Copyright Bob Amstadt, 1993";
7 */
9 #include <stdlib.h>
10 #include "windows.h"
11 #include "callback.h"
13 /**********************************************************************
14 * LineDDA (GDI.100)
16 void LineDDA(short nXStart, short nYStart, short nXEnd, short nYEnd,
17 FARPROC callback, long lParam)
19 int xadd = 1, yadd = 1;
20 int err,erradd;
21 int cnt;
22 int dx = nXEnd - nXStart;
23 int dy = nYEnd - nYStart;
25 if (dx < 0) {
26 dx = -dx; xadd = -1;
28 if (dy < 0) {
29 dy = -dy; yadd = -1;
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;
41 nXStart += xadd;
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;
53 nYStart += yadd;