homescreens/folio: Halve the needed swipe distance for swipe detection

SwipeArea requires 10px to differentiate between taps and swipes. HomeScreenState uses a further 10px to differentiate between vertical and horizontal swipes. This MR combines the swipe detection together so that we only need 10px rather than 20px for gesture detection.
This commit is contained in:
Devin Lin 2024-07-07 22:48:42 -04:00
parent 4c552b84be
commit 0ce95a604a
5 changed files with 12 additions and 6 deletions

View file

@ -284,7 +284,7 @@ void SwipeArea::handleMoveEvent(QPointerEvent *event, QPointF point)
m_lastPos = point;
m_stealMouse = true;
setMoving(true);
Q_EMIT swipeStarted(m_startPos);
Q_EMIT swipeStarted(m_startPos, m_pressPos);
}
const QVector2D totalDelta = QVector2D(point - m_startPos);

View file

@ -52,7 +52,7 @@ Q_SIGNALS:
void pressedChanged();
void swipeEnded();
void swipeStarted(QPointF point);
void swipeStarted(QPointF currentPoint, QPointF startPoint); // we let the user move a couple of pixels for swipe detection
// deltaX, deltaY - amount moved since last swipeMove()
// totalDeltaX, totalDeltaY - amount move since startedSwipe()

View file

@ -868,13 +868,17 @@ void HomeScreenState::cancelDelegateDrag()
swipeEnded();
}
void HomeScreenState::swipeStarted()
void HomeScreenState::swipeStarted(qreal deltaX, qreal deltaY)
{
if (m_swipeState != SwipeState::None) {
return;
}
setSwipeState(SwipeState::DeterminingSwipeType);
// the user interaction has already moved a bit (for swipe detection),
// so we call the move event too.
swipeMoved(deltaX, deltaY, deltaX, deltaY);
}
void HomeScreenState::swipeEnded()

View file

@ -334,7 +334,7 @@ public Q_SLOTS:
void cancelDelegateDrag();
// from SwipeArea
void swipeStarted();
void swipeStarted(qreal deltaX, qreal deltaY);
void swipeEnded();
void swipeMoved(qreal totalDeltaX, qreal totalDeltaY, qreal deltaX, qreal deltaY);

View file

@ -107,8 +107,10 @@ Item {
folio.HomeScreenState.swipeState === Folio.HomeScreenState.SwipingAppDrawerGrid ||
folio.HomeScreenState.viewState !== Folio.HomeScreenState.AppDrawerView)
onSwipeStarted: {
homeScreenState.swipeStarted();
onSwipeStarted: (currentPos, startPos) => {
const deltaX = currentPos.x - startPos.x;
const deltaY = currentPos.y - startPos.y;
homeScreenState.swipeStarted(deltaX, deltaY);
}
onSwipeEnded: {
homeScreenState.swipeEnded();