Skip to content

Commit

Permalink
Fixed SDL_SetWindowFullscreen on iOS for the last time, hopefully.
Browse files Browse the repository at this point in the history
Fixed iOS version checking code.
  • Loading branch information
slime73 committed Jul 24, 2014
1 parent ef0490a commit 029e019
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 29 deletions.
12 changes: 3 additions & 9 deletions src/video/uikit/SDL_uikitopengles.m
Expand Up @@ -116,6 +116,7 @@ void UIKit_GL_SwapWindow(_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;

Expand All @@ -124,21 +125,14 @@ void UIKit_GL_SwapWindow(_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) {
SDL_uikitopenglview *view = (SDL_uikitopenglview *) SDL_GL_GetCurrentContext();
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
Expand Down Expand Up @@ -175,7 +169,7 @@ void UIKit_GL_SwapWindow(_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);
}
Expand Down
4 changes: 2 additions & 2 deletions src/video/uikit/SDL_uikitopenglview.m
Expand Up @@ -26,6 +26,7 @@
#include <OpenGLES/EAGLDrawable.h>
#include "SDL_uikitopenglview.h"
#include "SDL_uikitmessagebox.h"
#include "SDL_uikitvideo.h"


@implementation SDL_uikitopenglview {
Expand Down Expand Up @@ -89,8 +90,7 @@ - (id)initWithFrame:(CGRect)frame
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) {
Expand Down
2 changes: 2 additions & 0 deletions src/video/uikit/SDL_uikitvideo.h
Expand Up @@ -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 */

Expand Down
20 changes: 20 additions & 0 deletions src/video/uikit/SDL_uikitvideo.m
Expand Up @@ -130,6 +130,26 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device)
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.
*
Expand Down
26 changes: 8 additions & 18 deletions src/video/uikit/SDL_uikitwindow.m
Expand Up @@ -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)) {
Expand Down Expand Up @@ -239,7 +234,7 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo
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;
Expand All @@ -252,20 +247,15 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo
[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.
Expand Down

0 comments on commit 029e019

Please sign in to comment.