Fixed SDL_SetWindowFullscreen on iOS to properly update the view's frame.

main
Alex Szpakowski 2014-07-22 16:48:35 -03:00
parent e02e34521a
commit cf2958a8de
1 changed files with 11 additions and 16 deletions

View File

@ -240,6 +240,7 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata; SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata;
SDL_uikitviewcontroller *viewcontroller = windowdata->viewcontroller; SDL_uikitviewcontroller *viewcontroller = windowdata->viewcontroller;
UIWindow *uiwindow = windowdata->uiwindow; UIWindow *uiwindow = windowdata->uiwindow;
CGRect bounds;
if (fullscreen || (window->flags & SDL_WINDOW_BORDERLESS)) { if (fullscreen || (window->flags & SDL_WINDOW_BORDERLESS)) {
[UIApplication sharedApplication].statusBarHidden = YES; [UIApplication sharedApplication].statusBarHidden = YES;
@ -253,13 +254,17 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
} }
#endif #endif
CGRect bounds; if (fullscreen || (window->flags & SDL_WINDOW_BORDERLESS)) {
if (fullscreen) {
bounds = [displaydata->uiscreen bounds]; bounds = [displaydata->uiscreen bounds];
} else { } else {
bounds = [displaydata->uiscreen applicationFrame]; bounds = [displaydata->uiscreen applicationFrame];
} }
/* Update the view's frame to account for the status bar change. */
windowdata->view.frame = bounds;
[windowdata->view setNeedsLayout];
[windowdata->view layoutIfNeeded];
/* Get frame dimensions */ /* Get frame dimensions */
int width = (int) bounds.size.width; int width = (int) bounds.size.width;
int height = (int) bounds.size.height; int height = (int) bounds.size.height;
@ -268,21 +273,11 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
screen to match, so we pick the closest to what we wanted. screen to match, so we pick the closest to what we wanted.
*/ */
if (window->w >= window->h) { if (window->w >= window->h) {
if (width > height) { window->w = SDL_max(width, height);
window->w = width; window->h = SDL_min(width, height);
window->h = height;
} else { } else {
window->w = height; window->w = SDL_min(width, height);
window->h = width; window->h = SDL_max(width, height);
}
} else {
if (width > height) {
window->w = height;
window->h = width;
} else {
window->w = width;
window->h = height;
}
} }
} }