diff options
Diffstat (limited to 'hw/xnest/GC.c')
-rw-r--r-- | hw/xnest/GC.c | 44 |
1 files changed, 14 insertions, 30 deletions
diff --git a/hw/xnest/GC.c b/hw/xnest/GC.c index 579350b19..5f9d224ca 100644 --- a/hw/xnest/GC.c +++ b/hw/xnest/GC.c @@ -90,37 +90,21 @@ xnestValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) static void xnestChangeClip(GCPtr pGC) { - int i, size, nRects; - BoxPtr pBox; - XRectangle *pRects; - - switch(pGC->clientClipType) - { - case CT_NONE: - XSetClipMask(xnestDisplay, xnestGC(pGC), None); - break; - - case CT_REGION: - nRects = RegionNumRects((RegionPtr) pGC->clientClip); - size = nRects * sizeof(*pRects); - pRects = (XRectangle *) malloc(size); - pBox = RegionRects((RegionPtr) pGC->clientClip); - for (i = nRects; i-- > 0; ) { - pRects[i].x = pBox[i].x1; - pRects[i].y = pBox[i].y1; - pRects[i].width = pBox[i].x2 - pBox[i].x1; - pRects[i].height = pBox[i].y2 - pBox[i].y1; - } - XSetClipRectangles(xnestDisplay, xnestGC(pGC), 0, 0, - pRects, nRects, Unsorted); - free((char *) pRects); - break; - - case CT_PIXMAP: - XSetClipMask(xnestDisplay, xnestGC(pGC), - xnestPixmap((PixmapPtr) pGC->clientClip)); - break; + if (pGC->clientClip) { + int i, nRects = RegionNumRects((RegionPtr) pGC->clientClip); + XRectangle *pRects = malloc(nRects * sizeof(*pRects)); + BoxPtr pBox = RegionRects((RegionPtr) pGC->clientClip); + for (i = nRects; i-- > 0; ) { + pRects[i].x = pBox[i].x1; + pRects[i].y = pBox[i].y1; + pRects[i].width = pBox[i].x2 - pBox[i].x1; + pRects[i].height = pBox[i].y2 - pBox[i].y1; } + XSetClipRectangles(xnestDisplay, xnestGC(pGC), 0, 0, + pRects, nRects, Unsorted); + free(pRects); + } else + XSetClipMask(xnestDisplay, xnestGC(pGC), None); } void |