From fff9e01a128ffcc0e1d7731f2a6a331ed8ed238d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 10 Nov 2011 03:48:59 -0500 Subject: [PATCH] Work in progress fixing support for rotated video modes --- src/video/uikit/SDL_uikitvideo.m | 7 ++++ src/video/uikit/SDL_uikitviewcontroller.m | 10 +++--- src/video/uikit/SDL_uikitwindow.m | 44 +++++++++++++++++++++-- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/video/uikit/SDL_uikitvideo.m b/src/video/uikit/SDL_uikitvideo.m index 932379c6a..658aa3dcb 100644 --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -238,6 +238,13 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device) } else { UIScreenMode *uimode = (UIScreenMode *) mode->driverdata; [uiscreen setCurrentMode:uimode]; + + CGSize size = [uimode size]; + if (size.width >= size.height) { + [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO]; + } else { + [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO]; + } } return 0; diff --git a/src/video/uikit/SDL_uikitviewcontroller.m b/src/video/uikit/SDL_uikitviewcontroller.m index 497ef929b..3c1b95580 100644 --- a/src/video/uikit/SDL_uikitviewcontroller.m +++ b/src/video/uikit/SDL_uikitviewcontroller.m @@ -111,15 +111,11 @@ - (void)loadView // Send a resized event when the orientation changes. - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - if ((self->window->flags & SDL_WINDOW_RESIZABLE) == 0) { - return; // don't care, we're just flipping over in this case. - } - const UIInterfaceOrientation toInterfaceOrientation = [self interfaceOrientation]; SDL_WindowData *data = self->window->driverdata; UIWindow *uiwindow = data->uiwindow; UIScreen *uiscreen = [uiwindow screen]; - const int noborder = self->window->flags & SDL_WINDOW_BORDERLESS; + const int noborder = (self->window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)); CGRect frame = noborder ? [uiscreen bounds] : [uiscreen applicationFrame]; const CGSize size = frame.size; int w, h; @@ -142,6 +138,10 @@ - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceO return; } + if (w == frame.size.width && h == frame.size.height) { + return; + } + frame.size.width = w; frame.size.height = h; frame.origin.x = 0; diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m index fb05cf4b3..ad54da2ef 100644 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -63,8 +63,27 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo { window->x = 0; window->y = 0; - window->w = (int)uiwindow.frame.size.width; - window->h = (int)uiwindow.frame.size.height; + + /* We can pick either width or height here and we'll rotate the + screen to match, so we pick the closest to what we wanted. + */ + if (window->w >= window->h) { + if (uiwindow.frame.size.width > uiwindow.frame.size.height) { + window->w = (int)uiwindow.frame.size.width; + window->h = (int)uiwindow.frame.size.height; + } else { + window->w = (int)uiwindow.frame.size.height; + window->h = (int)uiwindow.frame.size.width; + } + } else { + if (uiwindow.frame.size.width > uiwindow.frame.size.height) { + window->w = (int)uiwindow.frame.size.height; + window->h = (int)uiwindow.frame.size.width; + } else { + window->w = (int)uiwindow.frame.size.width; + window->h = (int)uiwindow.frame.size.height; + } + } } window->driverdata = data; @@ -199,6 +218,27 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo [UIApplication sharedApplication].statusBarHidden = NO; uiwindow.frame = [uiscreen applicationFrame]; } + + /* We can pick either width or height here and we'll rotate the + screen to match, so we pick the closest to what we wanted. + */ + if (window->w >= window->h) { + if (uiwindow.frame.size.width > uiwindow.frame.size.height) { + window->w = (int)uiwindow.frame.size.width; + window->h = (int)uiwindow.frame.size.height; + } else { + window->w = (int)uiwindow.frame.size.height; + window->h = (int)uiwindow.frame.size.width; + } + } else { + if (uiwindow.frame.size.width > uiwindow.frame.size.height) { + window->w = (int)uiwindow.frame.size.height; + window->h = (int)uiwindow.frame.size.width; + } else { + window->w = (int)uiwindow.frame.size.width; + window->h = (int)uiwindow.frame.size.height; + } + } } void