IntEngGradientFill: don't assert, if no CLIPOBJ is given, instead handle this case...
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 5 Jun 2008 00:23:27 +0000 (00:23 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 5 Jun 2008 00:23:27 +0000 (00:23 +0000)
svn path=/trunk/; revision=33859

reactos/subsystems/win32/win32k/eng/gradient.c

index d2b877a..19bba28 100644 (file)
@@ -481,6 +481,17 @@ EngGradientFill(
     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 @@ EngGradientFill(
         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 @@ EngGradientFill(
         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 @@ IntEngGradientFill(
   BOOL Ret;
   BITMAPOBJ *pboDest;
   ASSERT(psoDest);
-  ASSERT(pco);
 
   pboDest = CONTAINING_RECORD(psoDest, BITMAPOBJ, SurfObj);
   ASSERT(pboDest);