mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-11-04 01:34:38 +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
 | 
				
			||||||
@@ -775,7 +786,7 @@ extern "C" {
 | 
				
			|||||||
 *   "0"       - SDL will generate a window-close event when it sees Alt+F4.
 | 
					 *   "0"       - SDL will generate a window-close event when it sees Alt+F4.
 | 
				
			||||||
 *   "1"       - SDL will only do normal key handling for Alt+F4.
 | 
					 *   "1"       - SDL will only do normal key handling for Alt+F4.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4	"SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
 | 
					#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 *  \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
 | 
					 *  \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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