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