Fixed SDL_SetWindowFullscreen on iOS for the last time, hopefully.

Fixed iOS version checking code.
This commit is contained in:
Alex Szpakowski 2014-07-23 21:55:42 -03:00
parent ef0490a741
commit 029e0193c5
5 changed files with 35 additions and 29 deletions

View File

@ -116,6 +116,7 @@ UIKit_GL_CreateContext(_THIS, SDL_Window * window)
SDL_uikitopenglview *view;
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
UIWindow *uiwindow = data->uiwindow;
CGRect frame = UIKit_ComputeViewFrame(window, uiwindow.screen);
EAGLSharegroup *share_group = nil;
CGFloat scale = 1.0;
@ -124,7 +125,7 @@ UIKit_GL_CreateContext(_THIS, SDL_Window * window)
dimensions of the OpenGL view will match the pixel dimensions of the
screen rather than the dimensions in points.
*/
scale = [uiwindow screen].scale;
scale = uiwindow.screen.scale;
}
if (_this->gl_config.share_with_current_context) {
@ -132,13 +133,6 @@ UIKit_GL_CreateContext(_THIS, SDL_Window * window)
share_group = [view.context sharegroup];
}
CGRect frame;
if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) {
frame = [[uiwindow screen] bounds];
} else {
frame = [[uiwindow screen] applicationFrame];
}
/* construct our view, passing in SDL's OpenGL configuration data */
view = [[SDL_uikitopenglview alloc] initWithFrame: frame
scale: scale
@ -175,7 +169,7 @@ UIKit_GL_CreateContext(_THIS, SDL_Window * window)
}
/* Make this window the current mouse focus for touch input */
if ([uiwindow screen] == [UIScreen mainScreen]) {
if (uiwindow.screen == [UIScreen mainScreen]) {
SDL_SetMouseFocus(window);
SDL_SetKeyboardFocus(window);
}

View File

@ -26,6 +26,7 @@
#include <OpenGLES/EAGLDrawable.h>
#include "SDL_uikitopenglview.h"
#include "SDL_uikitmessagebox.h"
#include "SDL_uikitvideo.h"
@implementation SDL_uikitopenglview {
@ -89,8 +90,7 @@
return nil;
}
BOOL hasiOS7 = [[UIDevice currentDevice].systemVersion compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending;
if (sRGB && hasiOS7) {
if (sRGB && UIKit_IsSystemVersionAtLeast(@"7.0")) {
/* sRGB EAGL drawable support was added in iOS 7 */
colorFormat = kEAGLColorFormatSRGBA8;
} else if (rBits >= 8 && gBits >= 8 && bBits >= 8) {

View File

@ -25,6 +25,8 @@
#include "../SDL_sysvideo.h"
BOOL UIKit_IsSystemVersionAtLeast(NSString *version);
CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen);
#endif /* _SDL_uikitvideo_h */

View File

@ -130,6 +130,26 @@ UIKit_VideoQuit(_THIS)
UIKit_QuitModes(_this);
}
BOOL
UIKit_IsSystemVersionAtLeast(NSString *version)
{
NSString *sysversion = [UIDevice currentDevice].systemVersion;
return [sysversion compare:version options:NSNumericSearch] != NSOrderedAscending;
}
CGRect
UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen)
{
BOOL hasiOS7 = UIKit_IsSystemVersionAtLeast(@"7.0");
if (hasiOS7 || (window->flags & (SDL_WINDOW_BORDERLESS|SDL_WINDOW_FULLSCREEN))) {
/* The view should always show behind the status bar in iOS 7+. */
return screen.bounds;
} else {
return screen.applicationFrame;
}
}
/*
* iOS log support.
*

View File

@ -62,16 +62,11 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo
window->x = 0;
window->y = 0;
CGRect bounds;
if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) {
bounds = [displaydata->uiscreen bounds];
} else {
bounds = [displaydata->uiscreen applicationFrame];
}
CGRect frame = UIKit_ComputeViewFrame(window, displaydata->uiscreen);
/* Get frame dimensions */
int width = (int) bounds.size.width;
int height = (int) bounds.size.height;
int width = (int) frame.size.width;
int height = (int) frame.size.height;
/* Make sure the width/height are oriented correctly */
if (UIKit_IsDisplayLandscape(displaydata->uiscreen) != (width > height)) {
@ -239,7 +234,7 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata;
SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata;
SDL_uikitviewcontroller *viewcontroller = windowdata->viewcontroller;
CGRect bounds;
CGRect frame;
if (fullscreen || (window->flags & SDL_WINDOW_BORDERLESS)) {
[UIApplication sharedApplication].statusBarHidden = YES;
@ -252,20 +247,15 @@ UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display
[viewcontroller setNeedsStatusBarAppearanceUpdate];
}
if (fullscreen || (window->flags & SDL_WINDOW_BORDERLESS)) {
bounds = [displaydata->uiscreen bounds];
} else {
bounds = [displaydata->uiscreen applicationFrame];
}
/* Update the view's frame to account for the status bar change. */
windowdata->view.frame = bounds;
frame = UIKit_ComputeViewFrame(window, displaydata->uiscreen);
windowdata->view.frame = frame;
[windowdata->view setNeedsLayout];
[windowdata->view layoutIfNeeded];
/* Get frame dimensions */
int width = (int) bounds.size.width;
int height = (int) bounds.size.height;
int width = (int) frame.size.width;
int height = (int) 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.