diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-10-27 21:20:23 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-10-29 06:55:33 +0000 |
commit | bbb113b0e3a82325ba5c1b79061cae757db7468d (patch) | |
tree | 03d59347b51a5a673dbfdf3ac3b6644be52f871a /src/templates | |
parent | 442e034b20bac29798806abd39acdd6aea7b65e6 (diff) |
QQuickSwitch: cleanup implementation details from the API
Change-Id: I7cb9df78455bd32cfe70f29a1d3f9392dc88930f
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Diffstat (limited to 'src/templates')
-rw-r--r-- | src/templates/qquickswitch.cpp | 118 | ||||
-rw-r--r-- | src/templates/qquickswitch_p.h | 5 |
2 files changed, 62 insertions, 61 deletions
diff --git a/src/templates/qquickswitch.cpp b/src/templates/qquickswitch.cpp index 35b0b85c..241deed9 100644 --- a/src/templates/qquickswitch.cpp +++ b/src/templates/qquickswitch.cpp @@ -89,6 +89,11 @@ public: void updatePosition(); + bool handleMousePressEvent(QQuickItem *child, QMouseEvent *event); + bool handleMouseMoveEvent(QQuickItem *child, QMouseEvent *event); + bool handleMouseReleaseEvent(QQuickItem *child, QMouseEvent *event); + bool handleMouseUngrabEvent(QQuickItem *child); + qreal position; QPoint pressPoint; }; @@ -99,6 +104,58 @@ void QQuickSwitchPrivate::updatePosition() q->setPosition(checked ? 1.0 : 0.0); } +bool QQuickSwitchPrivate::handleMousePressEvent(QQuickItem *child, QMouseEvent *event) +{ + Q_Q(QQuickSwitch); + Q_UNUSED(child); + pressPoint = event->pos(); + q->setPressed(true); + event->accept(); + return true; +} + +bool QQuickSwitchPrivate::handleMouseMoveEvent(QQuickItem *child, QMouseEvent *event) +{ + Q_Q(QQuickSwitch); + if (!child->keepMouseGrab()) + child->setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->pos().x() - pressPoint.x(), Qt::XAxis, event)); + if (child->keepMouseGrab()) { + q->setPosition(q->positionAt(event->pos())); + event->accept(); + } + return true; +} + +bool QQuickSwitchPrivate::handleMouseReleaseEvent(QQuickItem *child, QMouseEvent *event) +{ + Q_Q(QQuickSwitch); + pressPoint = QPoint(); + q->setPressed(false); + if (child->keepMouseGrab()) { + q->setChecked(position > 0.5); + q->setPosition(checked ? 1.0 : 0.0); + child->setKeepMouseGrab(false); + event->accept(); + } else { + QQuickMouseEvent me(event->x(), event->y(), event->button(), event->buttons(), event->modifiers(), true /* isClick */); + emit q->clicked(&me); + event->setAccepted(me.isAccepted()); + q->toggle(); + } + return true; +} + +bool QQuickSwitchPrivate::handleMouseUngrabEvent(QQuickItem *child) +{ + Q_Q(QQuickSwitch); + Q_UNUSED(child); + pressPoint = QPoint(); + q->setChecked(position > 0.5); + q->setPosition(checked ? 1.0 : 0.0); + q->setPressed(false); + return true; +} + QQuickSwitch::QQuickSwitch(QQuickItem *parent) : QQuickAbstractButton(*(new QQuickSwitchPrivate), parent) { @@ -166,16 +223,17 @@ void QQuickSwitch::mirrorChange() bool QQuickSwitch::childMouseEventFilter(QQuickItem *child, QEvent *event) { + Q_D(QQuickSwitch); if (child == indicator()) { switch (event->type()) { case QEvent::MouseButtonPress: - return handleMousePressEvent(child, static_cast<QMouseEvent *>(event)); + return d->handleMousePressEvent(child, static_cast<QMouseEvent *>(event)); case QEvent::MouseMove: - return handleMouseMoveEvent(child, static_cast<QMouseEvent *>(event)); + return d->handleMouseMoveEvent(child, static_cast<QMouseEvent *>(event)); case QEvent::MouseButtonRelease: - return handleMouseReleaseEvent(child, static_cast<QMouseEvent *>(event)); + return d->handleMouseReleaseEvent(child, static_cast<QMouseEvent *>(event)); case QEvent::UngrabMouse: - return handleMouseUngrabEvent(child); + return d->handleMouseUngrabEvent(child); default: return false; } @@ -183,58 +241,6 @@ bool QQuickSwitch::childMouseEventFilter(QQuickItem *child, QEvent *event) return false; } -bool QQuickSwitch::handleMousePressEvent(QQuickItem *child, QMouseEvent *event) -{ - Q_D(QQuickSwitch); - Q_UNUSED(child); - d->pressPoint = event->pos(); - setPressed(true); - event->accept(); - return true; -} - -bool QQuickSwitch::handleMouseMoveEvent(QQuickItem *child, QMouseEvent *event) -{ - Q_D(QQuickSwitch); - if (!child->keepMouseGrab()) - child->setKeepMouseGrab(QQuickWindowPrivate::dragOverThreshold(event->pos().x() - d->pressPoint.x(), Qt::XAxis, event)); - if (child->keepMouseGrab()) { - setPosition(positionAt(event->pos())); - event->accept(); - } - return true; -} - -bool QQuickSwitch::handleMouseReleaseEvent(QQuickItem *child, QMouseEvent *event) -{ - Q_D(QQuickSwitch); - d->pressPoint = QPoint(); - setPressed(false); - if (child->keepMouseGrab()) { - setChecked(position() > 0.5); - setPosition(isChecked() ? 1.0 : 0.0); - child->setKeepMouseGrab(false); - event->accept(); - } else { - QQuickMouseEvent me(event->x(), event->y(), event->button(), event->buttons(), event->modifiers(), true /* isClick */); - emit clicked(&me); - event->setAccepted(me.isAccepted()); - toggle(); - } - return true; -} - -bool QQuickSwitch::handleMouseUngrabEvent(QQuickItem *child) -{ - Q_D(QQuickSwitch); - Q_UNUSED(child); - d->pressPoint = QPoint(); - setChecked(position() > 0.5); - setPosition(isChecked() ? 1.0 : 0.0); - setPressed(false); - return true; -} - qreal QQuickSwitch::positionAt(const QPoint &point) const { qreal pos = point.x() / indicator()->width(); diff --git a/src/templates/qquickswitch_p.h b/src/templates/qquickswitch_p.h index 8e822b73..2670c863 100644 --- a/src/templates/qquickswitch_p.h +++ b/src/templates/qquickswitch_p.h @@ -76,11 +76,6 @@ protected: void mirrorChange() Q_DECL_OVERRIDE; bool childMouseEventFilter(QQuickItem *child, QEvent *event) Q_DECL_OVERRIDE; - bool handleMousePressEvent(QQuickItem *child, QMouseEvent *event); - bool handleMouseMoveEvent(QQuickItem *child, QMouseEvent *event); - bool handleMouseReleaseEvent(QQuickItem *child, QMouseEvent *event); - bool handleMouseUngrabEvent(QQuickItem *child); - virtual qreal positionAt(const QPoint &point) const; private: |