|
@@ -532,8 +532,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();
|
|
@@ -663,8 +664,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();
|
|
@@ -765,8 +767,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();
|
|
@@ -1146,7 +1149,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);
|
|
@@ -1853,7 +1856,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);
|
|
@@ -1867,11 +1871,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 {
|
|
@@ -2101,7 +2106,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);
|
|
@@ -2182,7 +2187,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);
|