summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2025-09-29 13:29:40 +0200
committerGitHub <noreply@github.com>2025-09-29 12:29:40 +0100
commit43fb4753fcc5ed1eb0c3341b690f72574faa02bc (patch)
tree76b39c26f6db707aaa0596b968569c4f45a8a5b0 /src
parentf854b5bffbdd13cfe7edad0ee157d6947ff99619 (diff)
gestures: fix gesture direction detection (#11852)
Diffstat (limited to 'src')
-rw-r--r--src/managers/input/trackpad/TrackpadGestures.cpp11
-rw-r--r--src/managers/input/trackpad/TrackpadGestures.hpp1
2 files changed, 8 insertions, 4 deletions
diff --git a/src/managers/input/trackpad/TrackpadGestures.cpp b/src/managers/input/trackpad/TrackpadGestures.cpp
index de5639f8..3595f5ba 100644
--- a/src/managers/input/trackpad/TrackpadGestures.cpp
+++ b/src/managers/input/trackpad/TrackpadGestures.cpp
@@ -108,6 +108,7 @@ void CTrackpadGestures::gestureBegin(const IPointer::SSwipeBeginEvent& e) {
}
m_gestureFindFailed = false;
+ m_currentTotalDelta = {};
// nothing here. We need to wait for the first update to determine the delta.
}
@@ -116,8 +117,10 @@ void CTrackpadGestures::gestureUpdate(const IPointer::SSwipeUpdateEvent& e) {
if (m_gestureFindFailed)
return;
+ m_currentTotalDelta += e.delta;
+
// 5 was chosen because I felt like that's a good number.
- if (!m_activeGesture && (std::abs(e.delta.x) < 5 && std::abs(e.delta.y) < 5)) {
+ if (!m_activeGesture && (std::abs(m_currentTotalDelta.x) < 5 && std::abs(m_currentTotalDelta.y) < 5)) {
Debug::log(TRACE, "CTrackpadGestures::gestureUpdate (swipe): gesture delta too small to start considering, waiting");
return;
}
@@ -126,12 +129,12 @@ void CTrackpadGestures::gestureUpdate(const IPointer::SSwipeUpdateEvent& e) {
// try to find a gesture that matches our current state
auto direction = TRACKPAD_GESTURE_DIR_NONE;
- auto axis = std::abs(e.delta.x) > std::abs(e.delta.y) ? TRACKPAD_GESTURE_DIR_HORIZONTAL : TRACKPAD_GESTURE_DIR_VERTICAL;
+ auto axis = std::abs(m_currentTotalDelta.x) > std::abs(m_currentTotalDelta.y) ? TRACKPAD_GESTURE_DIR_HORIZONTAL : TRACKPAD_GESTURE_DIR_VERTICAL;
if (axis == TRACKPAD_GESTURE_DIR_HORIZONTAL)
- direction = e.delta.x < 0 ? TRACKPAD_GESTURE_DIR_LEFT : TRACKPAD_GESTURE_DIR_RIGHT;
+ direction = m_currentTotalDelta.x < 0 ? TRACKPAD_GESTURE_DIR_LEFT : TRACKPAD_GESTURE_DIR_RIGHT;
else
- direction = e.delta.y < 0 ? TRACKPAD_GESTURE_DIR_UP : TRACKPAD_GESTURE_DIR_DOWN;
+ direction = m_currentTotalDelta.y < 0 ? TRACKPAD_GESTURE_DIR_UP : TRACKPAD_GESTURE_DIR_DOWN;
const auto MODS = g_pInputManager->getModsFromAllKBs();
diff --git a/src/managers/input/trackpad/TrackpadGestures.hpp b/src/managers/input/trackpad/TrackpadGestures.hpp
index 411a1fbb..7f96761f 100644
--- a/src/managers/input/trackpad/TrackpadGestures.hpp
+++ b/src/managers/input/trackpad/TrackpadGestures.hpp
@@ -37,6 +37,7 @@ class CTrackpadGestures {
std::vector<SP<SGestureData>> m_gestures;
+ Vector2D m_currentTotalDelta = {};
SP<SGestureData> m_activeGesture = nullptr;
bool m_gestureFindFailed = false;
};