|
@@ -497,8 +497,9 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
ScreenToClient(hWnd, &coords);
|
|
|
|
|
|
// Don't calculate relative mouse movement if we don't have focus in CAPTURED mode.
|
|
|
- if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED)
|
|
|
+ if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED) {
|
|
|
break;
|
|
|
+ }
|
|
|
|
|
|
Ref<InputEventMouseMotion> mm;
|
|
|
mm.instance();
|
|
@@ -628,8 +629,9 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
}
|
|
|
|
|
|
// Don't calculate relative mouse movement if we don't have focus in CAPTURED mode.
|
|
|
- if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED)
|
|
|
+ if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED) {
|
|
|
break;
|
|
|
+ }
|
|
|
|
|
|
Ref<InputEventMouseMotion> mm;
|
|
|
mm.instance();
|
|
@@ -730,8 +732,9 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
}
|
|
|
|
|
|
// Don't calculate relative mouse movement if we don't have focus in CAPTURED mode.
|
|
|
- if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED)
|
|
|
+ if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED) {
|
|
|
break;
|
|
|
+ }
|
|
|
|
|
|
Ref<InputEventMouseMotion> mm;
|
|
|
mm.instance();
|
|
@@ -1111,7 +1114,7 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
} break;
|
|
|
case WM_SETCURSOR: {
|
|
|
if (LOWORD(lParam) == HTCLIENT) {
|
|
|
- if (window_has_focus && (mouse_mode == MOUSE_MODE_HIDDEN || mouse_mode == MOUSE_MODE_CAPTURED)) {
|
|
|
+ if (window_has_focus && (mouse_mode == MOUSE_MODE_HIDDEN || mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED_HIDDEN)) {
|
|
|
//Hide the cursor
|
|
|
if (hCursor == NULL) {
|
|
|
hCursor = SetCursor(NULL);
|
|
@@ -1810,7 +1813,8 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) {
|
|
|
}
|
|
|
|
|
|
void OS_Windows::_set_mouse_mode_impl(MouseMode p_mode) {
|
|
|
- if (p_mode == MOUSE_MODE_CAPTURED || p_mode == MOUSE_MODE_CONFINED) {
|
|
|
+ if (p_mode == MOUSE_MODE_CAPTURED || p_mode == MOUSE_MODE_CONFINED || p_mode == MOUSE_MODE_CONFINED_HIDDEN) {
|
|
|
+ // Mouse is grabbed (captured or confined).
|
|
|
RECT clipRect;
|
|
|
GetClientRect(hWnd, &clipRect);
|
|
|
ClientToScreen(hWnd, (POINT *)&clipRect.left);
|
|
@@ -1824,11 +1828,12 @@ void OS_Windows::_set_mouse_mode_impl(MouseMode p_mode) {
|
|
|
SetCapture(hWnd);
|
|
|
}
|
|
|
} else {
|
|
|
+ // Mouse is free to move around (not captured or confined).
|
|
|
ReleaseCapture();
|
|
|
ClipCursor(NULL);
|
|
|
}
|
|
|
|
|
|
- if (p_mode == MOUSE_MODE_CAPTURED || p_mode == MOUSE_MODE_HIDDEN) {
|
|
|
+ if (p_mode == MOUSE_MODE_CAPTURED || p_mode == MOUSE_MODE_HIDDEN || p_mode == MOUSE_MODE_CONFINED_HIDDEN) {
|
|
|
if (hCursor == NULL) {
|
|
|
hCursor = SetCursor(NULL);
|
|
|
} else {
|
|
@@ -2058,7 +2063,7 @@ void OS_Windows::set_window_position(const Point2 &p_position) {
|
|
|
MoveWindow(hWnd, p_position.x, p_position.y, r.right - r.left, r.bottom - r.top, TRUE);
|
|
|
|
|
|
// Don't let the mouse leave the window when moved
|
|
|
- if (mouse_mode == MOUSE_MODE_CONFINED) {
|
|
|
+ if (mouse_mode == MOUSE_MODE_CONFINED || mouse_mode == MOUSE_MODE_CONFINED_HIDDEN) {
|
|
|
RECT rect;
|
|
|
GetClientRect(hWnd, &rect);
|
|
|
ClientToScreen(hWnd, (POINT *)&rect.left);
|
|
@@ -2139,7 +2144,7 @@ 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) {
|
|
|
+ if (mouse_mode == MOUSE_MODE_CONFINED || mouse_mode == MOUSE_MODE_CONFINED_HIDDEN) {
|
|
|
RECT crect;
|
|
|
GetClientRect(hWnd, &crect);
|
|
|
ClientToScreen(hWnd, (POINT *)&crect.left);
|