@@ -29,27 +29,33 @@ namespace vsgAndroid
2929 public:
3030 KeyboardMap ();
3131
32- using AKeyCodeToKeySymbolMap = std::map <uint32_t , vsg::KeySymbol>;
32+ using AKeyCodeToKeySymbolMap = std::unordered_map <uint32_t , vsg::KeySymbol>;
3333
34- bool getKeySymbol (uint32_t keycode, uint32_t metastate, vsg::KeySymbol& keySymbol, vsg::KeySymbol& modifiedKeySymbol, vsg::KeyModifier& keyModifier)
34+ // / This method should be called after the APP_CMD_INIT_WINDOW message.
35+ static void initializeKeyCharacterMap (void * vm);
36+
37+ // / This method should be called after the APP_CMD_DESTROY message.
38+ static void releaseKeyCharacterMap ();
39+
40+ static int32_t getUnicodeChar (int32_t keyCode, int32_t metaState);
41+
42+ bool getKeySymbol (int32_t keyCode, int32_t metaState, vsg::KeySymbol& keySymbol, vsg::KeySymbol& modifiedKeySymbol, vsg::KeyModifier& keyModifier) const
3543 {
36- auto itr = _keycodeMap.find (keycode );
44+ auto itr = _keycodeMap.find (keyCode );
3745 if (itr == _keycodeMap.end ()) return false ;
3846
3947 keySymbol = itr->second ;
40- modifiedKeySymbol = keySymbol;
4148
4249 uint16_t modifierMask = 0 ;
4350
44- if (metastate & AMETA_ALT_ON) modifierMask |= vsg::KeyModifier::MODKEY_Alt;
45- if (metastate & AMETA_CTRL_ON) modifierMask |= vsg::KeyModifier::MODKEY_Control;
46- if (metastate & AMETA_SHIFT_ON) modifierMask |= vsg::KeyModifier::MODKEY_Shift;
47- if (metastate & AMETA_CAPS_LOCK_ON) modifierMask |= vsg::KeyModifier::MODKEY_CapsLock;
48- if (metastate & AMETA_NUM_LOCK_ON) modifierMask |= vsg::KeyModifier::MODKEY_NumLock;
51+ if (metaState & AMETA_ALT_ON) modifierMask |= vsg::KeyModifier::MODKEY_Alt;
52+ if (metaState & AMETA_CTRL_ON) modifierMask |= vsg::KeyModifier::MODKEY_Control;
53+ if (metaState & AMETA_SHIFT_ON) modifierMask |= vsg::KeyModifier::MODKEY_Shift;
54+ if (metaState & AMETA_CAPS_LOCK_ON) modifierMask |= vsg::KeyModifier::MODKEY_CapsLock;
55+ if (metaState & AMETA_NUM_LOCK_ON) modifierMask |= vsg::KeyModifier::MODKEY_NumLock;
4956
5057 keyModifier = (vsg::KeyModifier)modifierMask;
51-
52- // need to get the modified key somehow but seems we may need to talk to java for that :(
58+ modifiedKeySymbol = static_cast <vsg::KeySymbol>(getUnicodeChar (keyCode, metaState));
5359
5460 return true ;
5561 }
@@ -99,7 +105,7 @@ namespace vsgAndroid
99105
100106 ANativeWindow* _window;
101107
102- int64_t _first_android_timestamp = 0 ;
108+ int64_t _uptimeMs = 0 ;
103109 vsg::clock::time_point _first_android_time_point;
104110
105111 vsg::ref_ptr<KeyboardMap> _keyboard;
0 commit comments