Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Work in progress fixing support for rotated video modes

  • Loading branch information
slouken committed Nov 10, 2011
1 parent 67b764d commit fff9e01a128ffcc0e1d7731f2a6a331ed8ed238d
@@ -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;
@@ -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;
@@ -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

0 comments on commit fff9e01

Please sign in to comment.