diff options
Diffstat (limited to 'Source/Core/VideoCommon/OnScreenUI.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/OnScreenUI.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/Source/Core/VideoCommon/OnScreenUI.cpp b/Source/Core/VideoCommon/OnScreenUI.cpp index 50e191a7ae..1919149629 100644 --- a/Source/Core/VideoCommon/OnScreenUI.cpp +++ b/Source/Core/VideoCommon/OnScreenUI.cpp @@ -356,35 +356,37 @@ void OnScreenUI::SetScale(float backbuffer_scale) } void OnScreenUI::SetKeyMap(const DolphinKeyMap& key_map) { - // Right now this is a 1:1 mapping. But might not be true later static constexpr DolphinKeyMap dolphin_to_imgui_map = { ImGuiKey_Tab, ImGuiKey_LeftArrow, ImGuiKey_RightArrow, ImGuiKey_UpArrow, ImGuiKey_DownArrow, ImGuiKey_PageUp, ImGuiKey_PageDown, ImGuiKey_Home, ImGuiKey_End, ImGuiKey_Insert, ImGuiKey_Delete, ImGuiKey_Backspace, - ImGuiKey_Space, ImGuiKey_Enter, ImGuiKey_Escape, ImGuiKey_KeyPadEnter, + ImGuiKey_Space, ImGuiKey_Enter, ImGuiKey_Escape, ImGuiKey_KeypadEnter, ImGuiKey_A, ImGuiKey_C, ImGuiKey_V, ImGuiKey_X, ImGuiKey_Y, ImGuiKey_Z, }; - static_assert(dolphin_to_imgui_map.size() == ImGuiKey_COUNT); // Fail if ImGui adds keys auto lock = GetImGuiLock(); if (!ImGui::GetCurrentContext()) return; + m_dolphin_to_imgui_map.clear(); for (int dolphin_key = 0; dolphin_key <= static_cast<int>(DolphinKey::Z); dolphin_key++) { - int imgui_key = dolphin_to_imgui_map[DolphinKey(dolphin_key)]; + const int imgui_key = dolphin_to_imgui_map[DolphinKey(dolphin_key)]; if (imgui_key >= 0) - ImGui::GetIO().KeyMap[imgui_key] = (key_map[DolphinKey(dolphin_key)] & 0x1FF); + { + const int mapped_key = key_map[DolphinKey(dolphin_key)]; + m_dolphin_to_imgui_map[mapped_key & 0x1FF] = imgui_key; + } } } void OnScreenUI::SetKey(u32 key, bool is_down, const char* chars) { auto lock = GetImGuiLock(); - if (key < std::size(ImGui::GetIO().KeysDown)) - ImGui::GetIO().KeysDown[key] = is_down; + if (auto iter = m_dolphin_to_imgui_map.find(key); iter != m_dolphin_to_imgui_map.end()) + ImGui::GetIO().AddKeyEvent((ImGuiKey)iter->second, is_down); if (chars) ImGui::GetIO().AddInputCharactersUTF8(chars); |
