From 6865fe71477206d989f982235fc32be4ff164ccd Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Mon, 10 Aug 2015 20:16:16 +0100 Subject: [PATCH] hw/xwin: Avoid artefacts when resizing a window Fill the area outside the current window size with black, rather than leaking framebuffer contents or leaving it undrawn. --- hw/xwin/winshadgdi.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/hw/xwin/winshadgdi.c b/hw/xwin/winshadgdi.c index 0235d1b2c..24fff71f3 100644 --- a/hw/xwin/winshadgdi.c +++ b/hw/xwin/winshadgdi.c @@ -916,6 +916,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);