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.
This commit is contained in:
Jon Turney 2015-08-10 20:16:16 +01:00
parent ebcea16e71
commit 6865fe7147

View File

@ -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);