Skip to content

Commit 099017c

Browse files
Merge pull request #1633 from KAlO2/android_event
fix: android platform MotionEvent and KeyEvent handling
2 parents 1c7e7b3 + a633d54 commit 099017c

File tree

2 files changed

+194
-142
lines changed

2 files changed

+194
-142
lines changed

include/vsg/platform/android/Android_Window.h

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)