diff options
author | Sam Lantinga <slouken@libsdl.org> | 2011-11-10 03:48:59 -0500 |
---|---|---|
committer | Sam Lantinga <slouken@libsdl.org> | 2011-11-10 03:48:59 -0500 |
commit | 9c7fcc163aac74dae8f2f5169361ec2bfd4a405b (patch) | |
tree | 74b9b69eaf705e4596e9e6a6d2a598ed0d4bc046 /src | |
parent | 31ed412835f940311454b5b3377edae31297f580 (diff) |
Work in progress fixing support for rotated video modes
Diffstat (limited to 'src')
-rw-r--r-- | src/video/uikit/SDL_uikitvideo.m | 7 | ||||
-rw-r--r-- | src/video/uikit/SDL_uikitviewcontroller.m | 10 | ||||
-rw-r--r-- | 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 932379c6..658aa3dc 100644 --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -238,6 +238,13 @@ UIKit_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) } 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 497ef929..3c1b9558 100644 --- a/src/video/uikit/SDL_uikitviewcontroller.m +++ b/src/video/uikit/SDL_uikitviewcontroller.m @@ -111,15 +111,11 @@ // 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 @@ 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 fb05cf4b..ad54da2e 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 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display [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 |