Commit 795a68e8 authored by Sam Lantinga's avatar Sam Lantinga

Work in progress fixing support for rotated video modes

parent 97ae2354
...@@ -238,6 +238,13 @@ UIKit_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) ...@@ -238,6 +238,13 @@ UIKit_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
} else { } else {
UIScreenMode *uimode = (UIScreenMode *) mode->driverdata; UIScreenMode *uimode = (UIScreenMode *) mode->driverdata;
[uiscreen setCurrentMode:uimode]; [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; return 0;
......
...@@ -111,15 +111,11 @@ ...@@ -111,15 +111,11 @@
// Send a resized event when the orientation changes. // Send a resized event when the orientation changes.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation - (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]; const UIInterfaceOrientation toInterfaceOrientation = [self interfaceOrientation];
SDL_WindowData *data = self->window->driverdata; SDL_WindowData *data = self->window->driverdata;
UIWindow *uiwindow = data->uiwindow; UIWindow *uiwindow = data->uiwindow;
UIScreen *uiscreen = [uiwindow screen]; 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]; CGRect frame = noborder ? [uiscreen bounds] : [uiscreen applicationFrame];
const CGSize size = frame.size; const CGSize size = frame.size;
int w, h; int w, h;
...@@ -142,6 +138,10 @@ ...@@ -142,6 +138,10 @@
return; return;
} }
if (w == frame.size.width && h == frame.size.height) {
return;
}
frame.size.width = w; frame.size.width = w;
frame.size.height = h; frame.size.height = h;
frame.origin.x = 0; frame.origin.x = 0;
......
...@@ -63,9 +63,28 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo ...@@ -63,9 +63,28 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo
{ {
window->x = 0; window->x = 0;
window->y = 0; window->y = 0;
/* 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->w = (int)uiwindow.frame.size.width;
window->h = (int)uiwindow.frame.size.height; window->h = (int)uiwindow.frame.size.height;
} }
}
}
window->driverdata = data; window->driverdata = data;
...@@ -199,6 +218,27 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display ...@@ -199,6 +218,27 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
[UIApplication sharedApplication].statusBarHidden = NO; [UIApplication sharedApplication].statusBarHidden = NO;
uiwindow.frame = [uiscreen applicationFrame]; 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 void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment