You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
5.1 KiB
202 lines
5.1 KiB
#include "controls/devices/kbcontroller.h" |
|
|
|
#if defined(RETROFW) |
|
#define HAS_KBCTRL 1 |
|
|
|
#define KBCTRL_BUTTON_DPAD_LEFT SDLK_LEFT |
|
#define KBCTRL_BUTTON_DPAD_RIGHT SDLK_RIGHT |
|
#define KBCTRL_BUTTON_DPAD_UP SDLK_UP |
|
#define KBCTRL_BUTTON_DPAD_DOWN SDLK_DOWN |
|
|
|
#define KBCTRL_BUTTON_B SDLK_LCTRL |
|
#define KBCTRL_BUTTON_A SDLK_LALT |
|
#define KBCTRL_BUTTON_Y SDLK_SPACE |
|
#define KBCTRL_BUTTON_X SDLK_LSHIFT |
|
#define KBCTRL_BUTTON_RIGHTSHOULDER SDLK_BACKSPACE |
|
#define KBCTRL_BUTTON_LEFTSHOULDER SDLK_TAB |
|
#define KBCTRL_BUTTON_START SDLK_RETURN |
|
#define KBCTRL_BUTTON_BACK SDLK_ESCAPE |
|
#define KBCTRL_MODIFIER_KEY SDLK_END // The suspend key on RG300 |
|
#endif |
|
|
|
#if HAS_KBCTRL == 1 |
|
|
|
#include "sdl2_to_1_2_backports.h" |
|
#include "sdl_compat.h" |
|
#include "stubs.h" |
|
|
|
namespace dvl { |
|
|
|
namespace { |
|
|
|
bool IsModifierKey() |
|
{ |
|
#ifdef KBCTRL_MODIFIER_KEY |
|
return SDLC_GetKeyboardState(nullptr)[KBCTRL_MODIFIER_KEY]; |
|
#else |
|
return false; |
|
#endif |
|
} |
|
|
|
} // namespace |
|
|
|
ControllerButton KbCtrlToControllerButton(const SDL_Event &event) |
|
{ |
|
switch (event.type) { |
|
case SDL_KEYDOWN: |
|
case SDL_KEYUP: |
|
switch (event.key.keysym.sym) { |
|
#ifdef KBCTRL_BUTTON_A |
|
case KBCTRL_BUTTON_A: |
|
return ControllerButton::BUTTON_A; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_B |
|
case KBCTRL_BUTTON_B: |
|
return ControllerButton::BUTTON_B; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_X |
|
case KBCTRL_BUTTON_X: |
|
if (IsModifierKey()) |
|
return ControllerButton::BUTTON_LEFTSTICK; |
|
return ControllerButton::BUTTON_X; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_Y |
|
case KBCTRL_BUTTON_Y: |
|
if (IsModifierKey()) |
|
return ControllerButton::BUTTON_RIGHTSTICK; |
|
return ControllerButton::BUTTON_Y; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_LEFTSTICK |
|
case KBCTRL_BUTTON_LEFTSTICK: |
|
return ControllerButton::BUTTON_LEFTSTICK; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_RIGHTSTICK |
|
case KBCTRL_BUTTON_RIGHTSTICK: |
|
return ControllerButton::BUTTON_RIGHTSTICK; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_LEFTSHOULDER |
|
case KBCTRL_BUTTON_LEFTSHOULDER: |
|
if (IsModifierKey()) |
|
return ControllerButton::AXIS_TRIGGERLEFT; |
|
return ControllerButton::BUTTON_LEFTSHOULDER; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_RIGHTSHOULDER |
|
case KBCTRL_BUTTON_RIGHTSHOULDER: |
|
if (IsModifierKey()) |
|
return ControllerButton::AXIS_TRIGGERRIGHT; |
|
return ControllerButton::BUTTON_RIGHTSHOULDER; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_START |
|
case KBCTRL_BUTTON_START: |
|
return ControllerButton::BUTTON_START; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_BACK |
|
case KBCTRL_BUTTON_BACK: |
|
return ControllerButton::BUTTON_BACK; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_UP |
|
case KBCTRL_BUTTON_DPAD_UP: |
|
return ControllerButton::BUTTON_DPAD_UP; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_DOWN |
|
case KBCTRL_BUTTON_DPAD_DOWN: |
|
return ControllerButton::BUTTON_DPAD_DOWN; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_LEFT |
|
case KBCTRL_BUTTON_DPAD_LEFT: |
|
return ControllerButton::BUTTON_DPAD_LEFT; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_RIGHT |
|
case KBCTRL_BUTTON_DPAD_RIGHT: |
|
return ControllerButton::BUTTON_DPAD_RIGHT; |
|
#endif |
|
default: |
|
return ControllerButton::NONE; |
|
} |
|
} |
|
} |
|
|
|
namespace { |
|
|
|
int ControllerButtonToKbCtrlKeyCode(ControllerButton button) |
|
{ |
|
if (button == ControllerButton::AXIS_TRIGGERLEFT || button == ControllerButton::AXIS_TRIGGERRIGHT) |
|
UNIMPLEMENTED(); |
|
switch (button) { |
|
#ifdef KBCTRL_BUTTON_A |
|
case ControllerButton::BUTTON_A: |
|
return KBCTRL_BUTTON_A; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_B |
|
case ControllerButton::BUTTON_B: |
|
return KBCTRL_BUTTON_B; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_X |
|
case ControllerButton::BUTTON_X: |
|
return KBCTRL_BUTTON_X; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_Y |
|
case ControllerButton::BUTTON_Y: |
|
return KBCTRL_BUTTON_Y; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_BACK |
|
case ControllerButton::BUTTON_BACK: |
|
return KBCTRL_BUTTON_BACK; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_START |
|
case ControllerButton::BUTTON_START: |
|
return KBCTRL_BUTTON_START; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_LEFTSTICK |
|
case ControllerButton::BUTTON_LEFTSTICK: |
|
return KBCTRL_BUTTON_LEFTSTICK; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_RIGHTSTICK |
|
case ControllerButton::BUTTON_RIGHTSTICK: |
|
return KBCTRL_BUTTON_RIGHTSTICK; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_LEFTSHOULDER |
|
case ControllerButton::BUTTON_LEFTSHOULDER: |
|
return KBCTRL_BUTTON_LEFTSHOULDER; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_RIGHTSHOULDER |
|
case ControllerButton::BUTTON_RIGHTSHOULDER: |
|
return KBCTRL_BUTTON_RIGHTSHOULDER; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_UP |
|
case ControllerButton::BUTTON_DPAD_UP: |
|
return KBCTRL_BUTTON_DPAD_UP; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_DOWN |
|
case ControllerButton::BUTTON_DPAD_DOWN: |
|
return KBCTRL_BUTTON_DPAD_DOWN; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_LEFT |
|
case ControllerButton::BUTTON_DPAD_LEFT: |
|
return KBCTRL_BUTTON_DPAD_LEFT; |
|
#endif |
|
#ifdef KBCTRL_BUTTON_DPAD_RIGHT |
|
case ControllerButton::BUTTON_DPAD_RIGHT: |
|
return KBCTRL_BUTTON_DPAD_RIGHT; |
|
#endif |
|
default: |
|
return -1; |
|
} |
|
} |
|
|
|
} // namespace |
|
|
|
bool IsKbCtrlButtonPressed(ControllerButton button) |
|
{ |
|
int key_code = ControllerButtonToKbCtrlKeyCode(button); |
|
if (key_code == -1) |
|
return false; |
|
#ifndef USE_SDL1 |
|
return SDL_GetKeyboardState(nullptr)[SDL_GetScancodeFromKey(key_code)]; |
|
#else |
|
return SDL_GetKeyState(nullptr)[key_code]; |
|
#endif |
|
} |
|
|
|
} // namespace dvl |
|
#endif
|
|
|