diff options
author | Jeremy Huddleston <jeremyhu@apple.com> | 2012-02-10 17:05:52 -0800 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@apple.com> | 2012-02-10 17:05:52 -0800 |
commit | 6526e693d7a51de725231f1b462dd40c9ef14d27 (patch) | |
tree | f7235058865694031b4aa40cb12288dd69af7454 | |
parent | fd9421b35ac98f860f4faf12db0231b2c4026439 (diff) |
Revert "Remove geometry arguments from miSourceValidate()"
This should not have been there, and I'm honestly not sure why
I even had it on my branch...
Sorry for the noise. I'm going to go hide in a corner now.
This reverts commit 4975887a30a2c8f1bbba9127eee17f7099c3ecd1.
-rw-r--r-- | fb/fbpict.c | 4 | ||||
-rw-r--r-- | render/mipict.c | 62 | ||||
-rw-r--r-- | render/mipict.h | 7 |
3 files changed, 54 insertions, 19 deletions
diff --git a/fb/fbpict.c b/fb/fbpict.c index 471f7e325..d438cdc94 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -54,9 +54,9 @@ fbComposite (CARD8 op, int msk_xoff, msk_yoff; int dst_xoff, dst_yoff; - miCompositeSourceValidate (pSrc); + miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height); if (pMask) - miCompositeSourceValidate (pMask); + miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height); src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff); mask = image_from_pict (pMask, FALSE, &msk_xoff, &msk_yoff); diff --git a/render/mipict.c b/render/mipict.c index 2159ebefd..de5eea6be 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -333,8 +333,12 @@ miClipPictureSrc (RegionPtr pRegion, return TRUE; } -static void -SourceValidateOnePicture (PicturePtr pPicture) +void +miCompositeSourceValidate (PicturePtr pPicture, + INT16 x, + INT16 y, + CARD16 width, + CARD16 height) { DrawablePtr pDrawable = pPicture->pDrawable; ScreenPtr pScreen; @@ -343,22 +347,50 @@ SourceValidateOnePicture (PicturePtr pPicture) return; pScreen = pDrawable->pScreen; - + if (pScreen->SourceValidate) { - pScreen->SourceValidate ( - pDrawable, 0, 0, pDrawable->width, pDrawable->height, pPicture->subWindowMode); + if (pPicture->transform) + { + xPoint points[4]; + int i; + int xmin, ymin, xmax, ymax; + +#define VectorSet(i,_x,_y) { points[i].x = _x; points[i].y = _y; } + VectorSet (0, x, y); + VectorSet (1, x + width, y); + VectorSet (2, x, y + height); + VectorSet (3, x + width, y + height); + xmin = ymin = 32767; + xmax = ymax = -32737; + for (i = 0; i < 4; i++) + { + PictVector t; + t.vector[0] = IntToxFixed (points[i].x); + t.vector[1] = IntToxFixed (points[i].y); + t.vector[2] = xFixed1; + if (pixman_transform_point (pPicture->transform, &t)) + { + int tx = xFixedToInt (t.vector[0]); + int ty = xFixedToInt (t.vector[1]); + if (tx < xmin) xmin = tx; + if (tx > xmax) xmax = tx; + if (ty < ymin) ymin = ty; + if (ty > ymax) ymax = ty; + } + } + x = xmin; + y = ymin; + width = xmax - xmin; + height = ymax - ymin; + } + x += pPicture->pDrawable->x; + y += pPicture->pDrawable->y; + (*pScreen->SourceValidate) (pDrawable, x, y, width, height, + pPicture->subWindowMode); } } -void -miCompositeSourceValidate (PicturePtr pPicture) -{ - SourceValidateOnePicture (pPicture); - if (pPicture->alphaMap) - SourceValidateOnePicture (pPicture->alphaMap); -} - /* * returns FALSE if the final region is empty. Indistinguishable from * an allocation failure, but rendering ignores those anyways. @@ -448,9 +480,9 @@ miComputeCompositeRegion (RegionPtr pRegion, } - miCompositeSourceValidate (pSrc); + miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height); if (pMask) - miCompositeSourceValidate (pMask); + miCompositeSourceValidate (pMask, xMask, yMask, width, height); return TRUE; } diff --git a/render/mipict.h b/render/mipict.h index 4f5b3baed..eb6b6645d 100644 --- a/render/mipict.h +++ b/render/mipict.h @@ -81,8 +81,11 @@ miChangePictureFilter (PicturePtr pPicture, int nparams); extern _X_EXPORT void -miCompositeSourceValidate (PicturePtr pPicture); - +miCompositeSourceValidate (PicturePtr pPicture, + INT16 x, + INT16 y, + CARD16 width, + CARD16 height); extern _X_EXPORT Bool miComputeCompositeRegion (RegionPtr pRegion, PicturePtr pSrc, |