summaryrefslogtreecommitdiff
path: root/src/devices
diff options
context:
space:
mode:
authornyx <nnyyxxxx@protonmail.com>2025-03-03 15:56:01 -0500
committerGitHub <noreply@github.com>2025-03-03 21:56:01 +0100
commitd7e7a292613a4f20218074ff8299dff099a80098 (patch)
treecf57d20dfa11d2502115699a7bb36250c813adfc /src/devices
parentf1ef724a87b29a7937cfc328e0c7ea9445a90050 (diff)
input: add flip_x and flip_y for touchpad (#9481)
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/IPointer.hpp9
-rw-r--r--src/devices/Mouse.cpp1
-rw-r--r--src/devices/VirtualPointer.cpp6
3 files changed, 12 insertions, 4 deletions
diff --git a/src/devices/IPointer.hpp b/src/devices/IPointer.hpp
index ea9cb9f4..19d91c6c 100644
--- a/src/devices/IPointer.hpp
+++ b/src/devices/IPointer.hpp
@@ -17,9 +17,10 @@ class IPointer : public IHID {
virtual SP<Aquamarine::IPointer> aq() = 0;
struct SMotionEvent {
- uint32_t timeMs = 0;
- Vector2D delta, unaccel;
- bool mouse = false;
+ uint32_t timeMs = 0;
+ Vector2D delta, unaccel;
+ bool mouse = false;
+ SP<IPointer> device;
};
struct SMotionAbsoluteEvent {
@@ -109,6 +110,8 @@ class IPointer : public IHID {
bool connected = false; // means connected to the cursor
std::string boundOutput = "";
+ bool flipX = false; // decide to invert horizontal movement
+ bool flipY = false; // decide to invert vertical movement
WP<IPointer> self;
};
diff --git a/src/devices/Mouse.cpp b/src/devices/Mouse.cpp
index 41652ce4..87f6d33b 100644
--- a/src/devices/Mouse.cpp
+++ b/src/devices/Mouse.cpp
@@ -27,6 +27,7 @@ CMouse::CMouse(SP<Aquamarine::IPointer> mouse_) : mouse(mouse_) {
.delta = E.delta,
.unaccel = E.unaccel,
.mouse = true,
+ .device = self.lock(),
});
});
diff --git a/src/devices/VirtualPointer.cpp b/src/devices/VirtualPointer.cpp
index 7cfb0631..e98acd04 100644
--- a/src/devices/VirtualPointer.cpp
+++ b/src/devices/VirtualPointer.cpp
@@ -19,7 +19,11 @@ CVirtualPointer::CVirtualPointer(SP<CVirtualPointerV1Resource> resource) : point
events.destroy.emit();
});
- listeners.motion = pointer->events.move.registerListener([this](std::any d) { pointerEvents.motion.emit(d); });
+ listeners.motion = pointer->events.move.registerListener([this](std::any d) {
+ auto E = std::any_cast<SMotionEvent>(d);
+ E.device = self.lock();
+ pointerEvents.motion.emit(E);
+ });
listeners.motionAbsolute = pointer->events.warp.registerListener([this](std::any d) {
// we need to unpack the event and add our device here because it's required to calculate the position correctly
auto E = std::any_cast<SMotionAbsoluteEvent>(d);