diff options
author | 2016-04-27 17:57:45 +0200 | |
---|---|---|
committer | 2016-04-27 17:57:45 +0200 | |
commit | 94c7dd996bfb9123425c87f2d149018d371dded7 (patch) | |
tree | 3ec39fc58485a796905539867280c0f8ae13cf65 /3rdparty/bgfx/examples/common/entry/entry_sdl.cpp | |
parent | 29d7699569f10ce9077cfebe4e7045eb5226f4ff (diff) |
Update BGFX and BX (nw)
Diffstat (limited to '3rdparty/bgfx/examples/common/entry/entry_sdl.cpp')
-rw-r--r-- | 3rdparty/bgfx/examples/common/entry/entry_sdl.cpp | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp index 07193b83ca7..0e4f49424e2 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp @@ -49,6 +49,25 @@ namespace entry return modifiers; } + static uint8_t translateKeyModifierPress(uint16_t _key) + { + uint8_t modifier; + switch (_key) + { + case SDL_SCANCODE_LALT: { modifier = Modifier::LeftAlt; } break; + case SDL_SCANCODE_RALT: { modifier = Modifier::RightAlt; } break; + case SDL_SCANCODE_LCTRL: { modifier = Modifier::LeftCtrl; } break; + case SDL_SCANCODE_RCTRL: { modifier = Modifier::RightCtrl; } break; + case SDL_SCANCODE_LSHIFT: { modifier = Modifier::LeftShift; } break; + case SDL_SCANCODE_RSHIFT: { modifier = Modifier::RightShift; } break; + case SDL_SCANCODE_LGUI: { modifier = Modifier::LeftMeta; } break; + case SDL_SCANCODE_RGUI: { modifier = Modifier::RightMeta; } break; + default: { modifier = 0; } break; + } + + return modifier; + } + static uint8_t s_translateKey[256]; static void initTranslateKey(uint16_t _sdl, Key::Enum _key) @@ -307,8 +326,15 @@ namespace entry initTranslateKey(SDL_SCANCODE_END, Key::End); initTranslateKey(SDL_SCANCODE_PRINTSCREEN, Key::Print); initTranslateKey(SDL_SCANCODE_KP_PLUS, Key::Plus); + initTranslateKey(SDL_SCANCODE_EQUALS, Key::Plus); initTranslateKey(SDL_SCANCODE_KP_MINUS, Key::Minus); + initTranslateKey(SDL_SCANCODE_MINUS, Key::Minus); initTranslateKey(SDL_SCANCODE_GRAVE, Key::Tilde); + initTranslateKey(SDL_SCANCODE_KP_COMMA, Key::Comma); + initTranslateKey(SDL_SCANCODE_COMMA, Key::Comma); + initTranslateKey(SDL_SCANCODE_KP_PERIOD, Key::Period); + initTranslateKey(SDL_SCANCODE_PERIOD, Key::Period); + initTranslateKey(SDL_SCANCODE_SLASH, Key::Slash); initTranslateKey(SDL_SCANCODE_F1, Key::F1); initTranslateKey(SDL_SCANCODE_F2, Key::F2); initTranslateKey(SDL_SCANCODE_F3, Key::F3); @@ -532,29 +558,43 @@ namespace entry uint8_t modifiers = translateKeyModifiers(kev.keysym.mod); Key::Enum key = translateKey(kev.keysym.scancode); - // TODO: These keys are not captured by SDL_TEXTINPUT. Should be probably handled by SDL_TEXTEDITING. This is a workaround for now. - if (key == 1) // Escape +#if 0 + DBG("SDL scancode %d, key %d, name %s, key name %s" + , kev.keysym.scancode + , key + , SDL_GetScancodeName(kev.keysym.scancode) + , SDL_GetKeyName(kev.keysym.scancode) + ); +#endif // 0 + + /// If you only press (e.g.) 'shift' and nothing else, then key == 'shift', modifier == 0. + /// Further along, pressing 'shift' + 'ctrl' would be: key == 'shift', modifier == 'ctrl. + if (0 == key && 0 == modifiers) + { + modifiers = translateKeyModifierPress(kev.keysym.scancode); + } + + /// TODO: These keys are not captured by SDL_TEXTINPUT. Should be probably handled by SDL_TEXTEDITING. This is a workaround for now. + if (Key::Esc == key) { uint8_t pressedChar[4]; pressedChar[0] = 0x1b; m_eventQueue.postCharEvent(handle, 1, pressedChar); } - else if (key == 2) // Enter + else if (Key::Return == key) { uint8_t pressedChar[4]; pressedChar[0] = 0x0d; m_eventQueue.postCharEvent(handle, 1, pressedChar); } - else if (key == 5) // Backspace + else if (Key::Backspace == key) { uint8_t pressedChar[4]; pressedChar[0] = 0x08; m_eventQueue.postCharEvent(handle, 1, pressedChar); } - else - { - m_eventQueue.postKeyEvent(handle, key, modifiers, kev.state == SDL_PRESSED); - } + + m_eventQueue.postKeyEvent(handle, key, modifiers, kev.state == SDL_PRESSED); } } break; |