summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSam Lantinga <slouken@libsdl.org>2011-11-10 03:48:59 -0500
committerSam Lantinga <slouken@libsdl.org>2011-11-10 03:48:59 -0500
commit9c7fcc163aac74dae8f2f5169361ec2bfd4a405b (patch)
tree74b9b69eaf705e4596e9e6a6d2a598ed0d4bc046 /src
parent31ed412835f940311454b5b3377edae31297f580 (diff)
Work in progress fixing support for rotated video modes
Diffstat (limited to 'src')
-rw-r--r--src/video/uikit/SDL_uikitvideo.m7
-rw-r--r--src/video/uikit/SDL_uikitviewcontroller.m10
-rw-r--r--src/video/uikit/SDL_uikitwindow.m44
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