Commit cf2958a8defbc21fc463ab69309a723cfc47677d

Alex Szpakowski 2014-07-22T16:48:35

Fixed SDL_SetWindowFullscreen on iOS to properly update the view's frame.

diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m
index f25479b..275579a 100644
--- a/src/video/uikit/SDL_uikitwindow.m
+++ b/src/video/uikit/SDL_uikitwindow.m
@@ -240,6 +240,7 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
     SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata;
     SDL_uikitviewcontroller *viewcontroller = windowdata->viewcontroller;
     UIWindow *uiwindow = windowdata->uiwindow;
+    CGRect bounds;
 
     if (fullscreen || (window->flags & SDL_WINDOW_BORDERLESS)) {
         [UIApplication sharedApplication].statusBarHidden = YES;
@@ -253,13 +254,17 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
     }
 #endif
 
-    CGRect bounds;
-    if (fullscreen) {
+    if (fullscreen || (window->flags & SDL_WINDOW_BORDERLESS)) {
         bounds = [displaydata->uiscreen bounds];
     } else {
         bounds = [displaydata->uiscreen applicationFrame];
     }
 
+    /* Update the view's frame to account for the status bar change. */
+    windowdata->view.frame = bounds;
+    [windowdata->view setNeedsLayout];
+    [windowdata->view layoutIfNeeded];
+
     /* Get frame dimensions */
     int width = (int) bounds.size.width;
     int height = (int) bounds.size.height;
@@ -268,21 +273,11 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
        screen to match, so we pick the closest to what we wanted.
      */
     if (window->w >= window->h) {
-        if (width > height) {
-            window->w = width;
-            window->h = height;
-        } else {
-            window->w = height;
-            window->h = width;
-        }
+        window->w = SDL_max(width, height);
+        window->h = SDL_min(width, height);
     } else {
-        if (width > height) {
-            window->w = height;
-            window->h = width;
-        } else {
-            window->w = width;
-            window->h = height;
-        }
+        window->w = SDL_min(width, height);
+        window->h = SDL_max(width, height);
     }
 }