summaryrefslogtreecommitdiff
path: root/hw/xnest/GC.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xnest/GC.c')
-rw-r--r--hw/xnest/GC.c44
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