From c7f5d0a71d7318ccc4c3f28ab90d688a1a0868b3 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 23 Aug 2013 18:03:05 +0300 Subject: fix keyboard handling in gui in SDL2. --- src/gui/sdlinput.cpp | 43 +++++++++++++++++++++++-------------------- src/gui/sdlinput.h | 3 +++ 2 files changed, 26 insertions(+), 20 deletions(-) (limited to 'src/gui') diff --git a/src/gui/sdlinput.cpp b/src/gui/sdlinput.cpp index fd72cb962..19ec87f02 100644 --- a/src/gui/sdlinput.cpp +++ b/src/gui/sdlinput.cpp @@ -60,6 +60,7 @@ #include "inputmanager.h" #include "keydata.h" +#include "logger.h" #include "mouseinput.h" #include "sdlshared.h" @@ -133,34 +134,16 @@ void SDLInput::pushInput(const SDL_Event &event) { case SDL_KEYDOWN: { - keyInput.setKey(gcn::Key(convertKeyCharacter(event))); keyInput.setType(gcn::KeyInput::PRESSED); - keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT); - keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL); - keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT); - keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META); - keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0 - && event.key.keysym.sym <= SDLK_KP_EQUALS); - const int actionId = inputManager.getActionByKey(event); - if (actionId >= 0) - keyInput.setActionId(actionId); + convertKeyEventToKey(event, keyInput); mKeyInputQueue.push(keyInput); break; } case SDL_KEYUP: { - keyInput.setKey(gcn::Key(convertKeyCharacter(event))); keyInput.setType(gcn::KeyInput::RELEASED); - keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT); - keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL); - keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT); - keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META); - keyInput.setNumericPad(event.key.keysym.sym >= SDLK_KP0 - && event.key.keysym.sym <= SDLK_KP_EQUALS); - const int actionId = inputManager.getActionByKey(event); - if (actionId >= 0) - keyInput.setActionId(actionId); + convertKeyEventToKey(event, keyInput); mKeyInputQueue.push(keyInput); break; } @@ -249,6 +232,26 @@ void SDLInput::pushInput(const SDL_Event &event) } // end switch } +void SDLInput::convertKeyEventToKey(const SDL_Event &event, KeyInput &keyInput) +{ + keyInput.setKey(gcn::Key(convertKeyCharacter(event))); + keyInput.setShiftPressed(event.key.keysym.mod & KMOD_SHIFT); + keyInput.setControlPressed(event.key.keysym.mod & KMOD_CTRL); + keyInput.setAltPressed(event.key.keysym.mod & KMOD_ALT); + keyInput.setMetaPressed(event.key.keysym.mod & KMOD_META); +#ifdef USE_SDL2 + const int code = event.key.keysym.scancode; + keyInput.setNumericPad((code >= SDL_SCANCODE_KP_DIVIDE + && code <= SDL_SCANCODE_KP_PERIOD) || code == SDL_SCANCODE_KP_EQUALS); +#else + const int code = event.key.keysym.sym; + keyInput.setNumericPad(code >= SDLK_KP0 && code <= SDLK_KP_EQUALS); +#endif + const int actionId = inputManager.getActionByKey(event); + if (actionId >= 0) + keyInput.setActionId(actionId); +} + int SDLInput::convertMouseButton(const int button) { switch (button) diff --git a/src/gui/sdlinput.h b/src/gui/sdlinput.h index aa02e9554..cbe5863ed 100644 --- a/src/gui/sdlinput.h +++ b/src/gui/sdlinput.h @@ -189,6 +189,9 @@ protected: */ static int convertKeyCharacter(const SDL_Event &event) A_WARN_UNUSED; + static void convertKeyEventToKey(const SDL_Event &event, + KeyInput &keyInput); + std::queue mKeyInputQueue; std::queue mMouseInputQueue; -- cgit v1.2.3-70-g09d2