diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-04-18 02:58:23 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-04-18 02:58:23 +0300 |
commit | 23f87c10db7e6b149e9e1f351e1a82516c545df7 (patch) | |
tree | a64be1829568f16108c0a39c4a9a5e3957466831 /src/inputmanager.cpp | |
parent | 0f82a8b4a599fbeb2663680deb406bbc15a67576 (diff) | |
download | manaplus-23f87c10db7e6b149e9e1f351e1a82516c545df7.tar.gz manaplus-23f87c10db7e6b149e9e1f351e1a82516c545df7.tar.bz2 manaplus-23f87c10db7e6b149e9e1f351e1a82516c545df7.tar.xz manaplus-23f87c10db7e6b149e9e1f351e1a82516c545df7.zip |
First step for dehardcode input handling in widgets.
Now widgets can check for input event.
Diffstat (limited to 'src/inputmanager.cpp')
-rw-r--r-- | src/inputmanager.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/inputmanager.cpp b/src/inputmanager.cpp index 283b07d6c..fcb40d4ea 100644 --- a/src/inputmanager.cpp +++ b/src/inputmanager.cpp @@ -590,15 +590,16 @@ bool InputManager::invokeKey(const KeyData *key, int keyNum) return false; } -void InputManager::updateKeyActionMap(KeyToActionMap &actionMap, int type) +void InputManager::updateKeyActionMap(KeyToActionMap &actionMap, + KeyToIdMap &idMap, int type) { actionMap.clear(); for (size_t i = 0; i < Input::KEY_TOTAL; i ++) { + KeyFunction &key = mKey[i]; if (keyData[i].action) { - KeyFunction &key = mKey[i]; for (size_t i2 = 0; i2 < KeyFunctionSize; i2 ++) { const KeyItem &ki = key.values[i2]; @@ -606,6 +607,15 @@ void InputManager::updateKeyActionMap(KeyToActionMap &actionMap, int type) actionMap[ki.value].push_back(i); } } + if (keyData[i].configField && (keyData[i].grp & Input::GRP_GUI)) + { + for (size_t i2 = 0; i2 < KeyFunctionSize; i2 ++) + { + const KeyItem &ki = key.values[i2]; + if (ki.type == type && ki.value != -1) + idMap[ki.value] = i; + } + } } keySorter.keys = &keyData[0]; @@ -657,3 +667,15 @@ int InputManager::getKeyIndex(int value, int grp, int type) const } return Input::KEY_NO_VALUE; } + +int InputManager::getActionByKey(const SDL_Event &event) +{ + // for now support only keyboard events + if (event.type == SDL_KEYDOWN) + { + int idx = keyboard.getActionId(event); + if (idx >= 0 && checkKey(&keyData[idx])) + return idx; + } + return -1; +} |