mirror of https://github.com/RPCS3/rpcs3.git
Use unordered map to store keyboard keys
This potentially reduces latency ever so slightly.
This commit is contained in:
parent
b18a97e777
commit
dcb8f21b2b
|
@ -46,17 +46,12 @@ void KeyboardHandlerBase::Key(u32 code, bool pressed, const std::u32string& key)
|
||||||
|
|
||||||
for (Keyboard& keyboard : m_keyboards)
|
for (Keyboard& keyboard : m_keyboards)
|
||||||
{
|
{
|
||||||
bool found_key = false;
|
|
||||||
|
|
||||||
KbData& data = keyboard.m_data;
|
KbData& data = keyboard.m_data;
|
||||||
KbConfig& config = keyboard.m_config;
|
const KbConfig& config = keyboard.m_config;
|
||||||
|
|
||||||
for (const KbButton& button : keyboard.m_buttons)
|
if (auto it = keyboard.m_keys.find(code); it != keyboard.m_keys.end())
|
||||||
{
|
{
|
||||||
if (button.m_keyCode != code)
|
KbButton& button = it->second;
|
||||||
continue;
|
|
||||||
|
|
||||||
found_key = true;
|
|
||||||
|
|
||||||
u16 kcode = CELL_KEYC_NO_EVENT;
|
u16 kcode = CELL_KEYC_NO_EVENT;
|
||||||
bool is_meta_key = IsMetaKey(code);
|
bool is_meta_key = IsMetaKey(code);
|
||||||
|
@ -156,8 +151,7 @@ void KeyboardHandlerBase::Key(u32 code, bool pressed, const std::u32string& key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (!key.empty())
|
||||||
if (!found_key && !key.empty())
|
|
||||||
{
|
{
|
||||||
if (pressed)
|
if (pressed)
|
||||||
{
|
{
|
||||||
|
@ -205,14 +199,14 @@ void KeyboardHandlerBase::ReleaseAllKeys()
|
||||||
{
|
{
|
||||||
for (Keyboard& keyboard : m_keyboards)
|
for (Keyboard& keyboard : m_keyboards)
|
||||||
{
|
{
|
||||||
for (const KbButton& button : keyboard.m_buttons)
|
for (const auto& [key_code, button] : keyboard.m_keys)
|
||||||
{
|
{
|
||||||
Key(button.m_keyCode, false, {});
|
Key(button.m_keyCode, false, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const std::u32string& key : keyboard.m_extra_data.pressed_keys)
|
for (const std::u32string& key : keyboard.m_extra_data.pressed_keys)
|
||||||
{
|
{
|
||||||
Key(0, false, key);
|
Key(CELL_KEYC_NO_EVENT, false, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboard.m_extra_data.pressed_keys.clear();
|
keyboard.m_extra_data.pressed_keys.clear();
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "util/init_mutex.hpp"
|
#include "util/init_mutex.hpp"
|
||||||
|
|
||||||
|
@ -71,7 +72,7 @@ struct Keyboard
|
||||||
KbData m_data{};
|
KbData m_data{};
|
||||||
KbExtraData m_extra_data{};
|
KbExtraData m_extra_data{};
|
||||||
KbConfig m_config{};
|
KbConfig m_config{};
|
||||||
std::vector<KbButton> m_buttons;
|
std::unordered_map<u32, KbButton> m_keys;
|
||||||
};
|
};
|
||||||
|
|
||||||
class KeyboardHandlerBase
|
class KeyboardHandlerBase
|
||||||
|
@ -95,7 +96,6 @@ public:
|
||||||
|
|
||||||
KbInfo& GetInfo() { return m_info; }
|
KbInfo& GetInfo() { return m_info; }
|
||||||
std::vector<Keyboard>& GetKeyboards() { return m_keyboards; }
|
std::vector<Keyboard>& GetKeyboards() { return m_keyboards; }
|
||||||
std::vector<KbButton>& GetButtons(const u32 keyboard) { return m_keyboards[keyboard].m_buttons; }
|
|
||||||
KbData& GetData(const u32 keyboard) { return m_keyboards[keyboard].m_data; }
|
KbData& GetData(const u32 keyboard) { return m_keyboards[keyboard].m_data; }
|
||||||
KbExtraData& GetExtraData(const u32 keyboard) { return m_keyboards[keyboard].m_extra_data; }
|
KbExtraData& GetExtraData(const u32 keyboard) { return m_keyboards[keyboard].m_extra_data; }
|
||||||
KbConfig& GetConfig(const u32 keyboard) { return m_keyboards[keyboard].m_config; }
|
KbConfig& GetConfig(const u32 keyboard) { return m_keyboards[keyboard].m_config; }
|
||||||
|
|
|
@ -173,7 +173,7 @@ void basic_keyboard_handler::LoadSettings()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<KbButton>& buttons = m_keyboards[0].m_buttons;
|
std::vector<KbButton> buttons;
|
||||||
|
|
||||||
// Meta Keys
|
// Meta Keys
|
||||||
//buttons.emplace_back(Qt::Key_Control, CELL_KB_MKEY_L_CTRL);
|
//buttons.emplace_back(Qt::Key_Control, CELL_KB_MKEY_L_CTRL);
|
||||||
|
@ -310,4 +310,12 @@ void basic_keyboard_handler::LoadSettings()
|
||||||
buttons.emplace_back(Qt::Key_ssharp, CELL_KEYC_SSHARP);
|
buttons.emplace_back(Qt::Key_ssharp, CELL_KEYC_SSHARP);
|
||||||
buttons.emplace_back(Qt::Key_QuoteLeft, CELL_KEYC_BACK_QUOTE);
|
buttons.emplace_back(Qt::Key_QuoteLeft, CELL_KEYC_BACK_QUOTE);
|
||||||
buttons.emplace_back(Qt::Key_acute, CELL_KEYC_BACK_QUOTE);
|
buttons.emplace_back(Qt::Key_acute, CELL_KEYC_BACK_QUOTE);
|
||||||
|
|
||||||
|
// Fill our map
|
||||||
|
auto& keys = m_keyboards[0].m_keys;
|
||||||
|
|
||||||
|
for (const KbButton& button : buttons)
|
||||||
|
{
|
||||||
|
ensure(keys.try_emplace(button.m_keyCode, button).second);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue