|
@@ -1264,10 +1264,14 @@ Error DisplayServerMacOS::dialog_input_text(String p_title, String p_description
|
|
|
return OK;
|
|
|
}
|
|
|
|
|
|
-void DisplayServerMacOS::mouse_set_mode(MouseMode p_mode) {
|
|
|
+void DisplayServerMacOS::_mouse_update_mode() {
|
|
|
_THREAD_SAFE_METHOD_
|
|
|
|
|
|
- if (p_mode == mouse_mode) {
|
|
|
+ MouseMode wanted_mouse_mode = mouse_mode_override_enabled
|
|
|
+ ? mouse_mode_override
|
|
|
+ : mouse_mode_base;
|
|
|
+
|
|
|
+ if (wanted_mouse_mode == mouse_mode) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -1277,7 +1281,7 @@ void DisplayServerMacOS::mouse_set_mode(MouseMode p_mode) {
|
|
|
}
|
|
|
WindowData &wd = windows[window_id];
|
|
|
|
|
|
- bool show_cursor = (p_mode == MOUSE_MODE_VISIBLE || p_mode == MOUSE_MODE_CONFINED);
|
|
|
+ bool show_cursor = (wanted_mouse_mode == MOUSE_MODE_VISIBLE || wanted_mouse_mode == MOUSE_MODE_CONFINED);
|
|
|
bool previously_shown = (mouse_mode == MOUSE_MODE_VISIBLE || mouse_mode == MOUSE_MODE_CONFINED);
|
|
|
|
|
|
if (show_cursor && !previously_shown) {
|
|
@@ -1285,7 +1289,7 @@ void DisplayServerMacOS::mouse_set_mode(MouseMode p_mode) {
|
|
|
mouse_enter_window(window_id);
|
|
|
}
|
|
|
|
|
|
- if (p_mode == MOUSE_MODE_CAPTURED) {
|
|
|
+ if (wanted_mouse_mode == MOUSE_MODE_CAPTURED) {
|
|
|
// Apple Docs state that the display parameter is not used.
|
|
|
// "This parameter is not used. By default, you may pass kCGDirectMainDisplay."
|
|
|
// https://developer.apple.com/library/mac/documentation/graphicsimaging/reference/Quartz_Services_Ref/Reference/reference.html
|
|
@@ -1299,17 +1303,17 @@ void DisplayServerMacOS::mouse_set_mode(MouseMode p_mode) {
|
|
|
NSPoint pointOnScreen = [[wd.window_view window] convertRectToScreen:pointInWindowRect].origin;
|
|
|
CGPoint lMouseWarpPos = { pointOnScreen.x, CGDisplayBounds(CGMainDisplayID()).size.height - pointOnScreen.y };
|
|
|
CGWarpMouseCursorPosition(lMouseWarpPos);
|
|
|
- } else if (p_mode == MOUSE_MODE_HIDDEN) {
|
|
|
+ } else if (wanted_mouse_mode == MOUSE_MODE_HIDDEN) {
|
|
|
if (previously_shown) {
|
|
|
CGDisplayHideCursor(kCGDirectMainDisplay);
|
|
|
}
|
|
|
[wd.window_object setMovable:YES];
|
|
|
CGAssociateMouseAndMouseCursorPosition(true);
|
|
|
- } else if (p_mode == MOUSE_MODE_CONFINED) {
|
|
|
+ } else if (wanted_mouse_mode == MOUSE_MODE_CONFINED) {
|
|
|
CGDisplayShowCursor(kCGDirectMainDisplay);
|
|
|
[wd.window_object setMovable:NO];
|
|
|
CGAssociateMouseAndMouseCursorPosition(false);
|
|
|
- } else if (p_mode == MOUSE_MODE_CONFINED_HIDDEN) {
|
|
|
+ } else if (wanted_mouse_mode == MOUSE_MODE_CONFINED_HIDDEN) {
|
|
|
if (previously_shown) {
|
|
|
CGDisplayHideCursor(kCGDirectMainDisplay);
|
|
|
}
|
|
@@ -1324,17 +1328,51 @@ void DisplayServerMacOS::mouse_set_mode(MouseMode p_mode) {
|
|
|
last_warp = [[NSProcessInfo processInfo] systemUptime];
|
|
|
ignore_warp = true;
|
|
|
warp_events.clear();
|
|
|
- mouse_mode = p_mode;
|
|
|
+ mouse_mode = wanted_mouse_mode;
|
|
|
|
|
|
if (show_cursor) {
|
|
|
cursor_update_shape();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void DisplayServerMacOS::mouse_set_mode(MouseMode p_mode) {
|
|
|
+ ERR_FAIL_INDEX(p_mode, MouseMode::MOUSE_MODE_MAX);
|
|
|
+ if (p_mode == mouse_mode_base) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ mouse_mode_base = p_mode;
|
|
|
+ _mouse_update_mode();
|
|
|
+}
|
|
|
+
|
|
|
DisplayServer::MouseMode DisplayServerMacOS::mouse_get_mode() const {
|
|
|
return mouse_mode;
|
|
|
}
|
|
|
|
|
|
+void DisplayServerMacOS::mouse_set_mode_override(MouseMode p_mode) {
|
|
|
+ ERR_FAIL_INDEX(p_mode, MouseMode::MOUSE_MODE_MAX);
|
|
|
+ if (p_mode == mouse_mode_override) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ mouse_mode_override = p_mode;
|
|
|
+ _mouse_update_mode();
|
|
|
+}
|
|
|
+
|
|
|
+DisplayServer::MouseMode DisplayServerMacOS::mouse_get_mode_override() const {
|
|
|
+ return mouse_mode_override;
|
|
|
+}
|
|
|
+
|
|
|
+void DisplayServerMacOS::mouse_set_mode_override_enabled(bool p_override_enabled) {
|
|
|
+ if (p_override_enabled == mouse_mode_override_enabled) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ mouse_mode_override_enabled = p_override_enabled;
|
|
|
+ _mouse_update_mode();
|
|
|
+}
|
|
|
+
|
|
|
+bool DisplayServerMacOS::mouse_is_mode_override_enabled() const {
|
|
|
+ return mouse_mode_override_enabled;
|
|
|
+}
|
|
|
+
|
|
|
bool DisplayServerMacOS::update_mouse_wrap(WindowData &p_wd, NSPoint &r_delta, NSPoint &r_mpos, NSTimeInterval p_timestamp) {
|
|
|
_THREAD_SAFE_METHOD_
|
|
|
|