diff options
author | Jon TURNEY <jon.turney@dronecode.org.uk> | 2015-08-10 20:16:16 +0100 |
---|---|---|
committer | Jon TURNEY <jon.turney@dronecode.org.uk> | 2015-08-11 16:10:06 +0100 |
commit | 53ac43f75c4a6f26e9045b7e8ff78203ed807446 (patch) | |
tree | 7b6d364fbfaa6e81c6c8b1ab18bbb1c26e12a086 | |
parent | 4d4d47634742a914326e468276517563d6998579 (diff) |
Avoid artefacts when resizing a windowengine-enhancements
Fill the area outside the current window size with black, rather than leaking
frambuffer contents or leaving it undrawn.
-rw-r--r-- | hw/xwin/winshadgdi.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/hw/xwin/winshadgdi.c b/hw/xwin/winshadgdi.c index 13db1dc52..5f06a448e 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); |