Skip to content

Commit

Permalink
Merged.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Apr 13, 2015
2 parents cf6b975 + a27fad1 commit c6538cb
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 27 deletions.
59 changes: 44 additions & 15 deletions src/video/uikit/SDL_uikitappdelegate.m
Expand Up @@ -115,9 +115,7 @@ int main(int argc, char **argv)
return image;
}

@implementation SDLLaunchScreenController {
UIInterfaceOrientationMask supportedOrientations;
}
@implementation SDLLaunchScreenController

- (instancetype)init
{
Expand All @@ -127,18 +125,16 @@ - (instancetype)init

NSBundle *bundle = [NSBundle mainBundle];
NSString *screenname = [bundle objectForInfoDictionaryKey:@"UILaunchStoryboardName"];

/* Normally we don't want to rotate from the initial orientation. */
supportedOrientations = (1 << [UIApplication sharedApplication].statusBarOrientation);
BOOL atleastiOS8 = UIKit_IsSystemVersionAtLeast(8.0);

/* Launch screens were added in iOS 8. Otherwise we use launch images. */
if (screenname && UIKit_IsSystemVersionAtLeast(8.0)) {
if (screenname && atleastiOS8) {
@try {
self.view = [bundle loadNibNamed:screenname owner:self options:nil][0];
}
@catch (NSException *exception) {
/* iOS displays a blank screen rather than falling back to an image,
* if a launch screen name is specified but it fails to load. */
/* If a launch screen name is specified but it fails to load, iOS
* displays a blank screen rather than falling back to an image. */
return nil;
}
}
Expand Down Expand Up @@ -216,13 +212,37 @@ - (instancetype)init
}

if (image) {
if (image.size.width > image.size.height) {
supportedOrientations = UIInterfaceOrientationMaskLandscape;
} else {
supportedOrientations = UIInterfaceOrientationMaskPortrait;
UIImageView *view = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIImageOrientation imageorient = UIImageOrientationUp;

/* Bugs observed / workaround tested in iOS 8.3, 7.1, and 6.1. */
if (UIInterfaceOrientationIsLandscape(curorient)) {
if (atleastiOS8 && image.size.width < image.size.height) {
/* On iOS 8, portrait launch images displayed in forced-
* landscape mode (e.g. a standard Default.png on an iPhone
* when Info.plist only supports landscape orientations) need
* to be rotated to display in the expected orientation. */
if (curorient == UIInterfaceOrientationLandscapeLeft) {
imageorient = UIImageOrientationRight;
} else if (curorient == UIInterfaceOrientationLandscapeRight) {
imageorient = UIImageOrientationLeft;
}
} else if (!atleastiOS8 && image.size.width > image.size.height) {
/* On iOS 7 and below, landscape launch images displayed in
* landscape mode (e.g. landscape iPad launch images) need
* to be rotated to display in the expected orientation. */
if (curorient == UIInterfaceOrientationLandscapeLeft) {
imageorient = UIImageOrientationLeft;
} else if (curorient == UIInterfaceOrientationLandscapeRight) {
imageorient = UIImageOrientationRight;
}
}
}

self.view = [[UIImageView alloc] initWithImage:image];
/* Create the properly oriented image. */
view.image = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:imageorient];

self.view = view;
}
}

Expand All @@ -234,9 +254,18 @@ - (void)loadView
/* Do nothing. */
}

- (BOOL)shouldAutorotate
{
/* If YES, the launch image will be incorrectly rotated in some cases. */
return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
return supportedOrientations;
/* We keep the supported orientations unrestricted to avoid the case where
* there are no common orientations between the ones set in Info.plist and
* the ones set here (it will cause an exception in that case.) */
return UIInterfaceOrientationMaskAll;
}

@end
Expand Down
21 changes: 9 additions & 12 deletions src/video/uikit/SDL_uikitview.m
Expand Up @@ -77,11 +77,8 @@ - (void)setSDLWindow:(SDL_Window *)window

data.viewcontroller.view = view;

if (data.uiwindow.rootViewController != data.viewcontroller) {
data.uiwindow.rootViewController = data.viewcontroller;
} else if (view) {
[data.uiwindow addSubview:view];
}
data.uiwindow.rootViewController = nil;
data.uiwindow.rootViewController = data.viewcontroller;

[data.uiwindow layoutIfNeeded];
}
Expand All @@ -96,13 +93,13 @@ - (void)setSDLWindow:(SDL_Window *)window
[data.viewcontroller.view removeFromSuperview];
data.viewcontroller.view = self;

if (data.uiwindow.rootViewController != data.viewcontroller) {
/* The root view controller handles rotation and the status bar.
* Assigning it also adds the controller's view to the window. */
data.uiwindow.rootViewController = data.viewcontroller;
} else {
[data.uiwindow addSubview:self];
}
/* The root view controller handles rotation and the status bar.
* Assigning it also adds the controller's view to the window. We
* explicitly re-set it to make sure the view is properly attached to
* the window. Just adding the sub-view if the root view controller is
* already correct causes orientation issues on iOS 7 and below. */
data.uiwindow.rootViewController = nil;
data.uiwindow.rootViewController = data.viewcontroller;

/* The view's bounds may not be correct until the next event cycle. That
* might happen after the current dimensions are queried, so we force a
Expand Down

0 comments on commit c6538cb

Please sign in to comment.