aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickdial.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-01-03 15:39:12 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2017-01-03 17:04:59 +0000
commit0b290018b52bc15534bedebe39f183e74eaee24e (patch)
treed4bf706b6ba727fdd212791fab422728a11ca586 /src/quicktemplates2/qquickdial.cpp
parent63f05a3bcc76cdd065eb18cd5c59ed693ec2ec14 (diff)
Revise QQuickDial internals
Move the press/move/release/ungrab logic from mouse event handlers to QQuickDialPrivate methods that can be re-used for touch events. Change-Id: I6e4594a3b532d6049117a37b0880e16cc22cb6cf Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickdial.cpp')
-rw-r--r--src/quicktemplates2/qquickdial.cpp100
1 files changed, 64 insertions, 36 deletions
diff --git a/src/quicktemplates2/qquickdial.cpp b/src/quicktemplates2/qquickdial.cpp
index 0fb3811f..bd59f057 100644
--- a/src/quicktemplates2/qquickdial.cpp
+++ b/src/quicktemplates2/qquickdial.cpp
@@ -117,6 +117,11 @@ public:
void updatePosition();
bool isLargeChange(const QPointF &eventPos, qreal proposedPosition) const;
+ void handlePress(const QPointF &point);
+ void handleMove(const QPointF &point);
+ void handleRelease(const QPointF &point);
+ void handleUngrab();
+
qreal from;
qreal to;
qreal value;
@@ -190,6 +195,61 @@ bool QQuickDialPrivate::isLargeChange(const QPointF &eventPos, qreal proposedPos
return qAbs(proposedPosition - position) >= 0.5 && eventPos.y() >= height / 2;
}
+void QQuickDialPrivate::handlePress(const QPointF &point)
+{
+ Q_Q(QQuickDial);
+ pressPoint = point;
+ q->setPressed(true);
+}
+
+void QQuickDialPrivate::handleMove(const QPointF &point)
+{
+ Q_Q(QQuickDial);
+ if (!q->keepMouseGrab())
+ return;
+ const qreal oldPos = position;
+ qreal pos = positionAt(point);
+ if (snapMode == QQuickDial::SnapAlways)
+ pos = snapPosition(pos);
+
+ if (wrap || (!wrap && !isLargeChange(point, pos))) {
+ if (live)
+ q->setValue(valueAt(pos));
+ else
+ setPosition(pos);
+ if (!qFuzzyCompare(pos, oldPos))
+ emit q->moved();
+ }
+}
+
+void QQuickDialPrivate::handleRelease(const QPointF &point)
+{
+ Q_Q(QQuickDial);
+ if (q->keepMouseGrab()) {
+ const qreal oldPos = position;
+ qreal pos = positionAt(point);
+ if (snapMode != QQuickDial::NoSnap)
+ pos = snapPosition(pos);
+
+ if (wrap || (!wrap && !isLargeChange(point, pos)))
+ q->setValue(valueAt(pos));
+ if (!qFuzzyCompare(pos, oldPos))
+ emit q->moved();
+
+ q->setKeepMouseGrab(false);
+ }
+
+ q->setPressed(false);
+ pressPoint = QPointF();
+}
+
+void QQuickDialPrivate::handleUngrab()
+{
+ Q_Q(QQuickDial);
+ pressPoint = QPointF();
+ q->setPressed(false);
+}
+
QQuickDial::QQuickDial(QQuickItem *parent) :
QQuickControl(*(new QQuickDialPrivate), parent)
{
@@ -592,8 +652,7 @@ void QQuickDial::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickDial);
QQuickControl::mousePressEvent(event);
- d->pressPoint = event->localPos();
- setPressed(true);
+ d->handlePress(event->localPos());
}
void QQuickDial::mouseMoveEvent(QMouseEvent *event)
@@ -609,52 +668,21 @@ void QQuickDial::mouseMoveEvent(QMouseEvent *event)
setKeepMouseGrab(overYDragThreshold);
}
}
- if (keepMouseGrab()) {
- const qreal oldPos = d->position;
- qreal pos = d->positionAt(event->localPos());
- if (d->snapMode == SnapAlways)
- pos = d->snapPosition(pos);
-
- if (d->wrap || (!d->wrap && !d->isLargeChange(event->localPos(), pos))) {
- if (d->live)
- setValue(d->valueAt(pos));
- else
- d->setPosition(pos);
- if (!qFuzzyCompare(pos, oldPos))
- emit moved();
- }
- }
+ d->handleMove(event->localPos());
}
void QQuickDial::mouseReleaseEvent(QMouseEvent *event)
{
Q_D(QQuickDial);
QQuickControl::mouseReleaseEvent(event);
-
- if (keepMouseGrab()) {
- const qreal oldPos = d->position;
- qreal pos = d->positionAt(event->localPos());
- if (d->snapMode != NoSnap)
- pos = d->snapPosition(pos);
-
- if (d->wrap || (!d->wrap && !d->isLargeChange(event->localPos(), pos)))
- setValue(d->valueAt(pos));
- if (!qFuzzyCompare(pos, oldPos))
- emit moved();
-
- setKeepMouseGrab(false);
- }
-
- setPressed(false);
- d->pressPoint = QPointF();
+ d->handleRelease(event->localPos());
}
void QQuickDial::mouseUngrabEvent()
{
Q_D(QQuickDial);
QQuickControl::mouseUngrabEvent();
- d->pressPoint = QPointF();
- setPressed(false);
+ d->handleUngrab();
}
void QQuickDial::wheelEvent(QWheelEvent *event)