[PATCH 2/2] Fix miComputeCompositeRegion() to follow new clip rules.

Soeren Sandmann sandmann at daimi.au.dk
Sat Jun 13 08:02:00 PDT 2009


Ignore the hierarchy clip, and always apply any client clip after
transformation and repeating.
---
 render/mipict.c |   40 ++++++++++++++++------------------------
 1 files changed, 16 insertions(+), 24 deletions(-)

diff --git a/render/mipict.c b/render/mipict.c
index e0d40ae..71f3de7 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -313,32 +313,24 @@ miClipPictureSrc (RegionPtr	pRegion,
 		  int		dx,
 		  int		dy)
 {
-    /* XXX what to do with clipping from transformed pictures? */
-    if (pPicture->transform || !pPicture->pDrawable)
-	return TRUE;
-    if (pPicture->repeat)
+    if (pPicture->clientClipType != CT_NONE)
     {
-	if (pPicture->clientClipType != CT_NONE)
-	{
-	    pixman_region_translate ( pRegion, 
-			     dx - pPicture->clipOrigin.x,
-			     dy - pPicture->clipOrigin.y);
-	    if (!REGION_INTERSECT (pScreen, pRegion, pRegion, 
-				   (RegionPtr) pPicture->pCompositeClip)) // clientClip))
-		return FALSE;
-	    pixman_region_translate ( pRegion, 
-			     - (dx - pPicture->clipOrigin.x),
-			     - (dy - pPicture->clipOrigin.y));
-	}
-	return TRUE;
-    }
-    else
-    {
-	return miClipPictureReg (pRegion,
-				 pPicture->pCompositeClip,
-				 dx,
-				 dy);
+	Bool result;
+	
+	pixman_region_translate ( pPicture->clientClip,
+				  pPicture->clipOrigin.x - dx,
+				  pPicture->clipOrigin.y - dy);
+
+	result = REGION_INTERSECT (pScreen, pRegion, pRegion, pPicture->clientClip);
+	
+	pixman_region_translate ( pPicture->clientClip,
+				  - (pPicture->clipOrigin.x - dx),
+				  - (pPicture->clipOrigin.y - dy));
+
+	if (!result)
+	    return FALSE;
     }
+    return TRUE;
 }
 
 void
-- 
1.6.2.2


More information about the xorg-devel mailing list