diff options
Diffstat (limited to 'uxa/uxa-render.c')
-rw-r--r-- | uxa/uxa-render.c | 128 |
1 files changed, 64 insertions, 64 deletions
diff --git a/uxa/uxa-render.c b/uxa/uxa-render.c index abbd3cf0..fbecf00b 100644 --- a/uxa/uxa-render.c +++ b/uxa/uxa-render.c @@ -1430,79 +1430,79 @@ uxa_composite(CARD8 op, if (ret == 1) goto done; } else if (compatible_formats (op, pDst, pSrc) && - !pSrc->repeat && - transform_is_integer_translation(pSrc->transform, &tx, &ty) && - drawable_contains(pSrc->pDrawable, + transform_is_integer_translation(pSrc->transform, &tx, &ty)) { + if (!pSrc->repeat && + drawable_contains(pSrc->pDrawable, xSrc + tx, ySrc + ty, width, height)) { - xDst += pDst->pDrawable->x; - yDst += pDst->pDrawable->y; - xSrc += pSrc->pDrawable->x + tx; - ySrc += pSrc->pDrawable->y + ty; - - if (!miComputeCompositeRegion - (®ion, pSrc, pMask, pDst, xSrc, ySrc, - xMask, yMask, xDst, yDst, width, height)) - goto done; - - uxa_copy_n_to_n(pSrc->pDrawable, - pDst->pDrawable, NULL, - REGION_RECTS(®ion), - REGION_NUM_RECTS(®ion), - xSrc - xDst, ySrc - yDst, FALSE, - FALSE, 0, NULL); - REGION_UNINIT(pDst->pDrawable->pScreen, - ®ion); - goto done; - } else if (pSrc->pDrawable->type == DRAWABLE_PIXMAP && - pSrc->repeatType == RepeatNormal && - transform_is_integer_translation(pSrc->transform, &tx, &ty)) { - DDXPointRec patOrg; - - /* Let's see if the driver can do the repeat - * in one go - */ - if (uxa_screen->info->prepare_composite) { - ret = uxa_try_driver_composite(op, pSrc, - pMask, pDst, - xSrc, ySrc, - xMask, yMask, - xDst, yDst, - width, height); - if (ret == 1) + xDst += pDst->pDrawable->x; + yDst += pDst->pDrawable->y; + xSrc += pSrc->pDrawable->x + tx; + ySrc += pSrc->pDrawable->y + ty; + + if (!miComputeCompositeRegion + (®ion, pSrc, pMask, pDst, xSrc, ySrc, + xMask, yMask, xDst, yDst, width, height)) goto done; - } - /* Now see if we can use - * uxa_fill_region_tiled() - */ - xDst += pDst->pDrawable->x; - yDst += pDst->pDrawable->y; - xSrc += pSrc->pDrawable->x + tx; - ySrc += pSrc->pDrawable->y + ty; - - if (!miComputeCompositeRegion - (®ion, pSrc, pMask, pDst, xSrc, ySrc, - xMask, yMask, xDst, yDst, width, height)) + uxa_copy_n_to_n(pSrc->pDrawable, + pDst->pDrawable, NULL, + REGION_RECTS(®ion), + REGION_NUM_RECTS(®ion), + xSrc - xDst, ySrc - yDst, FALSE, + FALSE, 0, NULL); + REGION_UNINIT(pDst->pDrawable->pScreen, + ®ion); goto done; + } else if (pSrc->repeat && pSrc->repeatType == RepeatNormal && + pSrc->pDrawable->type == DRAWABLE_PIXMAP) { + DDXPointRec patOrg; + + /* Let's see if the driver can do the repeat + * in one go + */ + if (uxa_screen->info->prepare_composite) { + ret = uxa_try_driver_composite(op, pSrc, + pMask, pDst, + xSrc, ySrc, + xMask, yMask, + xDst, yDst, + width, height); + if (ret == 1) + goto done; + } - /* pattern origin is the point in the - * destination drawable - * corresponding to (0,0) in the source */ - patOrg.x = xDst - xSrc; - patOrg.y = yDst - ySrc; + /* Now see if we can use + * uxa_fill_region_tiled() + */ + xDst += pDst->pDrawable->x; + yDst += pDst->pDrawable->y; + xSrc += pSrc->pDrawable->x + tx; + ySrc += pSrc->pDrawable->y + ty; + + if (!miComputeCompositeRegion + (®ion, pSrc, pMask, pDst, xSrc, ySrc, + xMask, yMask, xDst, yDst, width, height)) + goto done; - ret = uxa_fill_region_tiled(pDst->pDrawable, - ®ion, - (PixmapPtr) pSrc-> - pDrawable, &patOrg, - FB_ALLONES, GXcopy); + /* pattern origin is the point in the + * destination drawable + * corresponding to (0,0) in the source */ + patOrg.x = xDst - xSrc; + patOrg.y = yDst - ySrc; - REGION_UNINIT(pDst->pDrawable->pScreen, - ®ion); + ret = uxa_fill_region_tiled(pDst->pDrawable, + ®ion, + (PixmapPtr) pSrc-> + pDrawable, &patOrg, + FB_ALLONES, GXcopy); - if (ret) - goto done; + REGION_UNINIT(pDst->pDrawable->pScreen, + ®ion); + + if (ret) + goto done; + } } } |