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
_______________________________________________
xorg-devel mailing list
xorg-devel@lists.x.org
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to