From da0a71a8bc356d8d75fc7a1213f65088d8a910c8 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sun, 10 Dec 2006 07:39:20 +0000 Subject: [PATCH] small optimzing of drawing line by George Veskov (jkxxster at gmail dot com) irc nick jkxx svn path=/trunk/; revision=25110 --- reactos/dll/win32/gdi32/objects/linedda.c | 39 ++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/gdi32/objects/linedda.c b/reactos/dll/win32/gdi32/objects/linedda.c index 7bbd98d95cd..94cafbcad04 100644 --- a/reactos/dll/win32/gdi32/objects/linedda.c +++ b/reactos/dll/win32/gdi32/objects/linedda.c @@ -43,7 +43,44 @@ BOOL STDCALL LineDDA(INT nXStart, INT nYStart, INT nXEnd, INT nYEnd, INT cnt; INT dx = nXEnd - nXStart; INT dy = nYEnd - nYStart; - + + // optimized for vertical and horizontal lines so we avoid unnecessary math + if(nXStart == nXEnd) + { + // vertical line - use dx,dy as temp variables so we don't waste stack space + if(nYStart < nYEnd) + { + dx = nYStart; + dy = nYEnd; + } else { + dx = nYEnd; + dy = nYStart; + } + for(cnt = dx; cnt <= dy; cnt++) + { + lpLineFunc(nXStart,cnt,lpData); + } + return TRUE; + } + + if(nYStart == nYEnd) + { + // horizontal line - use dx,dy as temp variables so we don't waste stack space + if(nXStart < nXEnd) + { + dx = nXStart; + dy = nXEnd; + } else { + dx = nXEnd; + dy = nXStart; + } + for(cnt = dx; cnt <= dy; cnt++) + { + lpLineFunc(cnt, nYStart,lpData); + } + return TRUE; + } + // end of H/V line code if (dx < 0) { dx = -dx; xadd = -1; }