summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2015-08-10 20:16:16 +0100
committerJon Turney <jon.turney@dronecode.org.uk>2015-11-11 11:57:14 +0000
commit60da794433b4f820f2fc55fc7d7197ece160f9fc (patch)
treef3a58477039a481443606eea659272a51572f8bd /hw
parent67ed81555eb4bf3792dba525d8c01a9b79d660aa (diff)
Avoid artefacts when resizing a window
Fill the area outside the current window size with black, rather than leaking frambuffer contents or leaving it undrawn.
Diffstat (limited to 'hw')
-rw-r--r--hw/xwin/winshadgdi.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/hw/xwin/winshadgdi.c b/hw/xwin/winshadgdi.c
index 59c9b52b3..797152f13 100644
--- a/hw/xwin/winshadgdi.c
+++ b/hw/xwin/winshadgdi.c
@@ -929,6 +929,30 @@ winBltExposedWindowRegionShadowGDI(ScreenPtr pScreen, WindowPtr pWin)
}
}
+ /* If part of the invalidated region is outside the window (which can happen
+ if the native window is being re-sized), fill that area with black */
+ if (ps.rcPaint.right > ps.rcPaint.left + pWin->drawable.width) {
+ BitBlt(hdcUpdate,
+ ps.rcPaint.left + pWin->drawable.width,
+ ps.rcPaint.top,
+ ps.rcPaint.right - (ps.rcPaint.left + pWin->drawable.width),
+ ps.rcPaint.bottom - ps.rcPaint.top,
+ NULL,
+ 0, 0,
+ BLACKNESS);
+ }
+
+ if (ps.rcPaint.bottom > ps.rcPaint.top + pWin->drawable.height) {
+ BitBlt(hdcUpdate,
+ ps.rcPaint.left,
+ ps.rcPaint.top + pWin->drawable.height,
+ ps.rcPaint.right - ps.rcPaint.left,
+ ps.rcPaint.bottom - (ps.rcPaint.top + pWin->drawable.height),
+ NULL,
+ 0, 0,
+ BLACKNESS);
+ }
+
/* EndPaint frees the DC */
EndPaint(hWnd, &ps);