So I've been battling a rather annoying bug rendering borders in XQuartz:

http://xquartz.macosforge.org/trac/ticket/290

Everything works fine when the window is located at the screen origin.  
Interestingly, another recent regression also results in some window contents 
getting clipped as if the clipping bounds were translated to the origin:

https://bugs.freedesktop.org/show_bug.cgi?id=26124

so my assumption is that these two are related.  I've figured out a workaround 
for the first issue (below) which essentially sets the clipping region in 
miPaintWindow to the entire screen.  In some runs through, it looks like this 
clipping region was getting set to (0,0 <window width> x <window height>), and 
the rects being drawn were in the screen's coordinate system (which is 
expected).

Now, why would this be happening?

As I did some resizing of the window, I noticed the following:

GC: 0 x:670-870 y:335-535 drawable: 670 335, pWin->drawable: 670 335
GC: 0 x:560-874 y:225-556 drawable: 560 225, pWin->drawable: 560 225
GC: 1 x:0-333 y:0-377 drawable: 0 0, pWin->drawable: 670 335
GC: 0 x:560-893 y:225-580 drawable: 560 225, pWin->drawable: 560 225
GC: 1 x:0-333 y:0-377 drawable: 0 0, pWin->drawable: 670 335
GC: 0 x:560-893 y:225-580 drawable: 560 225, pWin->drawable: 560 225
GC: 0 x:560-910 y:225-598 drawable: 560 225, pWin->drawable: 560 225
GC: 0 x:560-910 y:225-598 drawable: 560 225, pWin->drawable: 560 225

ErrorF("GC: %d x:%d-%d y:%d-%d drawable: %d %d, pWin->drawable: %d %d\n", what,
       pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.x2,
       pGC->pCompositeClip->extents.y1, pGC->pCompositeClip->extents.y2,
       drawable->x, drawable->y, pWin->drawable.x, pWin->drawable.y);

The window I was resizing was from border.c in 
http://xquartz.macosforge.org/trac/ticket/290

Thanks for the help... now it's time for me to sleep...

--Jeremy

diff --git a/mi/miexpose.c b/mi/miexpose.c
index 6776064..b43777d 100644
--- a/mi/miexpose.c
+++ b/mi/miexpose.c
@@ -680,6 +680,19 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
        prect->height = pbox->y2 - pbox->y1;
     }
     prect -= numRects;
+    
+#ifdef XQUARTZ
+    /* Looks like our clipping isn't set right for some reason:
+     * http://xquartz.macosforge.org/trac/ticket/290
+     */
+    if(what == PW_BORDER) {
+       pGC->pCompositeClip->extents.x1 = 0;
+       pGC->pCompositeClip->extents.y1 = 0;
+       pGC->pCompositeClip->extents.x2 = drawable->pScreen->width;
+       pGC->pCompositeClip->extents.y2 = drawable->pScreen->height;
+    }
+#endif
+
     (*pGC->ops->PolyFillRect)(drawable, pGC, numRects, prect);
     xfree(prect);
 

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to