aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickslider.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-01-02 17:50:09 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2017-01-03 09:43:06 +0000
commit7c5920885ccefd999ed55245c1a500e110a5acb7 (patch)
treeca79a461bf491678a8da920523b96503fe8860cc /src/quicktemplates2/qquickslider.cpp
parent76483fe4cfae782c045119d660e77627b4fc9a25 (diff)
Revise QQuickSlider internals
Move the press/move/release/ungrab logic from mouse event handlers to QQuickSliderPrivate methods that can be re-used for touch events. Change-Id: Icfe4afc2974f07af17f2245723683233945026bd Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickslider.cpp')
-rw-r--r--src/quicktemplates2/qquickslider.cpp89
1 files changed, 59 insertions, 30 deletions
diff --git a/src/quicktemplates2/qquickslider.cpp b/src/quicktemplates2/qquickslider.cpp
index d9d5eaf6..bb3c0158 100644
--- a/src/quicktemplates2/qquickslider.cpp
+++ b/src/quicktemplates2/qquickslider.cpp
@@ -99,6 +99,11 @@ public:
void setPosition(qreal position);
void updatePosition();
+ void handlePress(const QPointF &point);
+ void handleMove(const QPointF &point);
+ void handleRelease(const QPointF &point);
+ void handleUngrab();
+
qreal from;
qreal to;
qreal value;
@@ -169,6 +174,56 @@ void QQuickSliderPrivate::updatePosition()
setPosition(pos);
}
+void QQuickSliderPrivate::handlePress(const QPointF &point)
+{
+ Q_Q(QQuickSlider);
+ pressPoint = point;
+ q->setPressed(true);
+}
+
+void QQuickSliderPrivate::handleMove(const QPointF &point)
+{
+ Q_Q(QQuickSlider);
+ if (!q->keepMouseGrab())
+ return;
+ const qreal oldPos = position;
+ qreal pos = positionAt(point);
+ if (snapMode == QQuickSlider::SnapAlways)
+ pos = snapPosition(pos);
+ if (live)
+ q->setValue(q->valueAt(pos));
+ else
+ setPosition(pos);
+ if (!qFuzzyCompare(pos, oldPos))
+ emit q->moved();
+}
+
+void QQuickSliderPrivate::handleRelease(const QPointF &point)
+{
+ Q_Q(QQuickSlider);
+ pressPoint = QPointF();
+ const qreal oldPos = position;
+ qreal pos = positionAt(point);
+ if (snapMode != QQuickSlider::NoSnap)
+ pos = snapPosition(pos);
+ qreal val = q->valueAt(pos);
+ if (!qFuzzyCompare(val, value))
+ q->setValue(val);
+ else if (snapMode != QQuickSlider::NoSnap)
+ setPosition(pos);
+ if (!qFuzzyCompare(pos, oldPos))
+ emit q->moved();
+ q->setKeepMouseGrab(false);
+ q->setPressed(false);
+}
+
+void QQuickSliderPrivate::handleUngrab()
+{
+ Q_Q(QQuickSlider);
+ pressPoint = QPointF();
+ q->setPressed(false);
+}
+
QQuickSlider::QQuickSlider(QQuickItem *parent) :
QQuickControl(*(new QQuickSliderPrivate), parent)
{
@@ -560,8 +615,7 @@ void QQuickSlider::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickSlider);
QQuickControl::mousePressEvent(event);
- d->pressPoint = event->localPos();
- setPressed(true);
+ d->handlePress(event->localPos());
}
void QQuickSlider::mouseMoveEvent(QMouseEvent *event)
@@ -574,46 +628,21 @@ void QQuickSlider::mouseMoveEvent(QMouseEvent *event)
else
setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->localPos().y() - d->pressPoint.y(), Qt::YAxis, event));
}
- if (keepMouseGrab()) {
- const qreal oldPos = d->position;
- qreal pos = d->positionAt(event->localPos());
- if (d->snapMode == SnapAlways)
- pos = d->snapPosition(pos);
- if (d->live)
- setValue(valueAt(pos));
- else
- d->setPosition(pos);
- if (!qFuzzyCompare(pos, oldPos))
- emit moved();
- }
+ d->handleMove(event->localPos());
}
void QQuickSlider::mouseReleaseEvent(QMouseEvent *event)
{
Q_D(QQuickSlider);
QQuickControl::mouseReleaseEvent(event);
- d->pressPoint = QPointF();
- const qreal oldPos = d->position;
- qreal pos = d->positionAt(event->localPos());
- if (d->snapMode != NoSnap)
- pos = d->snapPosition(pos);
- qreal val = valueAt(pos);
- if (!qFuzzyCompare(val, d->value))
- setValue(val);
- else if (d->snapMode != NoSnap)
- d->setPosition(pos);
- if (!qFuzzyCompare(pos, oldPos))
- emit moved();
- setKeepMouseGrab(false);
- setPressed(false);
+ d->handleRelease(event->localPos());
}
void QQuickSlider::mouseUngrabEvent()
{
Q_D(QQuickSlider);
QQuickControl::mouseUngrabEvent();
- d->pressPoint = QPointF();
- setPressed(false);
+ d->handleUngrab();
}
void QQuickSlider::wheelEvent(QWheelEvent *event)