Author: jimtabor
Date: Sun Jul 9 18:06:24 2017
New Revision: 75312
URL:
http://svn.reactos.org/svn/reactos?rev=75312&view=rev
Log:
[ENG]
- Turn on GradientFill apply small hack fix to keep it out of a loop.
- Turning code off does not fix the code, 8 years later!
Modified:
trunk/reactos/win32ss/gdi/eng/gradient.c
Modified: trunk/reactos/win32ss/gdi/eng/gradient.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/eng/gradient.c…
==============================================================================
--- trunk/reactos/win32ss/gdi/eng/gradient.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/eng/gradient.c [iso-8859-1] Sun Jul 9 18:06:24 2017
@@ -286,7 +286,7 @@
x[line] = a->x; \
sx[line] = a->x + pptlDitherOrg->x; \
dx[line] = abs(b->x - a->x); \
- dy[line] = abs(b->y - a->y); \
+ dy[line] = max(abs(b->y - a->y),1); \
incx[line] = LINC[b->x > a->x]; \
ex[line] = -(dy[line]>>1); \
destx[line] = b->x
@@ -319,19 +319,19 @@
{
SURFOBJ *psoOutput;
PTRIVERTEX v1, v2, v3;
- //RECT_ENUM RectEnum;
- //BOOL EnumMore;
- //ULONG i;
+ RECT_ENUM RectEnum;
+ BOOL EnumMore;
+ ULONG i;
POINTL Translate;
INTENG_ENTER_LEAVE EnterLeave;
RECTL FillRect = { 0, 0, 0, 0 };
- //ULONG Color;
-
- //BOOL sx[NLINES];
- //LONG x[NLINES], dx[NLINES], dy[NLINES], incx[NLINES], ex[NLINES], destx[NLINES];
- //LONG c[NLINES][3], dc[NLINES][3], ec[NLINES][3], ic[NLINES][3]; /* colors on lines
*/
- //LONG g, gx, gxi, gc[3], gd[3], ge[3], gi[3]; /* colors in triangle */
- //LONG sy, y, bt;
+ ULONG Color;
+
+ BOOL sx[NLINES];
+ LONG x[NLINES], dx[NLINES], dy[NLINES], incx[NLINES], ex[NLINES], destx[NLINES];
+ LONG c[NLINES][3], dc[NLINES][3], ec[NLINES][3], ic[NLINES][3]; /* colors on lines
*/
+ LONG g, gx, gxi, gc[3], gd[3], ge[3], gi[3]; /* colors in triangle */
+ LONG sy, y, bt;
v1 = (pVertex + gTriangle->Vertex1);
v2 = (pVertex + gTriangle->Vertex2);
@@ -363,94 +363,94 @@
return FALSE;
}
- //if (VCMPCLRS(v1, v2, v3))
- //{
- // CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
- // do
- // {
- // EnumMore = CLIPOBJ_bEnum(pco, (ULONG) sizeof(RectEnum), (PVOID)
&RectEnum);
- // for (i = 0; i < RectEnum.c && RectEnum.arcl[i].top <=
prclExtents->bottom; i++)
- // {
- // if (RECTL_bIntersectRect(&FillRect, &RectEnum.arcl[i], prclExtents))
- // {
- // BOOL InY;
-
- // DOINIT(v1, v3, 0);
- // DOINIT(v1, v2, 1);
- // DOINIT(v2, v3, 2);
-
- // y = v1->y;
- // sy = v1->y + pptlDitherOrg->y;
- // bt = min(v3->y + pptlDitherOrg->y, FillRect.bottom);
-
- // while (sy < bt)
- // {
- // InY = !(sy < FillRect.top || sy >= FillRect.bottom);
- // GOLINE(v1, v3, 0);
- // DOLINE(v1, v3, 0);
- // ENDLINE(v1, v3, 0);
-
- // GOLINE(v1, v2, 1);
- // DOLINE(v1, v2, 1);
- // FILLLINE(0, 1);
- // ENDLINE(v1, v2, 1);
-
- // GOLINE(v2, v3, 2);
- // DOLINE(v2, v3, 2);
- // FILLLINE(0, 2);
- // ENDLINE(23, v3, 2);
-
- // y++;
- // sy++;
- // }
- // }
- // }
- // } while (EnumMore);
-
- // return IntEngLeave(&EnterLeave);
- //}
-
- ///* fill triangle with one solid color */
-
- //Color = XLATEOBJ_iXlate(pxlo, RGB(v1->Red >> 8, v1->Green >> 8,
v1->Blue >> 8));
- //CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
- //do
- //{
- // EnumMore = CLIPOBJ_bEnum(pco, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum);
- // for (i = 0; i < RectEnum.c && RectEnum.arcl[i].top <=
prclExtents->bottom; i++)
- // {
- // if (RECTL_bIntersectRect(&FillRect, &RectEnum.arcl[i], prclExtents))
- // {
- // S_INITLINE(v1, v3, 0);
- // S_INITLINE(v1, v2, 1);
- // S_INITLINE(v2, v3, 2);
-
- // y = v1->y;
- // sy = v1->y + pptlDitherOrg->y;
- // bt = min(v3->y + pptlDitherOrg->y, FillRect.bottom);
-
- // while (sy < bt)
- // {
- // S_GOLINE(v1, v3, 0);
- // S_DOLINE(v1, v3, 0);
- // S_ENDLINE(v1, v3, 0);
-
- // S_GOLINE(v1, v2, 1);
- // S_DOLINE(v1, v2, 1);
- // S_FILLLINE(0, 1);
- // S_ENDLINE(v1, v2, 1);
-
- // S_GOLINE(v2, v3, 2);
- // S_DOLINE(v2, v3, 2);
- // S_FILLLINE(0, 2);
- // S_ENDLINE(23, v3, 2);
-
- // y++;
- // sy++;
- // }
- // }
- // }
- //} while (EnumMore);
+ if (VCMPCLRS(v1, v2, v3))
+ {
+ CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
+ do
+ {
+ EnumMore = CLIPOBJ_bEnum(pco, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum);
+ for (i = 0; i < RectEnum.c && RectEnum.arcl[i].top <=
prclExtents->bottom; i++)
+ {
+ if (RECTL_bIntersectRect(&FillRect, &RectEnum.arcl[i], prclExtents))
+ {
+ BOOL InY;
+
+ DOINIT(v1, v3, 0);
+ DOINIT(v1, v2, 1);
+ DOINIT(v2, v3, 2);
+
+ y = v1->y;
+ sy = v1->y + pptlDitherOrg->y;
+ bt = min(v3->y + pptlDitherOrg->y, FillRect.bottom);
+
+ while (sy < bt)
+ {
+ InY = !(sy < FillRect.top || sy >= FillRect.bottom);
+ GOLINE(v1, v3, 0);
+ DOLINE(v1, v3, 0);
+ ENDLINE(v1, v3, 0);
+
+ GOLINE(v1, v2, 1);
+ DOLINE(v1, v2, 1);
+ FILLLINE(0, 1);
+ ENDLINE(v1, v2, 1);
+
+ GOLINE(v2, v3, 2);
+ DOLINE(v2, v3, 2);
+ FILLLINE(0, 2);
+ ENDLINE(23, v3, 2);
+
+ y++;
+ sy++;
+ }
+ }
+ }
+ } while (EnumMore);
+
+ return IntEngLeave(&EnterLeave);
+ }
+
+ /* fill triangle with one solid color */
+
+ Color = XLATEOBJ_iXlate(pxlo, RGB(v1->Red >> 8, v1->Green >> 8,
v1->Blue >> 8));
+ CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, CD_RIGHTDOWN, 0);
+ do
+ {
+ EnumMore = CLIPOBJ_bEnum(pco, (ULONG) sizeof(RectEnum), (PVOID) &RectEnum);
+ for (i = 0; i < RectEnum.c && RectEnum.arcl[i].top <=
prclExtents->bottom; i++)
+ {
+ if (RECTL_bIntersectRect(&FillRect, &RectEnum.arcl[i], prclExtents))
+ {
+ S_INITLINE(v1, v3, 0);
+ S_INITLINE(v1, v2, 1);
+ S_INITLINE(v2, v3, 2);
+
+ y = v1->y;
+ sy = v1->y + pptlDitherOrg->y;
+ bt = min(v3->y + pptlDitherOrg->y, FillRect.bottom);
+
+ while (sy < bt)
+ {
+ S_GOLINE(v1, v3, 0);
+ S_DOLINE(v1, v3, 0);
+ S_ENDLINE(v1, v3, 0);
+
+ S_GOLINE(v1, v2, 1);
+ S_DOLINE(v1, v2, 1);
+ S_FILLLINE(0, 1);
+ S_ENDLINE(v1, v2, 1);
+
+ S_GOLINE(v2, v3, 2);
+ S_DOLINE(v2, v3, 2);
+ S_FILLLINE(0, 2);
+ S_ENDLINE(23, v3, 2);
+
+ y++;
+ sy++;
+ }
+ }
+ }
+ } while (EnumMore);
return IntEngLeave(&EnterLeave);
}