From 41e94b7b99f83a45633d555160b31b50f021c350 Mon Sep 17 00:00:00 2001 From: german77 Date: Sat, 6 Mar 2021 13:27:02 -0600 Subject: Enable mouse toggle buttons --- src/input_common/mouse/mouse_input.cpp | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/input_common/mouse/mouse_input.cpp') diff --git a/src/input_common/mouse/mouse_input.cpp b/src/input_common/mouse/mouse_input.cpp index b864d26f2..6818d5eee 100644 --- a/src/input_common/mouse/mouse_input.cpp +++ b/src/input_common/mouse/mouse_input.cpp @@ -157,6 +157,42 @@ void Mouse::EndConfiguration() { configuring = false; } +bool Mouse::ToggleButton(std::size_t button_) { + if (button_ >= mouse_info.size()) { + return false; + } + const auto button = 1U << button_; + const bool button_state = (toggle_buttons & button) != 0; + const bool button_lock = (lock_buttons & button) != 0; + + if (button_lock) { + return button_state; + } + + lock_buttons |= static_cast(button); + + if (button_state) { + toggle_buttons &= static_cast(0xFF - button); + } else { + toggle_buttons |= static_cast(button); + } + + return !button_state; +} + +bool Mouse::UnlockButton(std::size_t button_) { + if (button_ >= mouse_info.size()) { + return false; + } + + const auto button = 1U << button_; + const bool button_state = (toggle_buttons & button) != 0; + + lock_buttons &= static_cast(0xFF - button); + + return button_state; +} + Common::SPSCQueue& Mouse::GetMouseQueue() { return mouse_queue; } -- cgit v1.2.3