summaryrefslogtreecommitdiff
path: root/src/input_common/mouse/mouse_poller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/mouse/mouse_poller.cpp')
-rw-r--r--src/input_common/mouse/mouse_poller.cpp33
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
14class MouseButton final : public Input::ButtonDevice { 15class MouseButton final : public Input::ButtonDevice {
15public: 16public:
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
23private: 32private:
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
28MouseButtonFactory::MouseButtonFactory(std::shared_ptr<MouseInput::Mouse> mouse_input_) 38MouseButtonFactory::MouseButtonFactory(std::shared_ptr<MouseInput::Mouse> mouse_input_)
@@ -31,8 +41,9 @@ MouseButtonFactory::MouseButtonFactory(std::shared_ptr<MouseInput::Mouse> mouse_
31std::unique_ptr<Input::ButtonDevice> MouseButtonFactory::Create( 41std::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
38Common::ParamPackage MouseButtonFactory::GetNextInput() const { 49Common::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
109private: 130private:
110 const u32 button; 131 const u32 button;
111 const u32 axis_x; 132 const u32 axis_x;