diff options
Diffstat (limited to 'src/input_common/mouse/mouse_poller.cpp')
| -rw-r--r-- | src/input_common/mouse/mouse_poller.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/input_common/mouse/mouse_poller.cpp b/src/input_common/mouse/mouse_poller.cpp index 508eb0c7d..0e1db54fb 100644 --- a/src/input_common/mouse/mouse_poller.cpp +++ b/src/input_common/mouse/mouse_poller.cpp | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | #include <utility> | 6 | #include <utility> |
| 7 | 7 | ||
| 8 | #include "common/threadsafe_queue.h" | 8 | #include "common/threadsafe_queue.h" |
| 9 | #include "core/settings.h" | ||
| 9 | #include "input_common/mouse/mouse_input.h" | 10 | #include "input_common/mouse/mouse_input.h" |
| 10 | #include "input_common/mouse/mouse_poller.h" | 11 | #include "input_common/mouse/mouse_poller.h" |
| 11 | 12 | ||
| @@ -13,16 +14,25 @@ namespace InputCommon { | |||
| 13 | 14 | ||
| 14 | class MouseButton final : public Input::ButtonDevice { | 15 | class MouseButton final : public Input::ButtonDevice { |
| 15 | public: | 16 | public: |
| 16 | explicit MouseButton(u32 button_, const MouseInput::Mouse* mouse_input_) | 17 | explicit MouseButton(u32 button_, bool toggle_, MouseInput::Mouse* mouse_input_) |
| 17 | : button(button_), mouse_input(mouse_input_) {} | 18 | : button(button_), toggle(toggle_), mouse_input(mouse_input_) {} |
| 18 | 19 | ||
| 19 | bool GetStatus() const override { | 20 | bool GetStatus() const override { |
| 20 | return mouse_input->GetMouseState(button).pressed; | 21 | const bool button_state = mouse_input->GetMouseState(button).pressed; |
| 22 | if (!toggle) { | ||
| 23 | return button_state; | ||
| 24 | } | ||
| 25 | |||
| 26 | if (button_state) { | ||
| 27 | return mouse_input->ToggleButton(button); | ||
| 28 | } | ||
| 29 | return mouse_input->UnlockButton(button); | ||
| 21 | } | 30 | } |
| 22 | 31 | ||
| 23 | private: | 32 | private: |
| 24 | const u32 button; | 33 | const u32 button; |
| 25 | const MouseInput::Mouse* mouse_input; | 34 | const bool toggle; |
| 35 | MouseInput::Mouse* mouse_input; | ||
| 26 | }; | 36 | }; |
| 27 | 37 | ||
| 28 | MouseButtonFactory::MouseButtonFactory(std::shared_ptr<MouseInput::Mouse> mouse_input_) | 38 | MouseButtonFactory::MouseButtonFactory(std::shared_ptr<MouseInput::Mouse> mouse_input_) |
| @@ -31,8 +41,9 @@ MouseButtonFactory::MouseButtonFactory(std::shared_ptr<MouseInput::Mouse> mouse_ | |||
| 31 | std::unique_ptr<Input::ButtonDevice> MouseButtonFactory::Create( | 41 | std::unique_ptr<Input::ButtonDevice> MouseButtonFactory::Create( |
| 32 | const Common::ParamPackage& params) { | 42 | const Common::ParamPackage& params) { |
| 33 | const auto button_id = params.Get("button", 0); | 43 | const auto button_id = params.Get("button", 0); |
| 44 | const auto toggle = params.Get("toggle", false); | ||
| 34 | 45 | ||
| 35 | return std::make_unique<MouseButton>(button_id, mouse_input.get()); | 46 | return std::make_unique<MouseButton>(button_id, toggle, mouse_input.get()); |
| 36 | } | 47 | } |
| 37 | 48 | ||
| 38 | Common::ParamPackage MouseButtonFactory::GetNextInput() const { | 49 | Common::ParamPackage MouseButtonFactory::GetNextInput() const { |
| @@ -71,7 +82,7 @@ public: | |||
| 71 | std::lock_guard lock{mutex}; | 82 | std::lock_guard lock{mutex}; |
| 72 | const auto axis_value = | 83 | const auto axis_value = |
| 73 | static_cast<float>(mouse_input->GetMouseState(button).axis.at(axis)); | 84 | static_cast<float>(mouse_input->GetMouseState(button).axis.at(axis)); |
| 74 | return axis_value / (100.0f * range); | 85 | return axis_value * Settings::values.mouse_panning_sensitivity / (100.0f * range); |
| 75 | } | 86 | } |
| 76 | 87 | ||
| 77 | std::pair<float, float> GetAnalog(u32 analog_axis_x, u32 analog_axis_y) const { | 88 | std::pair<float, float> GetAnalog(u32 analog_axis_x, u32 analog_axis_y) const { |
| @@ -106,6 +117,16 @@ public: | |||
| 106 | return {0.0f, 0.0f}; | 117 | return {0.0f, 0.0f}; |
| 107 | } | 118 | } |
| 108 | 119 | ||
| 120 | std::tuple<float, float> GetRawStatus() const override { | ||
| 121 | const float x = GetAxis(axis_x); | ||
| 122 | const float y = GetAxis(axis_y); | ||
| 123 | return {x, y}; | ||
| 124 | } | ||
| 125 | |||
| 126 | Input::AnalogProperties GetAnalogProperties() const override { | ||
| 127 | return {deadzone, range, 0.5f}; | ||
| 128 | } | ||
| 129 | |||
| 109 | private: | 130 | private: |
| 110 | const u32 button; | 131 | const u32 button; |
| 111 | const u32 axis_x; | 132 | const u32 axis_x; |