From 007f7538ffa3b4854e06a7d799855093593eddd1 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 29 Dec 2016 17:12:09 +0300 Subject: Add constexpr into sdlinput. --- src/gui/sdlinput.cpp | 222 -------------------------------------------------- src/gui/sdlinput.h | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 223 insertions(+), 223 deletions(-) diff --git a/src/gui/sdlinput.cpp b/src/gui/sdlinput.cpp index 3ca69c820..eb189e8a1 100644 --- a/src/gui/sdlinput.cpp +++ b/src/gui/sdlinput.cpp @@ -77,8 +77,6 @@ #include "sdlshared.h" -#include "enums/input/keyvalue.h" - #include "input/inputmanager.h" #include "gui/gui.h" @@ -328,226 +326,6 @@ MouseButtonT SDLInput::convertMouseButton(const int button) } } -int SDLInput::convertKeyCharacter(const SDL_Event &event) -{ - const SDL_keysym keysym = event.key.keysym; -#ifdef USE_SDL2 - int value = keysym.scancode; -#else // USE_SDL2 - - int value = keysym.unicode; -#endif // USE_SDL2 - - PRAGMA45(GCC diagnostic push) - PRAGMA45(GCC diagnostic ignored "-Wswitch-enum") - switch (keysym.sym) - { - case SDLK_TAB: - value = KeyValue::TAB; - break; - case SDLK_LALT: - value = KeyValue::LEFT_ALT; - break; - case SDLK_RALT: - value = KeyValue::RIGHT_ALT; - break; - case SDLK_LSHIFT: - value = KeyValue::LEFT_SHIFT; - break; - case SDLK_RSHIFT: - value = KeyValue::RIGHT_SHIFT; - break; - case SDLK_LCTRL: - value = KeyValue::LEFT_CONTROL; - break; - case SDLK_RCTRL: - value = KeyValue::RIGHT_CONTROL; - break; - case SDLK_BACKSPACE: - value = KeyValue::BACKSPACE; - break; - case SDLK_PAUSE: - value = KeyValue::PAUSE; - break; - case SDLK_SPACE: - // Special characters like ~ (tilde) ends up - // with the keysym.sym SDLK_SPACE which - // without this check would be lost. The check - // is only valid on key down events in SDL. -#ifndef USE_SDL2 - if (event.type == SDL_KEYUP || keysym.unicode == ' ') -#endif // USE_SDL2 - { - value = KeyValue::SPACE; - } - break; - case SDLK_ESCAPE: -#ifdef USE_SDL2 - case SDLK_AC_BACK: -#endif // USE_SDL2 - value = KeyValue::ESCAPE; - break; - case SDLK_DELETE: - value = KeyValue::DELETE_; - break; - case SDLK_INSERT: - value = KeyValue::INSERT; - break; - case SDLK_HOME: - value = KeyValue::HOME; - break; - case SDLK_END: - value = KeyValue::END; - break; - case SDLK_PAGEUP: - value = KeyValue::PAGE_UP; - break; - case SDLK_PRINT: - value = KeyValue::PRINT_SCREEN; - break; - case SDLK_PAGEDOWN: - value = KeyValue::PAGE_DOWN; - break; - case SDLK_F1: - value = KeyValue::F1; - break; - case SDLK_F2: - value = KeyValue::F2; - break; - case SDLK_F3: - value = KeyValue::F3; - break; - case SDLK_F4: - value = KeyValue::F4; - break; - case SDLK_F5: - value = KeyValue::F5; - break; - case SDLK_F6: - value = KeyValue::F6; - break; - case SDLK_F7: - value = KeyValue::F7; - break; - case SDLK_F8: - value = KeyValue::F8; - break; - case SDLK_F9: - value = KeyValue::F9; - break; - case SDLK_F10: - value = KeyValue::F10; - break; - case SDLK_F11: - value = KeyValue::F11; - break; - case SDLK_F12: - value = KeyValue::F12; - break; - case SDLK_F13: - value = KeyValue::F13; - break; - case SDLK_F14: - value = KeyValue::F14; - break; - case SDLK_F15: - value = KeyValue::F15; - break; - case SDLK_NUMLOCK: - value = KeyValue::NUM_LOCK; - break; - case SDLK_CAPSLOCK: - value = KeyValue::CAPS_LOCK; - break; - case SDLK_SCROLLOCK: - value = KeyValue::SCROLL_LOCK; - break; - case SDLK_RMETA: - value = KeyValue::RIGHT_META; - break; - case SDLK_LMETA: - value = KeyValue::LEFT_META; - break; -#ifndef USE_SDL2 - case SDLK_LSUPER: - value = KeyValue::LEFT_SUPER; - break; - case SDLK_RSUPER: - value = KeyValue::RIGHT_SUPER; - break; -#endif // USE_SDL2 - - case SDLK_MODE: - value = KeyValue::ALT_GR; - break; - case SDLK_UP: - value = KeyValue::UP; - break; - case SDLK_DOWN: - value = KeyValue::DOWN; - break; - case SDLK_LEFT: - value = KeyValue::LEFT; - break; - case SDLK_RIGHT: - value = KeyValue::RIGHT; - break; - case SDLK_RETURN: - value = KeyValue::ENTER; - break; - case SDLK_KP_ENTER: - value = KeyValue::ENTER; - break; - - default: - break; - } - PRAGMA45(GCC diagnostic pop) - - if (!(CAST_U32(keysym.mod) & KMOD_NUM)) - { - PRAGMA45(GCC diagnostic push) - PRAGMA45(GCC diagnostic ignored "-Wswitch-enum") - switch (keysym.sym) - { - case SDLK_KP0: - value = KeyValue::INSERT; - break; - case SDLK_KP1: - value = KeyValue::END; - break; - case SDLK_KP2: - value = KeyValue::DOWN; - break; - case SDLK_KP3: - value = KeyValue::PAGE_DOWN; - break; - case SDLK_KP4: - value = KeyValue::LEFT; - break; - case SDLK_KP5: - value = 0; - break; - case SDLK_KP6: - value = KeyValue::RIGHT; - break; - case SDLK_KP7: - value = KeyValue::HOME; - break; - case SDLK_KP8: - value = KeyValue::UP; - break; - case SDLK_KP9: - value = KeyValue::PAGE_UP; - break; - default: - break; - } - PRAGMA45(GCC diagnostic pop) - } - return value; -} - void SDLInput::simulateMouseClick(const int x, const int y, const MouseButtonT button) { diff --git a/src/gui/sdlinput.h b/src/gui/sdlinput.h index 3d865389e..b5454b7f7 100644 --- a/src/gui/sdlinput.h +++ b/src/gui/sdlinput.h @@ -78,6 +78,8 @@ #ifndef GUI_SDLINPUT_H #define GUI_SDLINPUT_H +#include "enums/input/keyvalue.h" + #include "input/keyinput.h" #include @@ -139,7 +141,227 @@ class SDLInput final * @return a key value. * @see Key */ - static int convertKeyCharacter(const SDL_Event &event) A_WARN_UNUSED; + constexpr2 static int convertKeyCharacter(const SDL_Event &event) + A_WARN_UNUSED + { + const SDL_keysym keysym = event.key.keysym; +#ifdef USE_SDL2 + int value = keysym.scancode; +#else // USE_SDL2 + + int value = keysym.unicode; +#endif // USE_SDL2 + + PRAGMA45(GCC diagnostic push) + PRAGMA45(GCC diagnostic ignored "-Wswitch-enum") + switch (keysym.sym) + { + case SDLK_TAB: + value = KeyValue::TAB; + break; + case SDLK_LALT: + value = KeyValue::LEFT_ALT; + break; + case SDLK_RALT: + value = KeyValue::RIGHT_ALT; + break; + case SDLK_LSHIFT: + value = KeyValue::LEFT_SHIFT; + break; + case SDLK_RSHIFT: + value = KeyValue::RIGHT_SHIFT; + break; + case SDLK_LCTRL: + value = KeyValue::LEFT_CONTROL; + break; + case SDLK_RCTRL: + value = KeyValue::RIGHT_CONTROL; + break; + case SDLK_BACKSPACE: + value = KeyValue::BACKSPACE; + break; + case SDLK_PAUSE: + value = KeyValue::PAUSE; + break; + case SDLK_SPACE: + // Special characters like ~ (tilde) ends up + // with the keysym.sym SDLK_SPACE which + // without this check would be lost. The check + // is only valid on key down events in SDL. +#ifndef USE_SDL2 + if (event.type == SDL_KEYUP || + keysym.unicode == ' ') +#endif // USE_SDL2 + { + value = KeyValue::SPACE; + } + break; + case SDLK_ESCAPE: +#ifdef USE_SDL2 + case SDLK_AC_BACK: +#endif // USE_SDL2 + value = KeyValue::ESCAPE; + break; + case SDLK_DELETE: + value = KeyValue::DELETE_; + break; + case SDLK_INSERT: + value = KeyValue::INSERT; + break; + case SDLK_HOME: + value = KeyValue::HOME; + break; + case SDLK_END: + value = KeyValue::END; + break; + case SDLK_PAGEUP: + value = KeyValue::PAGE_UP; + break; + case SDLK_PRINT: + value = KeyValue::PRINT_SCREEN; + break; + case SDLK_PAGEDOWN: + value = KeyValue::PAGE_DOWN; + break; + case SDLK_F1: + value = KeyValue::F1; + break; + case SDLK_F2: + value = KeyValue::F2; + break; + case SDLK_F3: + value = KeyValue::F3; + break; + case SDLK_F4: + value = KeyValue::F4; + break; + case SDLK_F5: + value = KeyValue::F5; + break; + case SDLK_F6: + value = KeyValue::F6; + break; + case SDLK_F7: + value = KeyValue::F7; + break; + case SDLK_F8: + value = KeyValue::F8; + break; + case SDLK_F9: + value = KeyValue::F9; + break; + case SDLK_F10: + value = KeyValue::F10; + break; + case SDLK_F11: + value = KeyValue::F11; + break; + case SDLK_F12: + value = KeyValue::F12; + break; + case SDLK_F13: + value = KeyValue::F13; + break; + case SDLK_F14: + value = KeyValue::F14; + break; + case SDLK_F15: + value = KeyValue::F15; + break; + case SDLK_NUMLOCK: + value = KeyValue::NUM_LOCK; + break; + case SDLK_CAPSLOCK: + value = KeyValue::CAPS_LOCK; + break; + case SDLK_SCROLLOCK: + value = KeyValue::SCROLL_LOCK; + break; + case SDLK_RMETA: + value = KeyValue::RIGHT_META; + break; + case SDLK_LMETA: + value = KeyValue::LEFT_META; + break; +#ifndef USE_SDL2 + case SDLK_LSUPER: + value = KeyValue::LEFT_SUPER; + break; + case SDLK_RSUPER: + value = KeyValue::RIGHT_SUPER; + break; +#endif // USE_SDL2 + + case SDLK_MODE: + value = KeyValue::ALT_GR; + break; + case SDLK_UP: + value = KeyValue::UP; + break; + case SDLK_DOWN: + value = KeyValue::DOWN; + break; + case SDLK_LEFT: + value = KeyValue::LEFT; + break; + case SDLK_RIGHT: + value = KeyValue::RIGHT; + break; + case SDLK_RETURN: + value = KeyValue::ENTER; + break; + case SDLK_KP_ENTER: + value = KeyValue::ENTER; + break; + + default: + break; + } + PRAGMA45(GCC diagnostic pop) + + if (!(CAST_U32(keysym.mod) & KMOD_NUM)) + { + PRAGMA45(GCC diagnostic push) + PRAGMA45(GCC diagnostic ignored "-Wswitch-enum") + switch (keysym.sym) + { + case SDLK_KP0: + value = KeyValue::INSERT; + break; + case SDLK_KP1: + value = KeyValue::END; + break; + case SDLK_KP2: + value = KeyValue::DOWN; + break; + case SDLK_KP3: + value = KeyValue::PAGE_DOWN; + break; + case SDLK_KP4: + value = KeyValue::LEFT; + break; + case SDLK_KP5: + value = 0; + break; + case SDLK_KP6: + value = KeyValue::RIGHT; + break; + case SDLK_KP7: + value = KeyValue::HOME; + break; + case SDLK_KP8: + value = KeyValue::UP; + break; + case SDLK_KP9: + value = KeyValue::PAGE_UP; + break; + default: + break; + } + PRAGMA45(GCC diagnostic pop) + } + return value; + } static void convertKeyEventToKey(const SDL_Event &event, KeyInput &keyInput); -- cgit v1.2.3-70-g09d2