18#define VERTEX(n) (pVertex + gt->n)
19#define COMPAREVERTEX(a, b) ((a)->x == (b)->x && (a)->y == (b)->y)
22#define VCMPCLR(a, b, c, color) (a->color == b->color && a->color == c->color)
25#define VCMPCLRS(a, b, c) \
26 !(VCMPCLR(a, b, c, Red) && VCMPCLR(a, b, c, Green) && VCMPCLR(a, b, c, Blue))
29#define HVINITCOL(Col, id) \
30 c[id] = v1->Col >> 8; \
31 dc[id] = abs((v2->Col >> 8) - c[id]); \
32 ec[id] = -(dy >> 1); \
33 ic[id] = LINC[(v2->Col >> 8) > c[id]]
34#define HVSTEPCOL(id) \
59 RECTL rcGradient, rcSG;
91 if((
v1->Red !=
v2->Red ||
v1->Green !=
v2->Green ||
v1->Blue !=
v2->Blue) &&
dy > 1)
102 for (
i = 0;
i < RectEnum.c && RectEnum.arcl[
i].top <= rcSG.
bottom;
i++)
130 for (
i = 0;
i < RectEnum.c && RectEnum.arcl[
i].top <= rcSG.
bottom;
i++)
170 for (
i = 0;
i < RectEnum.c && RectEnum.arcl[
i].top <= rcSG.
bottom;
i++)
191#define S_FILLLINE(linefrom,lineto) \
192 if(sx[lineto] < sx[linefrom]) \
193 DibFunctionsForBitmapFormat[psoOutput->iBitmapFormat].DIB_HLine(psoOutput, max(sx[lineto], FillRect.left), min(sx[linefrom], FillRect.right), sy, Color); \
195 DibFunctionsForBitmapFormat[psoOutput->iBitmapFormat].DIB_HLine(psoOutput, max(sx[linefrom], FillRect.left), min(sx[lineto], FillRect.right), sy, Color);
197#define S_DOLINE(a,b,line) \
198 ex[line] += dx[line]; \
199 while(ex[line] > 0 && x[line] != destx[line]) \
201 x[line] += incx[line]; \
202 sx[line] += incx[line]; \
203 ex[line] -= dy[line]; \
206#define S_GOLINE(a,b,line) \
207 if(y >= a->y && y <= b->y) \
210#define S_ENDLINE(a,b,line) \
213#define S_INITLINE(a,b,line) \
215 sx[line] = a->x + pptlDitherOrg->x; \
216 dx[line] = abs(b->x - a->x); \
217 dy[line] = abs(b->y - a->y); \
218 incx[line] = LINC[b->x > a->x]; \
219 ex[line] = -(dy[line]>>1); \
223#define INITCOL(a,b,line,col,id) \
224 c[line][id] = a->col >> 8; \
225 dc[line][id] = abs((b->col >> 8) - c[line][id]); \
226 ec[line][id] = -(dy[line]>>1); \
227 ic[line][id] = LINC[(b->col >> 8) > c[line][id]]
229#define STEPCOL(a,b,line,col,id) \
230 ec[line][id] += dc[line][id]; \
232 while(ec[line][id] > 0) \
234 c[line][id] += ic[line][id]; \
235 ec[line][id] -= dy[line]; \
238#define FINITCOL(linefrom,lineto,colid) \
239 gc[colid] = c[linefrom][colid]; \
240 gd[colid] = abs(c[lineto][colid] - gc[colid]); \
241 ge[colid] = -(gx >> 1); \
242 gi[colid] = LINC[c[lineto][colid] > gc[colid]]
244#define FDOCOL(linefrom,lineto,colid) \
245 ge[colid] += gd[colid]; \
247 while(ge[colid] > 0) \
249 gc[colid] += gi[colid]; \
253#define FILLLINE(linefrom,lineto) \
254 gx = abs(sx[lineto] - sx[linefrom]); \
255 gxi = LINC[sx[linefrom] < sx[lineto]]; \
256 FINITCOL(linefrom, lineto, 0); \
257 FINITCOL(linefrom, lineto, 1); \
258 FINITCOL(linefrom, lineto, 2); \
259 g_end = sx[lineto] + gxi; \
260 for(g = sx[linefrom]; g != g_end; g += gxi) \
262 if(InY && g >= FillRect.left && g < FillRect.right) \
264 Color = XLATEOBJ_iXlate(pxlo, RGB(gc[0], gc[1], gc[2])); \
265 DibFunctionsForBitmapFormat[psoOutput->iBitmapFormat].DIB_PutPixel(psoOutput, g, sy, Color); \
267 FDOCOL(linefrom, lineto, 0); \
268 FDOCOL(linefrom, lineto, 1); \
269 FDOCOL(linefrom, lineto, 2); \
272#define DOLINE(a,b,line) \
273 STEPCOL(a, b, line, Red, 0); \
274 STEPCOL(a, b, line, Green, 1); \
275 STEPCOL(a, b, line, Blue, 2); \
276 ex[line] += dx[line]; \
277 while(ex[line] > 0 && x[line] != destx[line]) \
279 x[line] += incx[line]; \
280 sx[line] += incx[line]; \
281 ex[line] -= dy[line]; \
284#define GOLINE(a,b,line) \
285 if(y >= a->y && y <= b->y) \
288#define ENDLINE(a,b,line) \
291#define INITLINE(a,b,line) \
293 sx[line] = a->x + pptlDitherOrg->x - 1; \
294 dx[line] = abs(b->x - a->x); \
295 dy[line] = abs(b->y - a->y); \
296 incx[line] = LINC[b->x > a->x]; \
297 ex[line] = -(dy[line]>>1); \
300#define DOINIT(a, b, line) \
301 INITLINE(a, b, line); \
302 INITCOL(a, b, line, Red, 0); \
303 INITCOL(a, b, line, Green, 1); \
304 INITCOL(a, b, line, Blue, 2);
306#define SMALLER(a,b) (a->y < b->y) || (a->y == b->y && a->x < b->x)
308#define SWAP(a,b,c) c = a;\
339 LONG g, gx, gxi, gc[3], gd[3], ge[3], gi[3];
340 LONG sy,
y, bt, g_end;
363 DPRINT(
"Triangle: (%i,%i) (%i,%i) (%i,%i)\n",
v1->x,
v1->y,
v2->x,
v2->y,
v3->x,
v3->y);
376 for (
i = 0;
i < RectEnum.c && RectEnum.arcl[
i].top <=
prclExtents->bottom;
i++)
425 for (
i = 0;
i < RectEnum.c && RectEnum.arcl[
i].top <=
prclExtents->bottom;
i++)
504 case GRADIENT_FILL_RECT_H:
505 case GRADIENT_FILL_RECT_V:
518 (
ulMode == GRADIENT_FILL_RECT_H)))
526 case GRADIENT_FILL_TRIANGLE:
BOOL APIENTRY IntEngEnter(PINTENG_ENTER_LEAVE EnterLeave, SURFOBJ *psoDest, RECTL *DestRect, BOOL ReadOnly, POINTL *Translate, SURFOBJ **ppsoOutput)
BOOL APIENTRY IntEngLeave(PINTENG_ENTER_LEAVE EnterLeave)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLfloat GLfloat GLfloat GLfloat v3
GLfloat GLfloat GLfloat v2
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define CONTAINING_RECORD(address, type, field)
DIB_FUNCTIONS DibFunctionsForBitmapFormat[]
#define S_DOLINE(a, b, line)
#define S_ENDLINE(a, b, line)
static BOOL IntEngIsNULLTriangle(TRIVERTEX *pVertex, GRADIENT_TRIANGLE *gt)
#define ENDLINE(a, b, line)
#define S_INITLINE(a, b, line)
BOOL FASTCALL IntEngGradientFillRect(IN SURFOBJ *psoDest, IN CLIPOBJ *pco, IN XLATEOBJ *pxlo, IN TRIVERTEX *pVertex, IN ULONG nVertex, IN PGRADIENT_RECT gRect, IN RECTL *prclExtents, IN POINTL *pptlDitherOrg, IN BOOL Horizontal)
BOOL APIENTRY IntEngGradientFill(IN SURFOBJ *psoDest, IN CLIPOBJ *pco, IN XLATEOBJ *pxlo, IN TRIVERTEX *pVertex, IN ULONG nVertex, IN PVOID pMesh, IN ULONG nMesh, IN RECTL *prclExtents, IN POINTL *pptlDitherOrg, IN ULONG ulMode)
#define DOLINE(a, b, line)
BOOL APIENTRY EngGradientFill(_Inout_ SURFOBJ *psoDest, _In_ CLIPOBJ *pco, _In_opt_ XLATEOBJ *pxlo, _In_ TRIVERTEX *pVertex, _In_ ULONG nVertex, _In_ PVOID pMesh, _In_ ULONG nMesh, _In_ RECTL *prclExtents, _In_ POINTL *pptlDitherOrg, _In_ ULONG ulMode)
#define S_FILLLINE(linefrom, lineto)
#define HVINITCOL(Col, id)
#define S_GOLINE(a, b, line)
#define GOLINE(a, b, line)
#define COMPAREVERTEX(a, b)
#define DOINIT(a, b, line)
#define FILLLINE(linefrom, lineto)
BOOL FASTCALL IntEngGradientFillTriangle(IN SURFOBJ *psoDest, IN CLIPOBJ *pco, IN XLATEOBJ *pxlo, IN TRIVERTEX *pVertex, IN ULONG nVertex, IN PGRADIENT_TRIANGLE gTriangle, IN RECTL *prclExtents, IN POINTL *pptlDitherOrg)
#define VCMPCLRS(a, b, c)
#define GDIDEVFUNCS(SurfObj)
BOOL FASTCALL RECTL_bIntersectRect(_Out_ RECTL *prclDst, _In_ const RECTL *prcl1, _In_ const RECTL *prcl2)
FORCEINLINE VOID RECTL_vOffsetRect(_Inout_ RECTL *prcl, _In_ INT cx, _In_ INT cy)
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG _In_ PVOID pMesh
ENGAPI ULONG APIENTRY XLATEOBJ_iXlate(_In_ XLATEOBJ *pxlo, _In_ ULONG iColor)
ENGAPI BOOL APIENTRY CLIPOBJ_bEnum(_In_ CLIPOBJ *pco, _In_ ULONG cj, _Out_bytecap_(cj) ULONG *pul)
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG _In_ PVOID _In_ ULONG _In_ RECTL _In_ POINTL * pptlDitherOrg
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG nVertex
_In_ SURFOBJ _In_ CLIPOBJ _In_opt_ XLATEOBJ * pxlo
#define HOOK_GRADIENTFILL
ENGAPI ULONG APIENTRY CLIPOBJ_cEnumStart(_Inout_ CLIPOBJ *pco, _In_ BOOL bAll, _In_ ULONG iType, _In_ ULONG iDirection, _In_ ULONG cLimit)
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG _In_ PVOID _In_ ULONG _In_ RECTL * prclExtents
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG _In_ PVOID _In_ ULONG _In_ RECTL _In_ POINTL _In_ ULONG ulMode
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX * pVertex
_In_ CLIPOBJ _In_opt_ XLATEOBJ _In_ TRIVERTEX _In_ ULONG _In_ PVOID _In_ ULONG nMesh
_In_ SURFOBJ _In_ CLIPOBJ * pco
struct _GRADIENT_RECT * PGRADIENT_RECT
struct _GRADIENT_TRIANGLE * PGRADIENT_TRIANGLE
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)