>From 7ae1b186fefa53edf2fcd134eab1549af973334d Mon Sep 17 00:00:00 2001 From: Thomas Hellstrom Date: Tue, 10 Apr 2007 18:49:21 +0200 Subject: [PATCH] Only damage what's part of the original screen pixmap. --- hw/xfree86/modes/xf86Rotate.c | 27 ++++++++++++++++++--------- 1 files changed, 18 insertions(+), 9 deletions(-) diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c index e8fafd0..a495908 100644 --- a/hw/xfree86/modes/xf86Rotate.c +++ b/hw/xfree86/modes/xf86Rotate.c @@ -220,20 +220,29 @@ static void xf86CrtcDamageShadow (xf86CrtcPtr crtc) { ScrnInfoPtr pScrn = crtc->scrn; - BoxRec damage_box; + BoxRec box; RegionRec damage_region; + RegionRec fb_region; ScreenPtr pScreen = pScrn->pScreen; - - damage_box.x1 = crtc->x; - damage_box.x2 = crtc->x + xf86ModeWidth (&crtc->mode, crtc->rotation); - damage_box.y1 = crtc->y; - damage_box.y2 = crtc->y + xf86ModeHeight (&crtc->mode, crtc->rotation); - REGION_INIT (pScreen, &damage_region, &damage_box, 1); - DamageDamageRegion (&(*pScreen->GetScreenPixmap)(pScreen)->drawable, - &damage_region); + DrawablePtr pDraw = &(*pScreen->GetScreenPixmap)(pScreen)->drawable; + + box.x1 = crtc->x; + box.x2 = crtc->x + xf86ModeWidth (&crtc->mode, crtc->rotation); + box.y1 = crtc->y; + box.y2 = crtc->y + xf86ModeHeight (&crtc->mode, crtc->rotation); + REGION_INIT (pScreen, &damage_region, &box, 1); + box.x1 = 0; + box.x2 = pDraw->width; + box.y1 = 0; + box.y2 = pDraw->height; + REGION_INIT (pScreen, &fb_region, &box, 1); + REGION_INTERSECT(pScreen, &damage_region, &damage_region, &fb_region); + REGION_UNINIT (pScreen, &fb_region); + DamageDamageRegion (pDraw, &damage_region); REGION_UNINIT (pScreen, &damage_region); } + static void xf86RotatePrepare (ScreenPtr pScreen) { -- 1.4.1