summaryrefslogtreecommitdiff
path: root/render/mipict.c
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2014-10-08 17:20:33 +0200
committerKeith Packard <keithp@keithp.com>2014-10-23 14:35:49 -0700
commit462bf87c4d1c2211dd49a5ce62d01ff84ff33970 (patch)
tree397fba28721adaf3a3c4469a589d59072516bffb /render/mipict.c
parent3f4edd2e3ff84c38df563b09c2e8c32404db38f7 (diff)
render: Always store client clip as a region
This does have one semantic change. FixesCreateRegionFromPicture used to throw BadImplementation if you tried to create a region from a picture with no client clip. I changed that to BadMatch here since that more honestly describes what's going on. Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'render/mipict.c')
-rw-r--r--render/mipict.c34
1 files changed, 7 insertions, 27 deletions
diff --git a/render/mipict.c b/render/mipict.c
index 3959fc415..a72510480 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -49,23 +49,9 @@ miDestroyPicture(PicturePtr pPicture)
void
miDestroyPictureClip(PicturePtr pPicture)
{
- switch (pPicture->clientClipType) {
- case CT_NONE:
- return;
- case CT_PIXMAP:
- (*pPicture->pDrawable->pScreen->
- DestroyPixmap) ((PixmapPtr) (pPicture->clientClip));
- break;
- default:
- /*
- * we know we'll never have a list of rectangles, since ChangeClip
- * immediately turns them into a region
- */
+ if (pPicture->clientClip)
RegionDestroy(pPicture->clientClip);
- break;
- }
pPicture->clientClip = NULL;
- pPicture->clientClipType = CT_NONE;
}
int
@@ -73,37 +59,31 @@ miChangePictureClip(PicturePtr pPicture, int type, void *value, int n)
{
ScreenPtr pScreen = pPicture->pDrawable->pScreen;
PictureScreenPtr ps = GetPictureScreen(pScreen);
- void *clientClip;
- int clientClipType;
+ RegionPtr clientClip;
switch (type) {
case CT_PIXMAP:
/* convert the pixmap to a region */
- clientClip = (void *) BitmapToRegion(pScreen, (PixmapPtr) value);
+ clientClip = BitmapToRegion(pScreen, (PixmapPtr) value);
if (!clientClip)
return BadAlloc;
- clientClipType = CT_REGION;
(*pScreen->DestroyPixmap) ((PixmapPtr) value);
break;
case CT_REGION:
clientClip = value;
- clientClipType = CT_REGION;
break;
case CT_NONE:
clientClip = 0;
- clientClipType = CT_NONE;
break;
default:
- clientClip = (void *) RegionFromRects(n, (xRectangle *) value, type);
+ clientClip = RegionFromRects(n, (xRectangle *) value, type);
if (!clientClip)
return BadAlloc;
- clientClipType = CT_REGION;
free(value);
break;
}
(*ps->DestroyPictureClip) (pPicture);
pPicture->clientClip = clientClip;
- pPicture->clientClipType = clientClipType;
pPicture->stateChanges |= CPClipMask;
return Success;
}
@@ -144,7 +124,7 @@ miValidatePicture(PicturePtr pPicture, Mask mask)
* copying of regions. (this wins especially if many clients clip
* by children and have no client clip.)
*/
- if (pPicture->clientClipType == CT_NONE) {
+ if (!pPicture->clientClip) {
if (freeCompClip)
RegionDestroy(pPicture->pCompositeClip);
pPicture->pCompositeClip = pregWin;
@@ -203,7 +183,7 @@ miValidatePicture(PicturePtr pPicture, Mask mask)
pPicture->pCompositeClip = RegionCreate(&pixbounds, 1);
}
- if (pPicture->clientClipType == CT_REGION) {
+ if (pPicture->clientClip) {
if (pDrawable->x || pDrawable->y) {
RegionTranslate(pPicture->clientClip,
pDrawable->x + pPicture->clipOrigin.x,
@@ -284,7 +264,7 @@ miClipPictureReg(pixman_region16_t * pRegion,
static inline Bool
miClipPictureSrc(RegionPtr pRegion, PicturePtr pPicture, int dx, int dy)
{
- if (pPicture->clientClipType != CT_NONE) {
+ if (pPicture->clientClip) {
Bool result;
pixman_region_translate(pPicture->clientClip,