mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2025-01-17 14:47:19 +01: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:
parent
330b19c968
commit
85c34e9a39
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user