From 9ea472e810cd7bec4796d3005f3582955eb7276d Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Mon, 24 Jul 2017 15:59:05 +0300 Subject: [PATCH] Fix is_window_fullscreen() and set_window_fullscreen() behaviour after window has entered/left full-screen mode via green zoom button. Fix get/set_current_screen & set_window_maximized. --- platform/osx/os_osx.h | 1 - platform/osx/os_osx.mm | 28 ++++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index a7488aab272..ceefdb549db 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -111,7 +111,6 @@ public: Vector screen_dpi; Size2 window_size; - int current_screen; Rect2 restore_rect; float _mouse_scale(float p_scale) { diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 6388ef2c88d..a6b61981b33 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -182,6 +182,16 @@ static bool mouse_down_control = false; return NO; } +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 +- (void)windowDidEnterFullScreen:(NSNotification *)notification { + OS_OSX::singleton->zoomed = true; +} + +- (void)windowDidExitFullScreen:(NSNotification *)notification { + OS_OSX::singleton->zoomed = false; +} +#endif // MAC_OS_X_VERSION_MAX_ALLOWED + - (void)windowDidResize:(NSNotification *)notification { [OS_OSX::singleton->context update]; @@ -1300,13 +1310,21 @@ int OS_OSX::get_screen_count() const { }; int OS_OSX::get_current_screen() const { + Vector2 wpos = get_window_position(); - return current_screen; + int count = get_screen_count(); + for (int i = 0; i < count; i++) { + Point2 pos = get_screen_position(i); + Size2 size = get_screen_size(i); + if ((wpos.x >= pos.x && wpos.x < pos.x + size.width) && (wpos.y >= pos.y && wpos.y < pos.y + size.height)) + return i; + } + return 0; }; void OS_OSX::set_current_screen(int p_screen) { - - current_screen = p_screen; + Vector2 wpos = get_window_position() - get_screen_position(get_current_screen()); + set_window_position(wpos + get_screen_position(p_screen)); }; Point2 OS_OSX::get_screen_position(int p_screen) const { @@ -1419,7 +1437,7 @@ void OS_OSX::set_window_maximized(bool p_enabled) { if (p_enabled) { restore_rect = Rect2(get_window_position(), get_window_size()); - [window_object setFrame:[[[NSScreen screens] objectAtIndex:current_screen] visibleFrame] display:YES]; + [window_object setFrame:[[[NSScreen screens] objectAtIndex:get_current_screen()] visibleFrame] display:YES]; } else { set_window_size(restore_rect.size); set_window_position(restore_rect.pos); @@ -1713,8 +1731,6 @@ OS_OSX::OS_OSX() { last_id = 1; cursor_shape = CURSOR_ARROW; - current_screen = 0; - maximized = false; minimized = false; window_size = Vector2(1024, 600);