X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fevents.c;h=2472fdf5f8978b048af638730299206544445255;hp=dccf50030d251c58bf543a94ee820a4dec3372a9;hb=0d214d4e314f6f42df24be140bb433e980319767;hpb=1c772a2dcd5e189fb7d6c20be9540aa37ed9de0b diff --git a/src/events.c b/src/events.c index dccf5003..2472fdf5 100644 --- a/src/events.c +++ b/src/events.c @@ -354,6 +354,7 @@ void ClearEventQueue() #if defined(TARGET_SDL2) case SDL_CONTROLLERBUTTONUP: + HandleJoystickEvent(&event); ClearPlayerAction(); break; #endif @@ -399,6 +400,7 @@ void SleepWhileUnmapped() #if defined(TARGET_SDL2) case SDL_CONTROLLERBUTTONUP: + HandleJoystickEvent(&event); key_joystick_mapping = 0; break; #endif @@ -1523,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 */ @@ -2097,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 +}