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.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/input_common/mouse/mouse_poller.cpp b/src/input_common/mouse/mouse_poller.cpp
index 7445ad3ad..508eb0c7d 100644
--- a/src/input_common/mouse/mouse_poller.cpp
+++ b/src/input_common/mouse/mouse_poller.cpp
@@ -62,10 +62,10 @@ void MouseButtonFactory::EndConfiguration() {
62 62
63class MouseAnalog final : public Input::AnalogDevice { 63class MouseAnalog final : public Input::AnalogDevice {
64public: 64public:
65 explicit MouseAnalog(u32 port_, u32 axis_x_, u32 axis_y_, float deadzone_, float range_, 65 explicit MouseAnalog(u32 port_, u32 axis_x_, u32 axis_y_, bool invert_x_, bool invert_y_,
66 const MouseInput::Mouse* mouse_input_) 66 float deadzone_, float range_, const MouseInput::Mouse* mouse_input_)
67 : button(port_), axis_x(axis_x_), axis_y(axis_y_), deadzone(deadzone_), range(range_), 67 : button(port_), axis_x(axis_x_), axis_y(axis_y_), invert_x(invert_x_), invert_y(invert_y_),
68 mouse_input(mouse_input_) {} 68 deadzone(deadzone_), range(range_), mouse_input(mouse_input_) {}
69 69
70 float GetAxis(u32 axis) const { 70 float GetAxis(u32 axis) const {
71 std::lock_guard lock{mutex}; 71 std::lock_guard lock{mutex};
@@ -77,6 +77,12 @@ public:
77 std::pair<float, float> GetAnalog(u32 analog_axis_x, u32 analog_axis_y) const { 77 std::pair<float, float> GetAnalog(u32 analog_axis_x, u32 analog_axis_y) const {
78 float x = GetAxis(analog_axis_x); 78 float x = GetAxis(analog_axis_x);
79 float y = GetAxis(analog_axis_y); 79 float y = GetAxis(analog_axis_y);
80 if (invert_x) {
81 x = -x;
82 }
83 if (invert_y) {
84 y = -y;
85 }
80 86
81 // Make sure the coordinates are in the unit circle, 87 // Make sure the coordinates are in the unit circle,
82 // otherwise normalize it. 88 // otherwise normalize it.
@@ -104,6 +110,8 @@ private:
104 const u32 button; 110 const u32 button;
105 const u32 axis_x; 111 const u32 axis_x;
106 const u32 axis_y; 112 const u32 axis_y;
113 const bool invert_x;
114 const bool invert_y;
107 const float deadzone; 115 const float deadzone;
108 const float range; 116 const float range;
109 const MouseInput::Mouse* mouse_input; 117 const MouseInput::Mouse* mouse_input;
@@ -128,8 +136,13 @@ std::unique_ptr<Input::AnalogDevice> MouseAnalogFactory::Create(
128 const auto axis_y = static_cast<u32>(params.Get("axis_y", 1)); 136 const auto axis_y = static_cast<u32>(params.Get("axis_y", 1));
129 const auto deadzone = std::clamp(params.Get("deadzone", 0.0f), 0.0f, 1.0f); 137 const auto deadzone = std::clamp(params.Get("deadzone", 0.0f), 0.0f, 1.0f);
130 const auto range = std::clamp(params.Get("range", 1.0f), 0.50f, 1.50f); 138 const auto range = std::clamp(params.Get("range", 1.0f), 0.50f, 1.50f);
139 const std::string invert_x_value = params.Get("invert_x", "+");
140 const std::string invert_y_value = params.Get("invert_y", "+");
141 const bool invert_x = invert_x_value == "-";
142 const bool invert_y = invert_y_value == "-";
131 143
132 return std::make_unique<MouseAnalog>(port, axis_x, axis_y, deadzone, range, mouse_input.get()); 144 return std::make_unique<MouseAnalog>(port, axis_x, axis_y, invert_x, invert_y, deadzone, range,
145 mouse_input.get());
133} 146}
134 147
135void MouseAnalogFactory::BeginConfiguration() { 148void MouseAnalogFactory::BeginConfiguration() {
@@ -153,6 +166,8 @@ Common::ParamPackage MouseAnalogFactory::GetNextInput() const {
153 params.Set("port", static_cast<u16>(pad.button)); 166 params.Set("port", static_cast<u16>(pad.button));
154 params.Set("axis_x", 0); 167 params.Set("axis_x", 0);
155 params.Set("axis_y", 1); 168 params.Set("axis_y", 1);
169 params.Set("invert_x", "+");
170 params.Set("invert_y", "+");
156 return params; 171 return params;
157 } 172 }
158 } 173 }