Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

123 lines
2.6 KiB

/******************************Module*Header*******************************\
* Module Name: linedda.c
*
* (Brief description)
*
* Created: 04-Jan-1991 09:23:30
* Author: Eric Kutter [erick]
*
* Copyright (c) 1990-1999 Microsoft Corporation
*
* (General description of its use)
*
* Dependencies:
*
* (#defines)
*
\**************************************************************************/
#include "precomp.h"
#pragma hdrstop
/******************************Public*Routine******************************\
* BOOL WINAPI InnerLineDDA(x1,y1,x2,y2,pfn,pvUserData)
*
* This routine is basic version of Bressenhams Algorithm for drawing lines.
* For each point, pfn is called with that point and the user passed in
* data pointer, pvUserData. This call is device independant and does no
* scaling or rotating. This wouldn't be possible since there is no
* DC passed in. It is probably an old artifact of Windows 1.0. It is
* strictly a client side function.
*
* return value is TRUE unless pfn is NULL.
*
* History:
* 07-Jan-1991 -by- Eric Kutter [erick]
* Wrote it.
\**************************************************************************/
BOOL WINAPI LineDDA(
int x1,
int y1,
int x2,
int y2,
LINEDDAPROC pfn,
LPARAM UserData)
{
int dx;
int xinc;
int dy;
int yinc;
int iError;
int cx;
if (pfn == (LINEDDAPROC)NULL)
return(FALSE);
dx = x2 - x1;
xinc = 1;
if (dx <= 0)
{
xinc = -xinc;
dx = -dx;
}
// prepare for ascending y
dy = y2 - y1;
yinc = 1;
iError = 0;
// if decending
if (dy <= 0)
{
yinc = -yinc;
dy = -dy;
//iError = 0; // in the win3.0 version, this is a 1 but it seems
} // to give wierd results.
// y Major
if (dy >= dx)
{
iError = (iError + dy) / 2;
cx = dy;
while (cx--)
{
(*pfn)(x1,y1,UserData);
y1 += yinc;
iError -= dx;
if (iError < 0)
{
iError += dy;
x1 += xinc;
}
}
}
else
{
// x Major
iError = (iError + dx) / 2;
cx = dx;
while (cx--)
{
(*pfn)(x1,y1,UserData);
x1 += xinc;
iError -= dy;
if (iError < 0)
{
iError += dx;
y1 += yinc;
}
}
}
return(TRUE);
}