Native window decorations (Windows 10/11 only): fixed rendering artifacts on HiDPI screens when dragging window partly offscreen and back into screen bounds (issue #477)

This commit is contained in:
Karl Tauber
2022-02-18 22:24:36 +01:00
parent 4174b065f3
commit 2e222bcdea
4 changed files with 54 additions and 0 deletions

View File

@@ -88,6 +88,8 @@ FlatWndProc::FlatWndProc() {
defaultWndProc = NULL;
wmSizeWParam = -1;
background = NULL;
isMovingOrSizing = false;
isMoving = false;
}
HWND FlatWndProc::install( JNIEnv *env, jobject obj, jobject window ) {
@@ -250,7 +252,27 @@ LRESULT CALLBACK FlatWndProc::WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, L
wParam = wmSizeWParam;
break;
case WM_ENTERSIZEMOVE:
isMovingOrSizing = true;
break;
case WM_EXITSIZEMOVE:
isMovingOrSizing = isMoving = false;
break;
case WM_MOVE:
case WM_MOVING:
if( isMovingOrSizing )
isMoving = true;
break;
case WM_ERASEBKGND:
// do not erase background while the user is moving the window,
// otherwise there may be rendering artifacts on HiDPI screens with Java 9+
// when dragging the window partly offscreen and back into the screen bounds
if( isMoving )
return FALSE;
return WmEraseBkgnd( hwnd, uMsg, wParam, lParam );
case WM_DESTROY:

View File

@@ -43,6 +43,8 @@ private:
WNDPROC defaultWndProc;
int wmSizeWParam;
HBRUSH background;
bool isMovingOrSizing;
bool isMoving;
FlatWndProc();
static void initIDs( JNIEnv *env, jobject obj );