Merge pull request #7665 from yoshisuga/master

iOS: Home screen indicator handling for iPhone X/iPad Pro 2018
This commit is contained in:
Twinaphex 2018-12-11 03:51:11 +01:00 committed by GitHub
commit 574972c1be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 0 deletions

View File

@ -153,12 +153,53 @@ void *glkitview_init(void);
}
#elif defined(HAVE_COCOATOUCH)
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
return UIRectEdgeBottom;
}
-(BOOL)prefersHomeIndicatorAutoHidden
{
return NO;
}
- (void)viewDidAppear:(BOOL)animated
{
/* Pause Menus. */
[self showPauseIndicator];
if (@available(iOS 11.0, *)) {
[self setNeedsUpdateOfHomeIndicatorAutoHidden];
}
}
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
if (@available(iOS 11, *)) {
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
[self adjustViewFrameForSafeArea];
} completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
}];
}
}
-(void)adjustViewFrameForSafeArea {
// This is for adjusting the view frame to account for the notch in iPhone X phones
if (@available(iOS 11, *)) {
RAScreen *screen = (__bridge RAScreen*)get_chosen_screen();
CGRect screenSize = [screen bounds];
UIEdgeInsets inset = [[UIApplication sharedApplication] delegate].window.safeAreaInsets;
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
CGRect newFrame = screenSize;
if ( orientation == UIInterfaceOrientationPortrait ) {
newFrame = CGRectMake(screenSize.origin.x, screenSize.origin.y + inset.top, screenSize.size.width, screenSize.size.height - inset.top);
} else if ( orientation == UIInterfaceOrientationLandscapeLeft ) {
newFrame = CGRectMake(screenSize.origin.x, screenSize.origin.y, screenSize.size.width - inset.right, screenSize.size.height);
} else if ( orientation == UIInterfaceOrientationLandscapeRight ) {
newFrame = CGRectMake(screenSize.origin.x + inset.left, screenSize.origin.y, screenSize.size.width - inset.left, screenSize.size.height);
}
self.view.frame = newFrame;
}
}
- (void)showPauseIndicator
{
g_pause_indicator_view.alpha = 1.0f;
@ -191,6 +232,7 @@ void *glkitview_init(void);
g_pause_indicator_view.frame = CGRectMake(tenpctw * 4.0f, 0.0f, tenpctw * 2.0f, tenpcth);
[g_pause_indicator_view viewWithTag:1].frame = CGRectMake(0, 0, tenpctw * 2.0f, tenpcth);
[self adjustViewFrameForSafeArea];
}
#define ALMOST_INVISIBLE (.021f)

View File

@ -172,10 +172,23 @@ void *glkitview_init(void);
}
#elif defined(HAVE_COCOATOUCH)
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
return UIRectEdgeBottom;
}
-(BOOL)prefersHomeIndicatorAutoHidden
{
return NO;
}
- (void)viewDidAppear:(BOOL)animated
{
/* Pause Menus. */
[self showPauseIndicator];
if (@available(iOS 11.0, *)) {
[self setNeedsUpdateOfHomeIndicatorAutoHidden];
}
}
- (void)showPauseIndicator