From 153dcfbbba822390ccb7109499088cc954100a26 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Mon, 14 Sep 2020 16:13:16 +0200 Subject: Rename is[Begin|Update|End]Event, reimplement in QWheelEvent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These states correspond well with ScrollPhase, and this abstraction makes it possible to handle wheel events the same way as mouse events in Qt Quick: on "begin" we deliver to all Items and Handlers until all points (the only point) are accepted; on "update" and "end" we deliver only to the exclusive grabber, if there is one, and to any passive grabbers. Change-Id: I702dbd4f2c1bf5962eb3dbb9e4b725300a00a887 Reviewed-by: Tor Arne Vestbø Reviewed-by: Paul Wicking Reviewed-by: Volker Hilsheimer --- src/gui/kernel/qevent.cpp | 33 +++++++++++++++++++--- src/gui/kernel/qevent.h | 15 ++++++---- .../gui/kernel/qmouseevent/tst_qmouseevent.cpp | 16 +++++------ .../gui/kernel/qtouchevent/tst_qtouchevent.cpp | 12 ++++---- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 6f4208fe84..5b7bf73dbf 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -906,7 +906,7 @@ QSinglePointEvent::QSinglePointEvent(QEvent::Type type, const QPointingDevice *d /*! Returns \c true if this event represents a \l {button()}{button} being pressed. */ -bool QSinglePointEvent::isPressEvent() const +bool QSinglePointEvent::isBeginEvent() const { return m_button != Qt::NoButton && m_mouseState.testFlag(m_button); } @@ -922,7 +922,7 @@ bool QSinglePointEvent::isUpdateEvent() const /*! Returns \c true if this event represents a \l {button()}{button} being released. */ -bool QSinglePointEvent::isReleaseEvent() const +bool QSinglePointEvent::isEndEvent() const { return m_button != Qt::NoButton && !m_mouseState.testFlag(m_button); } @@ -1503,6 +1503,31 @@ QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pi QWheelEvent::~QWheelEvent() { } + +/*! + Returns \c true if this event's phase() is Qt::ScrollBegin. +*/ +bool QWheelEvent::isBeginEvent() const +{ + return m_phase == Qt::ScrollBegin; +} + +/*! + Returns \c true if this event's phase() is Qt::ScrollUpdate or Qt::ScrollMomentum. +*/ +bool QWheelEvent::isUpdateEvent() const +{ + return m_phase == Qt::ScrollUpdate || m_phase == Qt::ScrollMomentum; +} + +/*! + Returns \c true if this event's phase() is Qt::ScrollEnd. +*/ +bool QWheelEvent::isEndEvent() const +{ + return m_phase == Qt::ScrollEnd; +} + #endif // QT_CONFIG(wheelevent) /*! @@ -4738,7 +4763,7 @@ QTouchEvent::~QTouchEvent() /*! Returns true if this event includes at least one newly-pressed touchpoint. */ -bool QTouchEvent::isPressEvent() const +bool QTouchEvent::isBeginEvent() const { return m_touchPointStates.testFlag(QEventPoint::State::Pressed); } @@ -4756,7 +4781,7 @@ bool QTouchEvent::isUpdateEvent() const /*! Returns true if this event includes at least one newly-released touchpoint. */ -bool QTouchEvent::isReleaseEvent() const +bool QTouchEvent::isEndEvent() const { return m_touchPointStates.testFlag(QEventPoint::State::Released); } diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index ab87fc3c4b..190959cb16 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -210,9 +210,9 @@ public: const QList &points() const { return m_points; } QEventPoint *pointById(int id); bool allPointsGrabbed() const; - virtual bool isPressEvent() const { return false; } + virtual bool isBeginEvent() const { return false; } virtual bool isUpdateEvent() const { return false; } - virtual bool isReleaseEvent() const { return false; } + virtual bool isEndEvent() const { return false; } bool allPointsAccepted() const; QObject *exclusiveGrabber(const QEventPoint &point) const; void setExclusiveGrabber(const QEventPoint &point, QObject *exclusiveGrabber); @@ -243,9 +243,9 @@ public: inline QPointF globalPosition() const { Q_ASSERT(!m_points.isEmpty()); return m_points.first().globalPosition(); } - bool isPressEvent() const override; + bool isBeginEvent() const override; bool isUpdateEvent() const override; - bool isReleaseEvent() const override; + bool isEndEvent() const override; protected: QSinglePointEvent(Type type, const QPointingDevice *dev, const QEventPoint &point, @@ -392,6 +392,9 @@ public: inline bool isInverted() const { return m_invertedScrolling; } inline bool hasPixelDelta() const { return !m_pixelDelta.isNull(); } + bool isBeginEvent() const override; + bool isUpdateEvent() const override; + bool isEndEvent() const override; Qt::MouseEventSource source() const { return Qt::MouseEventSource(m_source); } protected: @@ -996,9 +999,9 @@ public: QT_DEPRECATED_VERSION_X_6_0("Use points()") const QList &touchPoints() const { return points(); } #endif - bool isPressEvent() const override; + bool isBeginEvent() const override; bool isUpdateEvent() const override; - bool isReleaseEvent() const override; + bool isEndEvent() const override; protected: QObject *m_target = nullptr; diff --git a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp index 865785a108..c5bc7a9460 100644 --- a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp +++ b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp @@ -162,23 +162,23 @@ void tst_QMouseEvent::mouseEventBasic() QCOMPARE(me.isAccepted(), true); QCOMPARE(me.button(), Qt::LeftButton); QCOMPARE(me.buttons(), Qt::LeftButton); - QVERIFY(me.isPressEvent()); - QVERIFY(!me.isReleaseEvent()); + QVERIFY(me.isBeginEvent()); + QVERIFY(!me.isEndEvent()); QCOMPARE(me.position(), local); QCOMPARE(me.scenePosition(), scene); QCOMPARE(me.globalPosition(), screen); // Press right button while left is already pressed me = QMouseEvent(QEvent::MouseButtonPress, local, scene, screen, Qt::RightButton, Qt::LeftButton | Qt::RightButton, Qt::NoModifier); - QVERIFY(me.isPressEvent()); - QVERIFY(!me.isReleaseEvent()); + QVERIFY(me.isBeginEvent()); + QVERIFY(!me.isEndEvent()); // Release right button while left is still pressed me = QMouseEvent(QEvent::MouseButtonRelease, local, scene, screen, Qt::RightButton, Qt::LeftButton, Qt::NoModifier); - QVERIFY(!me.isPressEvent()); - QVERIFY(me.isReleaseEvent()); + QVERIFY(!me.isBeginEvent()); + QVERIFY(me.isEndEvent()); // Release left button in the usual way me = QMouseEvent(QEvent::MouseButtonRelease, local, scene, screen, Qt::LeftButton, Qt::NoButton, Qt::NoModifier); - QVERIFY(!me.isPressEvent()); - QVERIFY(me.isReleaseEvent()); + QVERIFY(!me.isBeginEvent()); + QVERIFY(me.isEndEvent()); } void tst_QMouseEvent::checkMousePressEvent_data() diff --git a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp index 38e58c9cc0..dd36a28854 100644 --- a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp +++ b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp @@ -338,9 +338,9 @@ void tst_QTouchEvent::state() QEventPoint(1, QEventPoint::State::Pressed, {}, {})); QCOMPARE(touchEvent.touchPointStates(), QEventPoint::State::Stationary | QEventPoint::State::Pressed); QCOMPARE(touchEvent.pointCount(), 2); - QVERIFY(touchEvent.isPressEvent()); + QVERIFY(touchEvent.isBeginEvent()); QVERIFY(!touchEvent.isUpdateEvent()); - QVERIFY(!touchEvent.isReleaseEvent()); + QVERIFY(!touchEvent.isEndEvent()); QVERIFY(touchEvent.isInputEvent()); QVERIFY(touchEvent.isPointerEvent()); @@ -350,9 +350,9 @@ void tst_QTouchEvent::state() QEventPoint(1, QEventPoint::State::Pressed, {}, {})); QCOMPARE(touchEvent.touchPointStates(), QEventPoint::State::Updated | QEventPoint::State::Pressed); QCOMPARE(touchEvent.pointCount(), 2); - QVERIFY(touchEvent.isPressEvent()); + QVERIFY(touchEvent.isBeginEvent()); QVERIFY(!touchEvent.isUpdateEvent()); - QVERIFY(!touchEvent.isReleaseEvent()); + QVERIFY(!touchEvent.isEndEvent()); touchEvent = QTouchEvent(QEvent::TouchBegin, touchScreenDevice, Qt::NoModifier, QList() << @@ -360,9 +360,9 @@ void tst_QTouchEvent::state() QEventPoint(1, QEventPoint::State::Released, {}, {})); QCOMPARE(touchEvent.touchPointStates(), QEventPoint::State::Updated | QEventPoint::State::Released); QCOMPARE(touchEvent.pointCount(), 2); - QVERIFY(!touchEvent.isPressEvent()); + QVERIFY(!touchEvent.isBeginEvent()); QVERIFY(!touchEvent.isUpdateEvent()); - QVERIFY(touchEvent.isReleaseEvent()); + QVERIFY(touchEvent.isEndEvent()); } void tst_QTouchEvent::touchDisabledByDefault() -- cgit v1.2.3