Work in progress fixing support for rotated video modes
This commit is contained in:
parent
97ae2354eb
commit
795a68e8a8
3 changed files with 54 additions and 7 deletions
|
@ -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 @@
|
||||||
// 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 @@
|
||||||
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,8 +63,27 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo
|
||||||
{
|
{
|
||||||
window->x = 0;
|
window->x = 0;
|
||||||
window->y = 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;
|
window->driverdata = data;
|
||||||
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue