diff options
| author | Max Hilbrunner | 2018-05-21 18:30:11 +0200 |
|---|---|---|
| committer | GitHub | 2018-05-21 18:30:11 +0200 |
| commit | 0980991e6433a3f394a9ae99bec10cb04c8b77e0 (patch) | |
| tree | 1dbf29bc059f7b90d7569e2b8dcfe1c66a43eb7d /platform/windows/os_windows.cpp | |
| parent | 3ac7f08b5585943b2f6e9e4868e366eb44cec368 (diff) | |
| parent | 28d24c4f6689a622f4451b354797038fc00543e9 (diff) | |
| download | godot-0980991e6433a3f394a9ae99bec10cb04c8b77e0.tar.gz godot-0980991e6433a3f394a9ae99bec10cb04c8b77e0.tar.zst godot-0980991e6433a3f394a9ae99bec10cb04c8b77e0.zip | |
Diffstat (limited to 'platform/windows/os_windows.cpp')
| -rw-r--r-- | platform/windows/os_windows.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 652311cab..09e3936a6 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -623,9 +623,26 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_SIZE: { int window_w = LOWORD(lParam); int window_h = HIWORD(lParam); - if (window_w > 0 && window_h > 0) { + if (window_w > 0 && window_h > 0 && !preserve_window_size) { video_mode.width = window_w; video_mode.height = window_h; + } else { + preserve_window_size = false; + int w = video_mode.width; + int h = video_mode.height; + + RECT rect; + GetWindowRect(hWnd, &rect); + + if (video_mode.borderless_window == false) { + RECT crect; + GetClientRect(hWnd, &crect); + + w += (rect.right - rect.left) - (crect.right - crect.left); + h += (rect.bottom - rect.top) - (crect.bottom - crect.top); + } + + MoveWindow(hWnd, rect.left, rect.top, w, h, TRUE); } if (wParam == SIZE_MAXIMIZED) { maximized = true; @@ -1563,6 +1580,15 @@ void OS_Windows::set_window_size(const Size2 p_size) { } MoveWindow(hWnd, rect.left, rect.top, w, h, TRUE); + + // Don't let the mouse leave the window when resizing to a smaller resolution + if (mouse_mode == MOUSE_MODE_CONFINED) { + RECT rect; + GetClientRect(hWnd, &rect); + ClientToScreen(hWnd, (POINT *)&rect.left); + ClientToScreen(hWnd, (POINT *)&rect.right); + ClipCursor(&rect); + } } void OS_Windows::set_window_fullscreen(bool p_enabled) { @@ -1769,6 +1795,7 @@ void OS_Windows::set_borderless_window(bool p_borderless) { video_mode.borderless_window = p_borderless; + preserve_window_size = true; _update_window_style(); } @@ -1787,7 +1814,7 @@ void OS_Windows::_update_window_style(bool repaint) { } } - SetWindowPos(hWnd, video_mode.always_on_top ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + SetWindowPos(hWnd, video_mode.always_on_top ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); if (repaint) { RECT rect; @@ -1998,7 +2025,7 @@ void OS_Windows::set_cursor_shape(CursorShape p_shape) { if (cursor_shape == p_shape) return; - if (mouse_mode != MOUSE_MODE_VISIBLE) { + if (mouse_mode != MOUSE_MODE_VISIBLE && mouse_mode != MOUSE_MODE_CONFINED) { cursor_shape = p_shape; return; } |
