diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-01-06 15:28:07 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-01-10 14:09:41 +0000 |
commit | eee9e6e1184f96f22aca17e02b66d58d87b2e06e (patch) | |
tree | a1316454c3d461b09593b6d452e14bb9fd6199f6 /src/quicktemplates2/qquickscrollbar.cpp | |
parent | 24acfcafdf66f9ade03d0f98520a5d6c02bb2a1c (diff) |
Revise QScrollBar internals
Move the press/move/release/ungrab logic from mouse event handlers to
QQuickScrollBarPrivate methods that can be re-used for touch events.
Change-Id: Id0b0f225a4f86a9d9cc8b77c9253001dd6c40bf4
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickscrollbar.cpp')
-rw-r--r-- | src/quicktemplates2/qquickscrollbar.cpp | 57 |
1 files changed, 47 insertions, 10 deletions
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp index c291e4b1..a4ed68bf 100644 --- a/src/quicktemplates2/qquickscrollbar.cpp +++ b/src/quicktemplates2/qquickscrollbar.cpp @@ -167,10 +167,15 @@ public: return bar->d_func(); } - qreal positionAt(const QPoint &point) const; + qreal positionAt(const QPointF &point) const; void updateActive(); void resizeContent() override; + void handlePress(const QPointF &point); + void handleMove(const QPointF &point); + void handleRelease(const QPointF &point); + void handleUngrab(); + qreal size; qreal position; qreal stepSize; @@ -181,7 +186,7 @@ public: Qt::Orientation orientation; }; -qreal QQuickScrollBarPrivate::positionAt(const QPoint &point) const +qreal QQuickScrollBarPrivate::positionAt(const QPointF &point) const { Q_Q(const QQuickScrollBar); if (orientation == Qt::Horizontal) @@ -211,6 +216,36 @@ void QQuickScrollBarPrivate::resizeContent() } } +void QQuickScrollBarPrivate::handlePress(const QPointF &point) +{ + Q_Q(QQuickScrollBar); + offset = positionAt(point) - position; + if (offset < 0 || offset > size) + offset = size / 2; + q->setPressed(true); +} + +void QQuickScrollBarPrivate::handleMove(const QPointF &point) +{ + Q_Q(QQuickScrollBar); + q->setPosition(qBound<qreal>(0.0, positionAt(point) - offset, 1.0 - size)); +} + +void QQuickScrollBarPrivate::handleRelease(const QPointF &point) +{ + Q_Q(QQuickScrollBar); + q->setPosition(qBound<qreal>(0.0, positionAt(point) - offset, 1.0 - size)); + offset = 0.0; + q->setPressed(false); +} + +void QQuickScrollBarPrivate::handleUngrab() +{ + Q_Q(QQuickScrollBar); + offset = 0.0; + q->setPressed(false); +} + QQuickScrollBar::QQuickScrollBar(QQuickItem *parent) : QQuickControl(*(new QQuickScrollBarPrivate), parent) { @@ -427,26 +462,28 @@ void QQuickScrollBar::mousePressEvent(QMouseEvent *event) { Q_D(QQuickScrollBar); QQuickControl::mousePressEvent(event); - d->offset = d->positionAt(event->pos()) - d->position; - if (d->offset < 0 || d->offset > d->size) - d->offset = d->size / 2; - setPressed(true); + d->handlePress(event->localPos()); } void QQuickScrollBar::mouseMoveEvent(QMouseEvent *event) { Q_D(QQuickScrollBar); QQuickControl::mouseMoveEvent(event); - setPosition(qBound<qreal>(0.0, d->positionAt(event->pos()) - d->offset, 1.0 - d->size)); + d->handleMove(event->localPos()); } void QQuickScrollBar::mouseReleaseEvent(QMouseEvent *event) { Q_D(QQuickScrollBar); QQuickControl::mouseReleaseEvent(event); - setPosition(qBound<qreal>(0.0, d->positionAt(event->pos()) - d->offset, 1.0 - d->size)); - d->offset = 0.0; - setPressed(false); + d->handleRelease(event->localPos()); +} + +void QQuickScrollBar::mouseUngrabEvent() +{ + Q_D(QQuickScrollBar); + QQuickControl::mouseUngrabEvent(); + d->handleUngrab(); } void QQuickScrollBar::hoverChange() |