Fix miComputeCompositeRegion() to follow new clip rules.

Ignore the hierarchy clip, and always apply any client clip after
transformation and repeating.
This commit is contained in:
Søren Sandmann Pedersen 2009-06-13 10:55:04 -04:00
parent e9aa61e9f0
commit 128cd03eec

View File

@ -313,32 +313,24 @@ miClipPictureSrc (RegionPtr pRegion,
int dx,
int dy)
{
/* XXX what to do with clipping from transformed pictures? */
if (pPicture->transform || !pPicture->pDrawable)
return TRUE;
if (pPicture->repeat)
if (pPicture->clientClipType != CT_NONE)
{
if (pPicture->clientClipType != CT_NONE)
{
pixman_region_translate ( pRegion,
dx - pPicture->clipOrigin.x,
dy - pPicture->clipOrigin.y);
if (!REGION_INTERSECT (pScreen, pRegion, pRegion,
(RegionPtr) pPicture->pCompositeClip)) // clientClip))
return FALSE;
pixman_region_translate ( pRegion,
- (dx - pPicture->clipOrigin.x),
- (dy - pPicture->clipOrigin.y));
}
return TRUE;
}
else
{
return miClipPictureReg (pRegion,
pPicture->pCompositeClip,
dx,
dy);
Bool result;
pixman_region_translate ( pPicture->clientClip,
pPicture->clipOrigin.x - dx,
pPicture->clipOrigin.y - dy);
result = REGION_INTERSECT (pScreen, pRegion, pRegion, pPicture->clientClip);
pixman_region_translate ( pPicture->clientClip,
- (pPicture->clipOrigin.x - dx),
- (pPicture->clipOrigin.y - dy));
if (!result)
return FALSE;
}
return TRUE;
}
void