From: Holger Schemel Date: Tue, 11 Jul 2017 21:21:25 +0000 (+0200) Subject: added support for special media buttons on Amazon Fire TV remote control X-Git-Tag: 4.0.1.0~27 X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=commitdiff_plain;h=0d214d4e314f6f42df24be140bb433e980319767 added support for special media buttons on Amazon Fire TV remote control --- diff --git a/src/events.c b/src/events.c index 69d7a212..2472fdf5 100644 --- a/src/events.c +++ b/src/events.c @@ -1525,6 +1525,14 @@ void HandleKey(Key key, int key_status) int joy = 0; int i; +#if defined(TARGET_SDL2) + /* map special "play/pause" media key to default key for play/pause actions */ + if (key == KSYM_PlayPause) + key = KSYM_space; +#endif + + HandleSpecialGameControllerKeys(key, key_status); + if (game_status == GAME_MODE_PLAYING) { /* only needed for single-step tape recording mode */ @@ -2099,3 +2107,33 @@ void HandleSpecialGameControllerButtons(Event *event) } #endif } + +void HandleSpecialGameControllerKeys(Key key, int key_status) +{ +#if defined(TARGET_SDL2) +#if defined(KSYM_Rewind) && defined(KSYM_FastForward) + int button = SDL_CONTROLLER_BUTTON_INVALID; + + /* map keys to joystick buttons (special hack for Amazon Fire TV remote) */ + if (key == KSYM_Rewind) + button = SDL_CONTROLLER_BUTTON_A; + else if (key == KSYM_FastForward || key == KSYM_Menu) + button = SDL_CONTROLLER_BUTTON_B; + + if (button != SDL_CONTROLLER_BUTTON_INVALID) + { + Event event; + + event.type = (key_status == KEY_PRESSED ? SDL_CONTROLLERBUTTONDOWN : + SDL_CONTROLLERBUTTONUP); + + event.cbutton.which = 0; /* first joystick (Amazon Fire TV remote) */ + event.cbutton.button = button; + event.cbutton.state = (key_status == KEY_PRESSED ? SDL_PRESSED : + SDL_RELEASED); + + HandleJoystickEvent(&event); + } +#endif +#endif +} diff --git a/src/events.h b/src/events.h index b4c9c321..71ff7627 100644 --- a/src/events.h +++ b/src/events.h @@ -45,5 +45,6 @@ void HandleButton(int, int, int, int); void HandleKey(Key, int); void HandleJoystick(); void HandleSpecialGameControllerButtons(Event *); +void HandleSpecialGameControllerKeys(Key, int); #endif diff --git a/src/libgame/sdl.h b/src/libgame/sdl.h index f9fc1a87..838be3ad 100644 --- a/src/libgame/sdl.h +++ b/src/libgame/sdl.h @@ -201,6 +201,11 @@ struct MouseCursorInfo #if defined(TARGET_SDL2) #define KSYM_Menu SDLK_MENU #define KSYM_Back SDLK_AC_BACK +#define KSYM_PlayPause SDLK_AUDIOPLAY +#if defined(PLATFORM_ANDROID) +#define KSYM_Rewind SDLK_AUDIORWND +#define KSYM_FastForward SDLK_AUDIOFFWD +#endif #endif #define KSYM_space SDLK_SPACE diff --git a/src/tools.c b/src/tools.c index 626cb897..a766c2d6 100644 --- a/src/tools.c +++ b/src/tools.c @@ -3913,6 +3913,9 @@ static int RequestHandleEvents(unsigned int req_state) case KSYM_Return: #if defined(TARGET_SDL2) case KSYM_Menu: +#if defined(KSYM_Rewind) + case KSYM_Rewind: /* for Amazon Fire TV remote */ +#endif #endif result = 1; break; @@ -3920,6 +3923,9 @@ static int RequestHandleEvents(unsigned int req_state) case KSYM_Escape: #if defined(TARGET_SDL2) case KSYM_Back: +#if defined(KSYM_FastForward) + case KSYM_FastForward: /* for Amazon Fire TV remote */ +#endif #endif result = 0; break;