aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickscrollbar.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-04-10 07:40:04 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-04-10 08:23:57 +0000
commit7368e6bfedbbebbd642cee2be86c0b1c115d9efd (patch)
treee387a4b1e1ccd18e73fcade941f335c340622f69 /src/quicktemplates2/qquickscrollbar.cpp
parentdcb0dd861bec6eb61b6bca6dad9399f59a5a1c2c (diff)
QQuickScrollBar: handle touch events
Change-Id: I0521eb36ee01abc72edc869d92910e823f00a2f2 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickscrollbar.cpp')
-rw-r--r--src/quicktemplates2/qquickscrollbar.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp
index cb5c0001..844bba3a 100644
--- a/src/quicktemplates2/qquickscrollbar.cpp
+++ b/src/quicktemplates2/qquickscrollbar.cpp
@@ -165,6 +165,7 @@ QQuickScrollBarPrivate::QQuickScrollBarPrivate()
moving(false),
interactive(true),
explicitInteractive(false),
+ touchId(-1),
orientation(Qt::Vertical),
snapMode(QQuickScrollBar::NoSnap),
policy(QQuickScrollBar::AsNeeded)
@@ -268,6 +269,7 @@ void QQuickScrollBarPrivate::handleRelease(const QPointF &point)
pos = snapPosition(pos);
q->setPosition(pos);
offset = 0.0;
+ touchId = -1;
q->setPressed(false);
}
@@ -275,6 +277,7 @@ void QQuickScrollBarPrivate::handleUngrab()
{
Q_Q(QQuickScrollBar);
offset = 0.0;
+ touchId = -1;
q->setPressed(false);
}
@@ -616,6 +619,55 @@ void QQuickScrollBar::mouseUngrabEvent()
d->handleUngrab();
}
+void QQuickScrollBar::touchEvent(QTouchEvent *event)
+{
+ Q_D(QQuickScrollBar);
+ switch (event->type()) {
+ case QEvent::TouchBegin:
+ if (d->touchId == -1) {
+ const QTouchEvent::TouchPoint point = event->touchPoints().first();
+ d->touchId = point.id();
+ d->handlePress(point.pos());
+ } else {
+ event->ignore();
+ }
+ break;
+
+ case QEvent::TouchUpdate:
+ for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
+ if (point.id() != d->touchId)
+ continue;
+
+ d->handleMove(point.pos());
+ }
+ break;
+
+ case QEvent::TouchEnd:
+ for (const QTouchEvent::TouchPoint &point : event->touchPoints()) {
+ if (point.id() != d->touchId)
+ continue;
+
+ d->handleRelease(point.pos());
+ }
+ break;
+
+ case QEvent::TouchCancel:
+ d->handleUngrab();
+ break;
+
+ default:
+ QQuickControl::touchEvent(event);
+ break;
+ }
+}
+
+void QQuickScrollBar::touchUngrabEvent()
+{
+ Q_D(QQuickScrollBar);
+ QQuickControl::touchUngrabEvent();
+ d->handleUngrab();
+}
+
#if QT_CONFIG(quicktemplates2_hover)
void QQuickScrollBar::hoverChange()
{