From ccf01c46ab947c04f3d523d29371cec087d7b124 Mon Sep 17 00:00:00 2001 From: Pavel Tumakaev Date: Tue, 1 Mar 2022 19:05:44 +0300 Subject: [PATCH] [qtmozembed] Prevent touch event coordinates fluctuation. Fixes JB#57776 Scrolling pages in the browser on slow devices periodically spontaneously changes direction. Dropping points whose arrival interval is less than 2 ms solves this problem. --- src/qmozview_p.cpp | 13 ++++++++----- src/qmozview_p.h | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/qmozview_p.cpp b/src/qmozview_p.cpp index 71f86fd..ce76f9c 100644 --- a/src/qmozview_p.cpp +++ b/src/qmozview_p.cpp @@ -1361,11 +1361,11 @@ void QMozViewPrivate::touchEvent(QTouchEvent *event) // Add active touch point to cancelled touch sequence. if (event->type() == QEvent::TouchCancel && touchPointsCount == 0) { - QMapIterator i(mActiveTouchPoints); + QMapIterator> i(mActiveTouchPoints); EmbedTouchInput touchEnd(EmbedTouchInput::MULTITOUCH_END, timeStamp); while (i.hasNext()) { i.next(); - QPointF pos = i.value(); + QPointF pos = i.value().first; touchEnd.touches.push_back(TouchData(i.key(), createEmbedTouchPoint(pos), 0)); @@ -1384,7 +1384,7 @@ void QMozViewPrivate::touchEvent(QTouchEvent *event) idHash.insert(pt.id(), i); switch (pt.state()) { case Qt::TouchPointPressed: { - mActiveTouchPoints.insert(pt.id(), pt.pos()); + mActiveTouchPoints.insert(pt.id(), {pt.pos(), event->timestamp()}); pressedIds.append(pt.id()); break; } @@ -1395,8 +1395,11 @@ void QMozViewPrivate::touchEvent(QTouchEvent *event) } case Qt::TouchPointMoved: case Qt::TouchPointStationary: { - mActiveTouchPoints.insert(pt.id(), pt.pos()); - moveIds.append(pt.id()); + QMap>::const_iterator i = mActiveTouchPoints.find(pt.id()); + if (i == mActiveTouchPoints.end() || (event->timestamp() - i.value().second) > 1) { + mActiveTouchPoints.insert(pt.id(), {pt.pos(), event->timestamp()}); + moveIds.append(pt.id()); + } break; } default: diff --git a/src/qmozview_p.h b/src/qmozview_p.h index 88afe20..764ee30 100644 --- a/src/qmozview_p.h +++ b/src/qmozview_p.h @@ -202,7 +202,8 @@ public Q_SLOTS: QPointF mLastPos; QPointF mSecondLastPos; QPointF mLastStationaryPos; - QMap mActiveTouchPoints; + // > + QMap> mActiveTouchPoints; bool mCanFlick; bool mPendingTouchEvent; QString mUrl;