diff options
author | german <german@thesoftwareartisans.com> | 2021-03-06 02:21:04 +0100 |
---|---|---|
committer | german <german@thesoftwareartisans.com> | 2021-03-06 02:21:04 +0100 |
commit | 1f228c51ca2c510622f4204937f90c7f2bbc7bf6 (patch) | |
tree | bb29a416ef52d308c38adb16b4ee7d0fe55fe391 /src/input_common | |
parent | Merge pull request #6034 from Morph1984/mbedtls (diff) | |
download | yuzu-1f228c51ca2c510622f4204937f90c7f2bbc7bf6.tar yuzu-1f228c51ca2c510622f4204937f90c7f2bbc7bf6.tar.gz yuzu-1f228c51ca2c510622f4204937f90c7f2bbc7bf6.tar.bz2 yuzu-1f228c51ca2c510622f4204937f90c7f2bbc7bf6.tar.lz yuzu-1f228c51ca2c510622f4204937f90c7f2bbc7bf6.tar.xz yuzu-1f228c51ca2c510622f4204937f90c7f2bbc7bf6.tar.zst yuzu-1f228c51ca2c510622f4204937f90c7f2bbc7bf6.zip |
Diffstat (limited to 'src/input_common')
-rw-r--r-- | src/input_common/keyboard.cpp | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/input_common/keyboard.cpp b/src/input_common/keyboard.cpp index 24a6f7a33..fa0e60ac1 100644 --- a/src/input_common/keyboard.cpp +++ b/src/input_common/keyboard.cpp @@ -12,20 +12,37 @@ namespace InputCommon { class KeyButton final : public Input::ButtonDevice { public: - explicit KeyButton(std::shared_ptr<KeyButtonList> key_button_list_) - : key_button_list(std::move(key_button_list_)) {} + explicit KeyButton(std::shared_ptr<KeyButtonList> key_button_list_, bool toggle_) + : key_button_list(std::move(key_button_list_)), toggle(toggle_) {} ~KeyButton() override; bool GetStatus() const override { + if (toggle) { + return toggled_status.load(); + } return status.load(); } + void ToggleButton() { + if (!lock) { + lock = true; + toggled_status.store(!toggled_status.load()); + } + } + + void UnlockButton() { + lock = false; + } + friend class KeyButtonList; private: std::shared_ptr<KeyButtonList> key_button_list; std::atomic<bool> status{false}; + std::atomic<bool> toggled_status{false}; + bool lock = {}; + const bool toggle; }; struct KeyButtonPair { @@ -51,6 +68,11 @@ public: for (const KeyButtonPair& pair : list) { if (pair.key_code == key_code) { pair.key_button->status.store(pressed); + if (pressed) { + pair.key_button->ToggleButton(); + } else { + pair.key_button->UnlockButton(); + } } } } @@ -75,7 +97,8 @@ KeyButton::~KeyButton() { std::unique_ptr<Input::ButtonDevice> Keyboard::Create(const Common::ParamPackage& params) { const int key_code = params.Get("code", 0); - std::unique_ptr<KeyButton> button = std::make_unique<KeyButton>(key_button_list); + const bool toggle = params.Get("toggle", false); + std::unique_ptr<KeyButton> button = std::make_unique<KeyButton>(key_button_list, toggle); key_button_list->AddKeyButton(key_code, button.get()); return button; } |