4 * Copyright 1993 Bob Amstadt
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.
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.
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
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
34 /**********************************************************************
38 BOOL WINAPI
LineDDA(INT nXStart
, INT nYStart
, INT nXEnd
, INT nYEnd
,
39 LINEDDAPROC lpLineFunc
, LPARAM lpData
)
41 INT xadd
= 1, yadd
= 1;
44 INT dx
= nXEnd
- nXStart
;
45 INT dy
= nYEnd
- nYStart
;
47 // optimized for vertical and horizontal lines so we avoid unnecessary math
50 // vertical line - use dx,dy as temp variables so we don't waste stack space
59 for(cnt
= dx
; cnt
<= dy
; cnt
++)
61 lpLineFunc(nXStart
,cnt
,lpData
);
68 // horizontal line - use dx,dy as temp variables so we don't waste stack space
77 for(cnt
= dx
; cnt
<= dy
; cnt
++)
79 lpLineFunc(cnt
, nYStart
,lpData
);
83 // end of H/V line code
90 if (dx
> dy
) { /* line is "more horizontal" */
91 err
= 2*dy
- dx
; erradd
= 2*dy
- 2*dx
;
92 for(cnt
= 0;cnt
<= dx
; cnt
++) {
93 lpLineFunc(nXStart
,nYStart
,lpData
);
102 } else { /* line is "more vertical" */
103 err
= 2*dx
- dy
; erradd
= 2*dx
- 2*dy
;
104 for(cnt
= 0;cnt
<= dy
; cnt
++) {
105 lpLineFunc(nXStart
,nYStart
,lpData
);