From 9338a619f86e6cd333e09ad7fd64e32f3c288391 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 17 Jan 2018 17:24:15 -0800 Subject: [PATCH] Added a hint SDL_HINT_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS to prevent turning Apple TV remote swipes into arrow key events --- include/SDL_hints.h | 10 ++++++++++ src/video/uikit/SDL_uikitview.m | 35 ++++++++++++++++++--------------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/include/SDL_hints.h b/include/SDL_hints.h index 1b55f8e0a5236..e9a0e7c874fff 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -355,6 +355,16 @@ extern "C" { */ #define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" +/** + * \brief A variable controlling whether the Apple TV remote swipes are + * translated into arrow key events + * + * This variable can be set to the following values: + * "0" - Swipes are not translated into arrow key events + * "1" - Swipes are translated into arrow key events (the default) + */ +#define SDL_HINT_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS "SDL_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS" + /** * \brief A variable controlling whether the Android / iOS built-in * accelerometer should be listed as a joystick device, rather than listing diff --git a/src/video/uikit/SDL_uikitview.m b/src/video/uikit/SDL_uikitview.m index 63bef0c41dbd9..e5dc99a0ce18a 100644 --- a/src/video/uikit/SDL_uikitview.m +++ b/src/video/uikit/SDL_uikitview.m @@ -24,6 +24,7 @@ #include "SDL_uikitview.h" +#include "SDL_hints.h" #include "../../events/SDL_mouse_c.h" #include "../../events/SDL_touch_c.h" #include "../../events/SDL_events_c.h" @@ -42,23 +43,25 @@ @implementation SDL_uikitview { - (instancetype)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { - /* Apple TV Remote touchpad swipe gestures. */ #if TARGET_OS_TV - UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; - swipeUp.direction = UISwipeGestureRecognizerDirectionUp; - [self addGestureRecognizer:swipeUp]; - - UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; - swipeDown.direction = UISwipeGestureRecognizerDirectionDown; - [self addGestureRecognizer:swipeDown]; - - UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; - swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; - [self addGestureRecognizer:swipeLeft]; - - UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; - swipeRight.direction = UISwipeGestureRecognizerDirectionRight; - [self addGestureRecognizer:swipeRight]; + if (SDL_GetHintBoolean(SDL_HINT_APPLE_TV_REMOTE_SWIPES_AS_ARROW_KEYS, SDL_TRUE)) { + /* Apple TV Remote touchpad swipe gestures. */ + UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeUp.direction = UISwipeGestureRecognizerDirectionUp; + [self addGestureRecognizer:swipeUp]; + + UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeDown.direction = UISwipeGestureRecognizerDirectionDown; + [self addGestureRecognizer:swipeDown]; + + UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; + [self addGestureRecognizer:swipeLeft]; + + UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)]; + swipeRight.direction = UISwipeGestureRecognizerDirectionRight; + [self addGestureRecognizer:swipeRight]; + } #endif self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;