reshuffling of dlls
[reactos.git] / reactos / dll / win32 / gdi32 / objects / linedda.c
1 /*
2 * LineDDA
3 *
4 * Copyright 1993 Bob Amstadt
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20 /*
21 * COPYRIGHT: See COPYING in the top level directory
22 * PROJECT: ReactOS GDI32
23 * PURPOSE: LineDDA Function
24 * FILE: lib/gdi32/objects/linedda.c
25 * PROGRAMER: Steven Edwards
26 * REVISION HISTORY: 2003/11/15 sedwards Created
27 * NOTES: Adapted from Wine
28 */
29
30 #include "precomp.h"
31
32 #include <debug.h>
33
34 /**********************************************************************
35 * LineDDA (GDI32.@)
36 * @implemented
37 */
38 BOOL STDCALL LineDDA(INT nXStart, INT nYStart, INT nXEnd, INT nYEnd,
39 LINEDDAPROC lpLineFunc, LPARAM lpData )
40 {
41 INT xadd = 1, yadd = 1;
42 INT err,erradd;
43 INT cnt;
44 INT dx = nXEnd - nXStart;
45 INT dy = nYEnd - nYStart;
46
47 if (dx < 0) {
48 dx = -dx; xadd = -1;
49 }
50 if (dy < 0) {
51 dy = -dy; yadd = -1;
52 }
53 if (dx > dy) { /* line is "more horizontal" */
54 err = 2*dy - dx; erradd = 2*dy - 2*dx;
55 for(cnt = 0;cnt <= dx; cnt++) {
56 lpLineFunc(nXStart,nYStart,lpData);
57 if (err > 0) {
58 nYStart += yadd;
59 err += erradd;
60 } else {
61 err += 2*dy;
62 }
63 nXStart += xadd;
64 }
65 } else { /* line is "more vertical" */
66 err = 2*dx - dy; erradd = 2*dx - 2*dy;
67 for(cnt = 0;cnt <= dy; cnt++) {
68 lpLineFunc(nXStart,nYStart,lpData);
69 if (err > 0) {
70 nXStart += xadd;
71 err += erradd;
72 } else {
73 err += 2*dx;
74 }
75 nYStart += yadd;
76 }
77 }
78 return TRUE;
79 }