Re: tvOS swipe left/right gesture support (patch enclosed)

Alex Szpakowski <[email protected]> Sun, 18 Dec 2016 10:32:34 -0400
Newsgroups gmane.comp.lib.sdl
Message-ID <[email protected]>
SDL is already supposed to send left/right/up/down key presses when “press” events are detected on the Apple TV Remote ( https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/DetectingButtonPressesandGestures.html <https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/DetectingButtonPressesandGestures.html> ) – does that work for you? Does your extra gesture recognizer code interfere with that at all?

> On Dec 18, 2016, at 8:15 AM, oviano <[email protected]> wrote:
> 
> I found that events weren't being generated for the simple directional swipes on the Apple TV touch remote.
> 
> While it's possible to use the touch press/release/motion events to detect simple swipes of this nature (and I had this working well enough) it struck me that this was re-inventing the wheel.
> 
> As such, I have written a patch that recognises the proper swipe up/down/left/right events issued in UIKit and passes these on as directional key presses. This also means that the touch remote operates the same way as the old-style IR remote in this respect.
> 
> 
> 
> 
> 
> 
> 
> 
> Code:
> 
> diff -r 007dfe83abf8 src/video/uikit/SDL_uikitview.m
> --- a/src/video/uikit/SDL_uikitview.m   Wed Oct 19 20:50:33 2016 -0700
> +++ b/src/video/uikit/SDL_uikitview.m   Sun Dec 18 14:57:42 2016 +0300
> @@ -48,7 +48,20 @@
>  #if !TARGET_OS_TV
>          self.multipleTouchEnabled = YES;
>  #endif
> -
> +#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];
> +#endif
>          touchId = 1;
>          SDL_AddTouch(touchId, "");
>      }
> @@ -56,6 +69,27 @@
>      return self;
>  }
>  
> +#if TARGET_OS_TV
> +- (void)swipeGesture:(UISwipeGestureRecognizer *)sender
> +{
> +    switch (sender.direction)
> +    {
> +    case UISwipeGestureRecognizerDirectionUp:
> +        SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_UP);
> +        break;
> +    case UISwipeGestureRecognizerDirectionDown:
> +        SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_DOWN);
> +        break;
> +    case UISwipeGestureRecognizerDirectionLeft:
> +        SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_LEFT);
> +        break;
> +    case UISwipeGestureRecognizerDirectionRight:
> +        SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_RIGHT);
> +        break;
> +    }
> +}
> +#endif
> +
>  - (void)setSDLWindow:(SDL_Window *)window
>  {
>      SDL_WindowData *data = nil;
> _______________________________________________
> SDL mailing list
> [email protected] <mailto:[email protected]>
> http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org <http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org>

_______________________________________________
SDL mailing list
[email protected]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org