Explorar el Código

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.
bruvzg hace 8 años
padre
commit
9ea472e810
Se han modificado 2 ficheros con 23 adiciones y 8 borrados
  1. 0 1
      platform/osx/os_osx.h
  2. 23 7
      platform/osx/os_osx.mm

+ 0 - 1
platform/osx/os_osx.h

@@ -111,7 +111,6 @@ public:
 	Vector<int> screen_dpi;
 
 	Size2 window_size;
-	int current_screen;
 	Rect2 restore_rect;
 
 	float _mouse_scale(float p_scale) {

+ 23 - 7
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 {
-
-	return current_screen;
+	Vector2 wpos = get_window_position();
+
+	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);