Author: tkreuzer
Date: Wed Jun 4 19:23:27 2008
New Revision: 33859
URL:
http://svn.reactos.org/svn/reactos?rev=33859&view=rev
Log:
IntEngGradientFill: don't assert, if no CLIPOBJ is given, instead handle this case in
EngGradientFill, creating a CLIPOBJ from bounds rect.
Modified:
trunk/reactos/subsystems/win32/win32k/eng/gradient.c
Modified: trunk/reactos/subsystems/win32/win32k/eng/gradient.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/en…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/gradient.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/gradient.c [iso-8859-1] Wed Jun 4 19:23:27
2008
@@ -481,6 +481,17 @@
IN ULONG ulMode)
{
ULONG i;
+ CLIPOBJ *pcoPriv = NULL;
+ BOOL ret = FALSE;
+
+ if (!pco)
+ {
+ pco = pcoPriv = IntEngCreateClipRegion(0, 0, prclExtents);
+ if (!pco)
+ {
+ return FALSE;
+ }
+ }
switch(ulMode)
{
@@ -493,10 +504,11 @@
if(!IntEngGradientFillRect(psoDest, pco, pxlo, pVertex, nVertex, gr,
prclExtents,
pptlDitherOrg, (ulMode == GRADIENT_FILL_RECT_H)))
{
- return FALSE;
+ break;
}
}
- return TRUE;
+ ret = TRUE;
+ break;
}
case GRADIENT_FILL_TRIANGLE:
{
@@ -511,13 +523,20 @@
if(!IntEngGradientFillTriangle(psoDest, pco, pxlo, pVertex, nVertex, gt,
prclExtents,
pptlDitherOrg))
{
- return FALSE;
+ break;
}
}
- return TRUE;
+ ret = TRUE;
+ break;
}
}
- return FALSE;
+
+ if (pcoPriv)
+ {
+ IntEngDeleteClipRegion(pcoPriv);
+ }
+
+ return ret;
}
BOOL STDCALL
@@ -536,7 +555,6 @@
BOOL Ret;
BITMAPOBJ *pboDest;
ASSERT(psoDest);
- ASSERT(pco);
pboDest = CONTAINING_RECORD(psoDest, BITMAPOBJ, SurfObj);
ASSERT(pboDest);