[WIN32K]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 27 Sep 2014 22:59:13 +0000 (22:59 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 27 Sep 2014 22:59:13 +0000 (22:59 +0000)
Fix NtGdiExcludeClipRect. Should fix regressions from r64260.

svn path=/trunk/; revision=64359

reactos/win32ss/gdi/ntgdi/cliprgn.c

index 09f36e1..fa7ebe5 100644 (file)
@@ -226,35 +226,28 @@ NtGdiExcludeClipRect(
         iComplexity = REGION_SubtractRectFromRgn(pdc->dclevel.prgnClip,
                                                  pdc->dclevel.prgnClip,
                                                  &rect);
-
-        /* Emulate Windows behavior */
-        if (iComplexity == SIMPLEREGION)
-            iComplexity = COMPLEXREGION;
     }
     else
     {
-        /* Check if the rect intersects with the window rect */
-        if (RECTL_bIntersectRect(&rect, &rect, &pdc->erclWindow))
+        /* We don't have a clip region yet, create an empty region */
+        pdc->dclevel.prgnClip = IntSysCreateRectpRgn(0, 0, 0, 0);
+        if (pdc->dclevel.prgnClip == NULL)
         {
-            /* It does. In this case create an empty region */
-            pdc->dclevel.prgnClip = IntSysCreateRectpRgn(0, 0, 0, 0);
-            iComplexity = NULLREGION;
+            iComplexity = ERROR;
         }
         else
         {
-            /* Otherwise, emulate strange Windows behavior... */
-            pdc->dclevel.prgnClip = IntSysCreateRectpRgn(0, 0, 1, 1);
-            iComplexity = COMPLEXREGION;
-        }
-
-        /* Check if creating the region failed */
-        if (pdc->dclevel.prgnClip == NULL)
-        {
-            /* Return error code */
-            iComplexity = ERROR;
+            /* Subtract the rect from the VIS region */
+            iComplexity = REGION_SubtractRectFromRgn(pdc->dclevel.prgnClip,
+                                                     pdc->prgnVis,
+                                                     &rect);
         }
     }
 
+    /* Emulate Windows behavior */
+    if (iComplexity == SIMPLEREGION)
+        iComplexity = COMPLEXREGION;
+
     /* If we succeeded, mark the RAO region as dirty */
     if (iComplexity != ERROR)
         pdc->fs |= DC_FLAG_DIRTY_RAO;