summaryrefslogtreecommitdiff
path: root/src/managers/input/trackpad/TrackpadGestures.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2025-08-28 11:20:29 +0200
committerGitHub <noreply@github.com>2025-08-28 11:20:29 +0200
commit81bf4eccba449bfe2b6adfb51260108aec710d4f (patch)
tree215c5b536cbcf1df9888081aadd3de16eb4b3ebe /src/managers/input/trackpad/TrackpadGestures.hpp
parent378e130f1426648d8d734049800128f9882805bf (diff)
input: Add fully configurable trackpad gestures (#11490)
Adds configurable trackpad gestures
Diffstat (limited to 'src/managers/input/trackpad/TrackpadGestures.hpp')
-rw-r--r--src/managers/input/trackpad/TrackpadGestures.hpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/managers/input/trackpad/TrackpadGestures.hpp b/src/managers/input/trackpad/TrackpadGestures.hpp
new file mode 100644
index 00000000..3d0745df
--- /dev/null
+++ b/src/managers/input/trackpad/TrackpadGestures.hpp
@@ -0,0 +1,43 @@
+#pragma once
+
+#include "../../../devices/IPointer.hpp"
+
+#include "gestures/ITrackpadGesture.hpp"
+#include "GestureTypes.hpp"
+
+#include <vector>
+#include <expected>
+
+class CTrackpadGestures {
+ public:
+ void clearGestures();
+ std::expected<void, std::string> addGesture(UP<ITrackpadGesture>&& gesture, size_t fingerCount, eTrackpadGestureDirection direction, uint32_t modMask, float deltaScale);
+
+ void gestureBegin(const IPointer::SSwipeBeginEvent& e);
+ void gestureUpdate(const IPointer::SSwipeUpdateEvent& e);
+ void gestureEnd(const IPointer::SSwipeEndEvent& e);
+
+ void gestureBegin(const IPointer::SPinchBeginEvent& e);
+ void gestureUpdate(const IPointer::SPinchUpdateEvent& e);
+ void gestureEnd(const IPointer::SPinchEndEvent& e);
+
+ eTrackpadGestureDirection dirForString(const std::string_view& s);
+ const char* stringForDir(eTrackpadGestureDirection dir);
+
+ private:
+ struct SGestureData {
+ UP<ITrackpadGesture> gesture;
+ size_t fingerCount = 0;
+ uint32_t modMask = 0;
+ eTrackpadGestureDirection direction = TRACKPAD_GESTURE_DIR_NONE; // configured dir
+ float deltaScale = 1.F;
+ eTrackpadGestureDirection currentDirection = TRACKPAD_GESTURE_DIR_NONE; // actual dir of that select swipe
+ };
+
+ std::vector<SP<SGestureData>> m_gestures;
+
+ SP<SGestureData> m_activeGesture = nullptr;
+ bool m_gestureFindFailed = false;
+};
+
+inline UP<CTrackpadGestures> g_pTrackpadGestures = makeUnique<CTrackpadGestures>();