From 0e5df60538bffad3c68effb18f5e0a69af8c7335 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Thu, 24 Jul 2014 22:35:25 -0300 Subject: [PATCH] Fixed SDL_SetWindowFullscreen on iOS causing the window's reported dimensions and supported orientations to go out of sync with what they should be, if the device orientation was different from the screen orientation when the function call was made. --- src/video/uikit/SDL_uikitappdelegate.m | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/video/uikit/SDL_uikitappdelegate.m b/src/video/uikit/SDL_uikitappdelegate.m index b72a52c2b..8be3790ff 100644 --- a/src/video/uikit/SDL_uikitappdelegate.m +++ b/src/video/uikit/SDL_uikitappdelegate.m @@ -242,6 +242,28 @@ SDL_IdleTimerDisabledChanged(void *userdata, const char *name, const char *oldVa SDL_SendAppEvent(SDL_APP_LOWMEMORY); } +- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation +{ + UIInterfaceOrientation orientation = application.statusBarOrientation; + SDL_VideoDevice *_this = SDL_GetVideoDevice(); + + if (_this && _this->num_displays > 0) { + SDL_VideoDisplay *display = &_this->displays[0]; /* Main screen. */ + SDL_DisplayMode *mode = &display->desktop_mode; + + /* The desktop display mode should be kept in sync with the screen + * orientation so that updating a window's fullscreen state to + * SDL_WINDOW_FULLSCREEN_DESKTOP keeps the window dimensions in the + * correct orientation. + */ + if (UIInterfaceOrientationIsLandscape(orientation) != (mode->w > mode->h)) { + int height = mode->w; + mode->w = mode->h; + mode->h = height; + } + } +} + - (void) applicationWillResignActive:(UIApplication*)application { SDL_VideoDevice *_this = SDL_GetVideoDevice();