EXA: Only pass CT_YXBANDED to RECTS_TO_REGION() if that is really true.

Fixes http://bugs.freedesktop.org/show_bug.cgi?id=22642 .
(cherry picked from commit 3575854481)

Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Michel Dänzer 2009-07-10 20:06:02 +02:00 committed by Keith Packard
parent b10c4fe343
commit ec60f4ca65

View File

@ -415,6 +415,7 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
if (rects) {
int i;
int ordering;
for (i = 0; i < nbox; i++) {
rects[i].x = pbox[i].x1 + dx + src_off_x;
@ -423,7 +424,16 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
rects[i].height = pbox[i].y2 - pbox[i].y1;
}
srcregion = RECTS_TO_REGION(pScreen, nbox, rects, CT_YXBANDED);
/* This must match the miRegionCopy() logic for reversing rect order */
if (nbox == 1 || (dx > 0 && dy > 0) ||
(pDstDrawable != pSrcDrawable &&
(pDstDrawable->type != DRAWABLE_WINDOW ||
pSrcDrawable->type != DRAWABLE_WINDOW)))
ordering = CT_YXBANDED;
else
ordering = CT_UNSORTED;
srcregion = RECTS_TO_REGION(pScreen, nbox, rects, ordering);
xfree(rects);
if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,