mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	Added SDL_HINT_IOS_HIDE_HOME_INDICATOR to determine how the home indicator on the iPhone X is handled.
This variable can be set to the following values: "0" - The indicator bar is not hidden (default for windowed applications) "1" - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) "2" - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications)
This commit is contained in:
		| @@ -365,6 +365,17 @@ extern "C" { | |||||||
|  */ |  */ | ||||||
| #define SDL_HINT_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS "SDL_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS" | #define SDL_HINT_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS "SDL_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS" | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * \brief  A variable controlling whether the home indicator bar on iPhone X | ||||||
|  |  *         should be hidden. | ||||||
|  |  * | ||||||
|  |  *  This variable can be set to the following values: | ||||||
|  |  *    "0"       - The indicator bar is not hidden (default for windowed applications) | ||||||
|  |  *    "1"       - The indicator bar is hidden and is shown when the screen is touched (useful for movie playback applications) | ||||||
|  |  *    "2"       - The indicator bar is dim and the first swipe makes it visible and the second swipe performs the "home" action (default for fullscreen applications) | ||||||
|  |  */ | ||||||
|  | #define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  *  \brief  A variable controlling whether the Android / iOS built-in |  *  \brief  A variable controlling whether the Android / iOS built-in | ||||||
|  *  accelerometer should be listed as a joystick device, rather than listing |  *  accelerometer should be listed as a joystick device, rather than listing | ||||||
|   | |||||||
| @@ -109,6 +109,18 @@ UIKit_ShowMessageBoxAlertController(const SDL_MessageBoxData *messageboxdata, in | |||||||
|         alertwindow.hidden = YES; |         alertwindow.hidden = YES; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /* Force the main SDL window to re-evaluate home indicator state */ | ||||||
|  |     SDL_Window *focus = SDL_GetFocusWindow(); | ||||||
|  |     if (focus) { | ||||||
|  |         SDL_WindowData *data = (__bridge SDL_WindowData *) focus->driverdata; | ||||||
|  |         if (data != nil) { | ||||||
|  |             if (@available(iOS 11.0, *)) { | ||||||
|  |                 [data.viewcontroller performSelectorOnMainThread:@selector(setNeedsUpdateOfHomeIndicatorAutoHidden) withObject:nil waitUntilDone:NO]; | ||||||
|  |                 [data.viewcontroller performSelectorOnMainThread:@selector(setNeedsUpdateOfScreenEdgesDeferringSystemGestures) withObject:nil waitUntilDone:NO]; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     *buttonid = messageboxdata->buttons[clickedindex].buttonid; |     *buttonid = messageboxdata->buttons[clickedindex].buttonid; | ||||||
|     return YES; |     return YES; | ||||||
| #else | #else | ||||||
|   | |||||||
| @@ -58,6 +58,10 @@ | |||||||
| #if !TARGET_OS_TV | #if !TARGET_OS_TV | ||||||
| - (NSUInteger)supportedInterfaceOrientations; | - (NSUInteger)supportedInterfaceOrientations; | ||||||
| - (BOOL)prefersStatusBarHidden; | - (BOOL)prefersStatusBarHidden; | ||||||
|  | - (BOOL)prefersHomeIndicatorAutoHidden; | ||||||
|  | - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures; | ||||||
|  |  | ||||||
|  | @property (nonatomic, assign) int homeIndicatorHidden; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if SDL_IPHONE_KEYBOARD | #if SDL_IPHONE_KEYBOARD | ||||||
|   | |||||||
| @@ -50,6 +50,21 @@ SDL_AppleTVControllerUIHintChanged(void *userdata, const char *name, const char | |||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #if !TARGET_OS_TV | ||||||
|  | static void SDLCALL | ||||||
|  | SDL_HideHomeIndicatorHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint) | ||||||
|  | { | ||||||
|  |     @autoreleasepool { | ||||||
|  |         SDL_uikitviewcontroller *viewcontroller = (__bridge SDL_uikitviewcontroller *) userdata; | ||||||
|  |         viewcontroller.homeIndicatorHidden = (hint && *hint) ? SDL_atoi(hint) : -1; | ||||||
|  |         if (@available(iOS 11.0, *)) { | ||||||
|  |             [viewcontroller setNeedsUpdateOfHomeIndicatorAutoHidden]; | ||||||
|  |             [viewcontroller setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
| @implementation SDL_uikitviewcontroller { | @implementation SDL_uikitviewcontroller { | ||||||
|     CADisplayLink *displayLink; |     CADisplayLink *displayLink; | ||||||
|     int animationInterval; |     int animationInterval; | ||||||
| @@ -79,7 +94,13 @@ SDL_AppleTVControllerUIHintChanged(void *userdata, const char *name, const char | |||||||
|                             SDL_AppleTVControllerUIHintChanged, |                             SDL_AppleTVControllerUIHintChanged, | ||||||
|                             (__bridge void *) self); |                             (__bridge void *) self); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #if !TARGET_OS_TV | ||||||
|  |         SDL_AddHintCallback(SDL_HINT_IOS_HIDE_HOME_INDICATOR, | ||||||
|  |                             SDL_HideHomeIndicatorHintChanged, | ||||||
|  |                             (__bridge void *) self); | ||||||
|     } |     } | ||||||
|  | #endif | ||||||
|     return self; |     return self; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -94,6 +115,12 @@ SDL_AppleTVControllerUIHintChanged(void *userdata, const char *name, const char | |||||||
|                         SDL_AppleTVControllerUIHintChanged, |                         SDL_AppleTVControllerUIHintChanged, | ||||||
|                         (__bridge void *) self); |                         (__bridge void *) self); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #if !TARGET_OS_TV | ||||||
|  |     SDL_DelHintCallback(SDL_HINT_IOS_HIDE_HOME_INDICATOR, | ||||||
|  |                         SDL_HideHomeIndicatorHintChanged, | ||||||
|  |                         (__bridge void *) self); | ||||||
|  | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| - (void)setAnimationCallback:(int)interval | - (void)setAnimationCallback:(int)interval | ||||||
| @@ -179,7 +206,35 @@ SDL_AppleTVControllerUIHintChanged(void *userdata, const char *name, const char | |||||||
|  |  | ||||||
| - (BOOL)prefersStatusBarHidden | - (BOOL)prefersStatusBarHidden | ||||||
| { | { | ||||||
|     return (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) != 0; |     BOOL hidden = (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) != 0; | ||||||
|  |     return hidden; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | - (BOOL)prefersHomeIndicatorAutoHidden | ||||||
|  | { | ||||||
|  |     BOOL hidden = NO; | ||||||
|  |     if (self.homeIndicatorHidden == 1) { | ||||||
|  |         hidden = YES; | ||||||
|  |     } | ||||||
|  |     return hidden; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | - (UIRectEdge)preferredScreenEdgesDeferringSystemGestures | ||||||
|  | { | ||||||
|  |     if (self.homeIndicatorHidden >= 0) { | ||||||
|  |         if (self.homeIndicatorHidden == 2) { | ||||||
|  |             return UIRectEdgeAll; | ||||||
|  |         } else { | ||||||
|  |             return UIRectEdgeNone; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* By default, fullscreen and borderless windows get all screen gestures */ | ||||||
|  |     if ((window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) != 0) { | ||||||
|  |         return UIRectEdgeAll; | ||||||
|  |     } else { | ||||||
|  |         return UIRectEdgeNone; | ||||||
|  |     } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sam Lantinga
					Sam Lantinga