From 1a3a27fa93f11543b502f4f2c97d2e1bee845113 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 18 Jul 2013 22:00:24 +0100 Subject: [PATCH] expose --- src/sna/sna_accel.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c index 6d3b9af..4a88c89 100644 --- a/src/sna/sna_accel.c +++ b/src/sna/sna_accel.c @@ -5476,7 +5476,7 @@ sna_do_copy(DrawablePtr src, DrawablePtr dst, GCPtr gc, { RegionPtr clip; RegionRec region; - bool expose; + int sw, sh; DBG(("%s: src=(%d, %d), dst=(%d, %d), size=(%dx%d)\n", __FUNCTION__, sx, sy, dx, dy, width, height)); @@ -5518,6 +5518,9 @@ sna_do_copy(DrawablePtr src, DrawablePtr dst, GCPtr gc, region.extents.y1 = clamp(region.extents.y1, sy - dy); region.extents.y2 = clamp(region.extents.y2, sy - dy); + sw = region.extents.x2 - region.extents.x1; + sh = region.extents.y2 - region.extents.y1; + /* Compute source clip region */ clip = NULL; if (src == dst && gc->clientClipType == CT_NONE) { @@ -5552,29 +5555,18 @@ sna_do_copy(DrawablePtr src, DrawablePtr dst, GCPtr gc, } if (clip == NULL) { DBG(("%s: fast source clip against extents\n", __FUNCTION__)); - expose = true; - if (region.extents.x1 < src->x) { + if (region.extents.x1 < src->x) region.extents.x1 = src->x; - expose = false; - } - if (region.extents.y1 < src->y) { + if (region.extents.y1 < src->y) region.extents.y1 = src->y; - expose = false; - } - if (region.extents.x2 > src->x + (int) src->width) { + if (region.extents.x2 > src->x + (int) src->width) region.extents.x2 = src->x + (int) src->width; - expose = false; - } - if (region.extents.y2 > src->y + (int) src->height) { + if (region.extents.y2 > src->y + (int) src->height) region.extents.y2 = src->y + (int) src->height; - expose = false; - } if (box_empty(®ion.extents)) return NULL; - } else { - expose = false; + } else RegionIntersect(®ion, ®ion, clip); - } DBG(("%s: src extents (%d, %d), (%d, %d) x %ld\n", __FUNCTION__, region.extents.x1, region.extents.y1, region.extents.x2, region.extents.y2, @@ -5593,7 +5585,9 @@ sna_do_copy(DrawablePtr src, DrawablePtr dst, GCPtr gc, /* Pixmap sources generate a NoExposed (we return NULL to do this) */ clip = NULL; - if (!expose && gc->fExpose) + if (gc->fExpose && + (region.extents.x2 - region.extents.x1 < sw || + (region.extents.y2 - region.extents.y1 < sh))) clip = miHandleExposures(src, dst, gc, sx - src->x, sy - src->y, width, height, -- 1.8.3.2