[PATCH resend 2/3] Make GC clientClip always be a region.
Jamey Sharp
jamey at minilop.net
Mon Sep 26 22:53:13 PDT 2011
Nothing ever set clientClip to anything but a region or NULL, so delete
the clientClipType field and change clientClip from (pointer) to
(RegionPtr).
Signed-off-by: Jamey Sharp <jamey at minilop.net>
---
dix/gc.c | 51 +++++++++----------------------------------
exa/exa_accel.c | 18 +++++++-------
exa/exa_priv.h | 6 ++--
exa/exa_unaccel.c | 6 ++--
hw/dmx/dmxgc.c | 50 ++++++++++++++++++-------------------------
hw/kdrive/src/kxv.c | 2 +-
hw/xfree86/common/xf86xv.c | 2 +-
hw/xfree86/xaa/xaaBitBlt.c | 4 +-
hw/xnest/GC.c | 44 ++++++++++++-------------------------
include/gcstruct.h | 5 +--
mi/micopy.c | 4 +-
mi/miexpose.c | 2 +-
mi/migc.c | 4 +-
mi/mioverlay.c | 2 +-
xfixes/region.c | 25 +++++++--------------
15 files changed, 81 insertions(+), 144 deletions(-)
diff --git a/dix/gc.c b/dix/gc.c
index e7568fc..d33f934 100644
--- a/dix/gc.c
+++ b/dix/gc.c
@@ -523,8 +523,7 @@ CreateGC(DrawablePtr pDrawable, BITS32 mask, XID *pval, int *pStatus,
pGC->graphicsExposures = TRUE;
pGC->clipOrg.x = 0;
pGC->clipOrg.y = 0;
- pGC->clientClipType = CT_NONE;
- pGC->clientClip = (pointer)NULL;
+ pGC->clientClip = NULL;
pGC->numInDashList = 2;
pGC->dash = DefaultDash;
pGC->dashOffset = 0;
@@ -836,7 +835,6 @@ CreateScratchGC(ScreenPtr pScreen, unsigned depth)
pGC->graphicsExposures = TRUE;
pGC->clipOrg.x = 0;
pGC->clipOrg.y = 0;
- pGC->clientClipType = CT_NONE;
pGC->dashOffset = 0;
pGC->numInDashList = 2;
pGC->dash = DefaultDash;
@@ -1087,22 +1085,10 @@ SetClipRects(GCPtr pGC, int xOrigin, int yOrigin, int nrects,
static void
DestroyClip(GCPtr pGC)
{
- if (pGC->clientClipType == CT_NONE)
+ if (!pGC->clientClip)
return;
- else if (pGC->clientClipType == CT_PIXMAP)
- {
- (*pGC->pScreen->DestroyPixmap) ((PixmapPtr) (pGC->clientClip));
- }
- else
- {
- /*
- * we know we'll never have a list of rectangles, since ChangeClip
- * immediately turns them into a region
- */
- RegionDestroy(pGC->clientClip);
- }
+ RegionDestroy(pGC->clientClip);
pGC->clientClip = NULL;
- pGC->clientClipType = CT_NONE;
}
void
@@ -1112,8 +1098,7 @@ ChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
if (type == CT_PIXMAP)
{
/* convert the pixmap to a region */
- pGC->clientClip = (pointer) BitmapToRegion(pGC->pScreen,
- (PixmapPtr) pvalue);
+ pGC->clientClip = BitmapToRegion(pGC->pScreen, (PixmapPtr) pvalue);
(*pGC->pScreen->DestroyPixmap) (pvalue);
}
else if (type == CT_REGION)
@@ -1123,35 +1108,21 @@ ChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
}
else if (type != CT_NONE)
{
- pGC->clientClip = (pointer) RegionFromRects(nrects,
- (xRectangle *) pvalue,
- type);
+ pGC->clientClip = RegionFromRects(nrects, (xRectangle *) pvalue, type);
free(pvalue);
}
- pGC->clientClipType = (type != CT_NONE && pGC->clientClip) ? CT_REGION : CT_NONE;
pGC->stateChanges |= GCClipMask;
}
static void
CopyClip(GCPtr pgcDst, GCPtr pgcSrc)
{
- RegionPtr prgnNew;
-
- switch (pgcSrc->clientClipType)
- {
- case CT_PIXMAP:
- ((PixmapPtr) pgcSrc->clientClip)->refcnt++;
- /* Fall through !! */
- case CT_NONE:
- ChangeClip(pgcDst, (int) pgcSrc->clientClipType,
- pgcSrc->clientClip, 0);
- break;
- case CT_REGION:
- prgnNew = RegionCreate(NULL, 1);
- RegionCopy(prgnNew, (RegionPtr) (pgcSrc->clientClip));
- ChangeClip(pgcDst, CT_REGION, prgnNew, 0);
- break;
- }
+ if (pgcSrc->clientClip) {
+ RegionPtr prgnNew = RegionCreate(NULL, 1);
+ RegionCopy(prgnNew, pgcSrc->clientClip);
+ ChangeClip(pgcDst, CT_REGION, prgnNew, 0);
+ } else
+ ChangeClip(pgcDst, CT_NONE, NULL, 0);
}
/*
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index 5600539..21e8741 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -421,7 +421,7 @@ exaHWCopyNtoN (DrawablePtr pSrcDrawable,
if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,
pGC->fillStyle, pGC->alu,
- pGC->clientClipType)) {
+ pGC->clientClip)) {
dstregion = RegionCreate(NullBox, 0);
RegionCopy(dstregion, srcregion);
RegionTranslate(dstregion, dst_off_x - dx - src_off_x,
@@ -768,7 +768,7 @@ exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg,
static Bool exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion,
Pixel pixel, CARD32 planemask, CARD32 alu,
- unsigned int clientClipType);
+ RegionPtr clientClip);
static void
exaPolyFillRect(DrawablePtr pDrawable,
@@ -816,11 +816,11 @@ exaPolyFillRect(DrawablePtr pDrawable,
if (((pGC->fillStyle == FillSolid || pGC->tileIsPixel) &&
exaFillRegionSolid(pDrawable, pReg, pGC->fillStyle == FillSolid ?
pGC->fgPixel : pGC->tile.pixel, pGC->planemask,
- pGC->alu, pGC->clientClipType)) ||
+ pGC->alu, pGC->clientClip)) ||
(pGC->fillStyle == FillTiled && !pGC->tileIsPixel &&
exaFillRegionTiled(pDrawable, pReg, pGC->tile.pixmap, &pGC->patOrg,
pGC->planemask, pGC->alu,
- pGC->clientClipType))) {
+ pGC->clientClip))) {
goto out;
}
}
@@ -998,7 +998,7 @@ fallback:
static Bool
exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel,
- CARD32 planemask, CARD32 alu, unsigned int clientClipType)
+ CARD32 planemask, CARD32 alu, RegionPtr clientClip)
{
ExaScreenPriv(pDrawable->pScreen);
PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
@@ -1019,7 +1019,7 @@ exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel,
pixmaps[0].as_src = FALSE;
pixmaps[0].pPix = pPixmap;
pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid,
- alu, clientClipType) ? NULL : pRegion;
+ alu, clientClip) ? NULL : pRegion;
exaDoMigration (pixmaps, 1, TRUE);
}
@@ -1084,7 +1084,7 @@ out:
Bool
exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu,
- unsigned int clientClipType)
+ RegionPtr clientClip)
{
ExaScreenPriv(pDrawable->pScreen);
PixmapPtr pPixmap;
@@ -1106,7 +1106,7 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
if (tileWidth == 1 && tileHeight == 1)
return exaFillRegionSolid(pDrawable, pRegion,
exaGetPixmapFirstPixel (pTile), planemask,
- alu, clientClipType);
+ alu, clientClip);
pPixmap = exaGetDrawablePixmap (pDrawable);
pExaPixmap = ExaGetPixmapPriv (pPixmap);
@@ -1122,7 +1122,7 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
pixmaps[0].as_src = FALSE;
pixmaps[0].pPix = pPixmap;
pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled,
- alu, clientClipType) ? NULL : pRegion;
+ alu, clientClip) ? NULL : pRegion;
pixmaps[1].as_dst = FALSE;
pixmaps[1].as_src = TRUE;
pixmaps[1].pPix = pTile;
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 70de4bd..64b2671 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -449,11 +449,11 @@ ExaCheckAddTraps (PicturePtr pPicture,
static _X_INLINE Bool
exaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask,
unsigned int fillStyle, unsigned char alu,
- unsigned int clientClipType)
+ RegionPtr clientClip)
{
return ((alu != GXcopy && alu != GXclear && alu != GXset &&
alu != GXcopyInverted) || fillStyle == FillStippled ||
- clientClipType != CT_NONE || !EXA_PM_IS_SOLID(pDrawable, planemask));
+ clientClip != NullRegion || !EXA_PM_IS_SOLID(pDrawable, planemask));
}
void
@@ -462,7 +462,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
Bool
exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu,
- unsigned int clientClipType);
+ RegionPtr clientClip);
void
exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index 219f903..9f237e9 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -106,7 +106,7 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth,
EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
if (!pExaScr->prepare_access_reg || !pExaPixmap->pDamage ||
exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle,
- pGC->alu, pGC->clientClipType))
+ pGC->alu, pGC->clientClip))
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
else
pExaScr->prepare_access_reg(pPixmap, EXA_PREPARE_DEST,
@@ -139,7 +139,7 @@ ExaCheckCopyNtoN (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
if (pExaScr->prepare_access_reg &&
!exaGCReadsDestination(pDst, pGC->planemask, pGC->fillStyle,
- pGC->alu, pGC->clientClipType) &&
+ pGC->alu, pGC->clientClip) &&
RegionInitBoxes (®, pbox, nbox)) {
PixmapPtr pPixmap = exaGetDrawablePixmap(pDst);
@@ -175,7 +175,7 @@ ExaFallbackPrepareReg(DrawablePtr pDrawable,
pGC->planemask,
pGC->fillStyle,
pGC->alu,
- pGC->clientClipType))) {
+ pGC->clientClip))) {
BoxRec box;
RegionRec reg;
int xoff, yoff;
diff --git a/hw/dmx/dmxgc.c b/hw/dmx/dmxgc.c
index b1347c1..8ec9b22 100644
--- a/hw/dmx/dmxgc.c
+++ b/hw/dmx/dmxgc.c
@@ -188,38 +188,30 @@ static void dmxBEChangeClip(GCPtr pGC)
ScreenPtr pScreen = pGC->pScreen;
DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
- XRectangle *pRects;
- BoxPtr pBox;
- int i, nRects;
- /* Set the client clip on the back-end server */
- switch (pGC->clientClipType) {
- case CT_NONE:
- if (dmxScreen->beDisplay)
- XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
- break;
+ if (!dmxScreen->beDisplay)
+ return;
- case CT_REGION:
- if (dmxScreen->beDisplay) {
- nRects = RegionNumRects((RegionPtr)pGC->clientClip);
- pRects = malloc(nRects * sizeof(*pRects));
- pBox = RegionRects((RegionPtr)pGC->clientClip);
-
- for (i = 0; i < nRects; i++) {
- 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(dmxScreen->beDisplay, pGCPriv->gc,
- pGC->clipOrg.x, pGC->clipOrg.y,
- pRects, nRects, Unsorted);
-
- free(pRects);
+ /* Set the client clip on the back-end server */
+ if (pGC->clientClip) {
+ int i, nRects = RegionNumRects(pGC->clientClip);
+ XRectangle *pRects = malloc(nRects * sizeof(*pRects));
+ BoxPtr pBox = RegionRects(pGC->clientClip);
+
+ for (i = 0; i < nRects; i++) {
+ 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;
}
- break;
- }
+
+ XSetClipRectangles(dmxScreen->beDisplay, pGCPriv->gc,
+ pGC->clipOrg.x, pGC->clipOrg.y,
+ pRects, nRects, Unsorted);
+
+ free(pRects);
+ } else
+ XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
}
/** Set the values in the graphics context on the back-end server
diff --git a/hw/kdrive/src/kxv.c b/hw/kdrive/src/kxv.c
index 50dc235..fcd2ebb 100644
--- a/hw/kdrive/src/kxv.c
+++ b/hw/kdrive/src/kxv.c
@@ -630,7 +630,7 @@ KdXVCopyClip(
GCPtr pGC
){
/* copy the new clip if it exists */
- if((pGC->clientClipType == CT_REGION) && pGC->clientClip) {
+ if(pGC->clientClip) {
if(!portPriv->clientClip)
portPriv->clientClip = RegionCreate(NullBox, 1);
/* Note: this is in window coordinates */
diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index b46dfef..c5ac9f5 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -695,7 +695,7 @@ xf86XVCopyClip(
GCPtr pGC
){
/* copy the new clip if it exists */
- if((pGC->clientClipType == CT_REGION) && pGC->clientClip) {
+ if(pGC->clientClip) {
if(!portPriv->clientClip)
portPriv->clientClip = RegionCreate(NullBox, 1);
/* Note: this is in window coordinates */
diff --git a/hw/xfree86/xaa/xaaBitBlt.c b/hw/xfree86/xaa/xaaBitBlt.c
index 049dbfb..3d50b90 100644
--- a/hw/xfree86/xaa/xaaBitBlt.c
+++ b/hw/xfree86/xaa/xaaBitBlt.c
@@ -65,7 +65,7 @@ XAABitBlt(
/* clip the source */
if (pSrcDrawable->type == DRAWABLE_PIXMAP) {
- if ((pSrcDrawable == pDstDrawable) && (pGC->clientClipType == CT_NONE))
+ if ((pSrcDrawable == pDstDrawable) && !pGC->clientClip)
prgnSrcClip = pGC->pCompositeClip;
else
fastClip = 1;
@@ -78,7 +78,7 @@ XAABitBlt(
*/
fastClip = 1;
} else if ((pSrcDrawable == pDstDrawable) &&
- (pGC->clientClipType == CT_NONE)) {
+ !pGC->clientClip) {
prgnSrcClip = pGC->pCompositeClip;
} else {
prgnSrcClip = NotClippedByChildren((WindowPtr)pSrcDrawable);
diff --git a/hw/xnest/GC.c b/hw/xnest/GC.c
index 579350b..ac99ffd 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((char *) pRects);
+ } else
+ XSetClipMask(xnestDisplay, xnestGC(pGC), None);
}
void
diff --git a/include/gcstruct.h b/include/gcstruct.h
index fb9ee0d..ed598fc 100644
--- a/include/gcstruct.h
+++ b/include/gcstruct.h
@@ -278,13 +278,12 @@ typedef struct _GC {
unsigned int arcMode : 1;
unsigned int subWindowMode : 1;
unsigned int graphicsExposures : 1;
- unsigned int clientClipType : 2; /* CT_<kind> */
unsigned int miTranslate:1; /* should mi things translate? */
unsigned int tileIsPixel:1; /* tile is solid pixel */
unsigned int fExpose:1; /* Call exposure handling */
unsigned int freeCompClip:1; /* Free composite clip */
unsigned int scratch_inuse:1; /* is this GC in a pool for reuse? */
- unsigned int unused:13; /* see comment above */
+ unsigned int unused:15; /* see comment above */
unsigned long planemask;
unsigned long fgPixel;
unsigned long bgPixel;
@@ -297,7 +296,7 @@ typedef struct _GC {
DDXPointRec patOrg; /* origin for (tile, stipple) */
struct _Font *font;
DDXPointRec clipOrg;
- pointer clientClip;
+ RegionPtr clientClip;
unsigned long stateChanges; /* masked with GC_<kind> */
unsigned long serialNumber;
GCFuncs *funcs;
diff --git a/mi/micopy.c b/mi/micopy.c
index 652c620..2fb40f5 100644
--- a/mi/micopy.c
+++ b/mi/micopy.c
@@ -192,7 +192,7 @@ miDoCopy (DrawablePtr pSrcDrawable,
/* Compute source clip region */
if (pSrcDrawable->type == DRAWABLE_PIXMAP)
{
- if ((pSrcDrawable == pDstDrawable) && (pGC->clientClipType == CT_NONE))
+ if ((pSrcDrawable == pDstDrawable) && !pGC->clientClip)
prgnSrcClip = miGetCompositeClip(pGC);
else
fastSrc = TRUE;
@@ -215,7 +215,7 @@ miDoCopy (DrawablePtr pSrcDrawable,
fastSrc = TRUE;
}
else if ((pSrcDrawable == pDstDrawable) &&
- (pGC->clientClipType == CT_NONE))
+ !pGC->clientClip)
{
prgnSrcClip = miGetCompositeClip(pGC);
}
diff --git a/mi/miexpose.c b/mi/miexpose.c
index 0f1ebe5..ce02b13 100644
--- a/mi/miexpose.c
+++ b/mi/miexpose.c
@@ -251,7 +251,7 @@ miHandleExposures(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
RegionIntersect(&rgnExposed, &rgnExposed, prgnDstClip);
/* intersect with client clip region. */
- if (pGC->clientClipType == CT_REGION)
+ if (pGC->clientClip)
RegionIntersect(&rgnExposed, &rgnExposed, pGC->clientClip);
/*
diff --git a/mi/migc.c b/mi/migc.c
index dce1f30..bf9cf5a 100644
--- a/mi/migc.c
+++ b/mi/migc.c
@@ -88,7 +88,7 @@ miComputeCompositeClip( GCPtr pGC, DrawablePtr pDrawable)
* regions. (this wins especially if many clients clip by children
* and have no client clip.)
*/
- if (pGC->clientClipType == CT_NONE)
+ if (!pGC->clientClip)
{
if (freeCompClip)
RegionDestroy(pGC->pCompositeClip);
@@ -155,7 +155,7 @@ miComputeCompositeClip( GCPtr pGC, DrawablePtr pDrawable)
pGC->pCompositeClip = RegionCreate(&pixbounds, 1);
}
- if (pGC->clientClipType == CT_REGION)
+ if (pGC->clientClip)
{
if(pDrawable->x || pDrawable->y) {
RegionTranslate(pGC->clientClip,
diff --git a/mi/mioverlay.c b/mi/mioverlay.c
index 766c5e7..fe2063d 100644
--- a/mi/mioverlay.c
+++ b/mi/mioverlay.c
@@ -1745,7 +1745,7 @@ miOverlayComputeCompositeClip(GCPtr pGC, WindowPtr pWin)
freeTmpClip = FALSE;
}
freeCompClip = pGC->freeCompClip;
- if (pGC->clientClipType == CT_NONE) {
+ if (!pGC->clientClip) {
if (freeCompClip)
RegionDestroy(pGC->pCompositeClip);
pGC->pCompositeClip = pregWin;
diff --git a/xfixes/region.c b/xfixes/region.c
index 606bf7a..7017334 100644
--- a/xfixes/region.c
+++ b/xfixes/region.c
@@ -210,7 +210,7 @@ SProcXFixesCreateRegionFromWindow (ClientPtr client)
int
ProcXFixesCreateRegionFromGC (ClientPtr client)
{
- RegionPtr pRegion, pClip;
+ RegionPtr pRegion;
GCPtr pGC;
int rc;
REQUEST (xXFixesCreateRegionFromGCReq);
@@ -221,23 +221,14 @@ ProcXFixesCreateRegionFromGC (ClientPtr client)
rc = dixLookupGC(&pGC, stuff->gc, client, DixGetAttrAccess);
if (rc != Success)
return rc;
-
- switch (pGC->clientClipType) {
- case CT_PIXMAP:
- pRegion = BitmapToRegion(pGC->pScreen, (PixmapPtr) pGC->clientClip);
- if (!pRegion)
- return BadAlloc;
- break;
- case CT_REGION:
- pClip = (RegionPtr) pGC->clientClip;
- pRegion = XFixesRegionCopy (pClip);
- if (!pRegion)
- return BadAlloc;
- break;
- default:
+
+ if (!pGC->clientClip)
return BadImplementation; /* assume sane server bits */
- }
-
+
+ pRegion = XFixesRegionCopy (pGC->clientClip);
+ if (!pRegion)
+ return BadAlloc;
+
if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
return BadAlloc;
--
1.7.5.4
More information about the xorg-devel
mailing list