summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
diff options
context:
space:
mode:
author Branimir Karadžić <branimirkaradzic@gmail.com>2016-04-27 17:57:45 +0200
committer Miodrag Milanovic <mmicko@gmail.com>2016-04-27 17:57:45 +0200
commit94c7dd996bfb9123425c87f2d149018d371dded7 (patch)
tree3ec39fc58485a796905539867280c0f8ae13cf65 /3rdparty/bgfx/examples/common/entry/entry_sdl.cpp
parent29d7699569f10ce9077cfebe4e7045eb5226f4ff (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.cpp56
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;