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 dx,
int dy) 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, Bool result;
dx - pPicture->clipOrigin.x,
dy - pPicture->clipOrigin.y); pixman_region_translate ( pPicture->clientClip,
if (!REGION_INTERSECT (pScreen, pRegion, pRegion, pPicture->clipOrigin.x - dx,
(RegionPtr) pPicture->pCompositeClip)) // clientClip)) 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 FALSE;
pixman_region_translate ( pRegion,
- (dx - pPicture->clipOrigin.x),
- (dy - pPicture->clipOrigin.y));
} }
return TRUE; return TRUE;
}
else
{
return miClipPictureReg (pRegion,
pPicture->pCompositeClip,
dx,
dy);
}
} }
void void