diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-03-27 16:06:11 +0000 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-07-10 14:32:56 +0200 |
commit | 4e400369c08db251cd489fec1229398c224d02b4 (patch) | |
tree | 6279489dce7b0469d590461798deccf5d1193e29 /tests/auto/widgets/util | |
parent | 773a6bffd78b363577d27604e17f4ee08ff07e77 (diff) |
Refactor pointer event hierarchy
Some goals that have hopefully been achieved are:
- make QPointerEvent and QEventPoint resemble their Qt Quick
counterparts to such an extent that we can remove those wrappers
and go back to delivering the original events in Qt Quick
- make QEventPoint much smaller than QTouchEvent::TouchPoint, with no pimpl
- remove most public setters
- reduce the usage of complex constructors that take many arguments
- don't repeat ourselves: move accessors and storage upwards
rather than having redundant ones in subclasses
- standardize the set of accessors in QPointerEvent
- maintain source compatibility as much as possible: do not require
modifying event-handling code in any QWidget subclass
To avoid public setters we now introduce a few QMutable* subclasses.
This is a bit like the Builder pattern except that it doesn't involve
constructing a separate disposable object: the main event type can be
cast to the mutable type at any time to enable modifications, iff the
code is linked with gui-private. Therefore event classes can have
less-"complete" constructors, because internal Qt code can use setters
the same way it could use the ones in QTouchEvent before; and the event
classes don't need many friends. Even some read-accessors can be kept
private unless we are sure we want to expose them.
Task-number: QTBUG-46266
Fixes: QTBUG-72173
Change-Id: I740e4e40165b7bc41223d38b200bbc2b403e07b6
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests/auto/widgets/util')
-rw-r--r-- | tests/auto/widgets/util/qscroller/tst_qscroller.cpp | 73 |
1 files changed, 34 insertions, 39 deletions
diff --git a/tests/auto/widgets/util/qscroller/tst_qscroller.cpp b/tests/auto/widgets/util/qscroller/tst_qscroller.cpp index 83ff5ed668..71b8867d09 100644 --- a/tests/auto/widgets/util/qscroller/tst_qscroller.cpp +++ b/tests/auto/widgets/util/qscroller/tst_qscroller.cpp @@ -29,6 +29,7 @@ #include <QtGui> #include <QtWidgets> #include <QtTest> +#include <QtGui/private/qevent_p.h> #include <qpa/qwindowsysteminterface.h> // #include <QDebug> @@ -145,34 +146,32 @@ void tst_QScroller::kineticScroll(tst_QScrollerWidget *sw, QPointF from, QPoint QScrollerProperties sp1 = QScroller::scroller(sw)->scrollerProperties(); - QTouchEvent::TouchPoint rawTouchPoint; - rawTouchPoint.setId(0); - // send the touch begin event - QTouchEvent::TouchPoint touchPoint(0); - touchPoint.setState(Qt::TouchPointPressed); - touchPoint.setPos(touchStart); - touchPoint.setScenePos(touchStart); - touchPoint.setScreenPos(touchStart); + QMutableEventPoint touchPoint(0); + touchPoint.setState(QEventPoint::State::Pressed); + touchPoint.setPosition(touchStart); + touchPoint.setScenePosition(touchStart); + touchPoint.setGlobalPosition(touchStart); + QTouchEvent touchEvent1(QEvent::TouchBegin, m_touchScreen, Qt::NoModifier, - Qt::TouchPointPressed, (QList<QTouchEvent::TouchPoint>() << touchPoint)); + QApplication::sendEvent(sw, &touchEvent1); QCOMPARE(s1->state(), QScroller::Pressed); // send the touch update far enough to trigger a scroll QTest::qWait(200); // we need to wait a little or else the speed would be infinite. now we have around 500 pixel per second. - touchPoint.setPos(touchUpdate); - touchPoint.setScenePos(touchUpdate); - touchPoint.setScreenPos(touchUpdate); + touchPoint.setPosition(touchUpdate); + touchPoint.setScenePosition(touchUpdate); + touchPoint.setGlobalPosition(touchUpdate); + touchPoint.setState(QEventPoint::State::Updated); QTouchEvent touchEvent2(QEvent::TouchUpdate, m_touchScreen, Qt::NoModifier, - Qt::TouchPointMoved, - (QList<QTouchEvent::TouchPoint>() << touchPoint)); + (QList<QEventPoint>() << touchPoint)); QApplication::sendEvent(sw, &touchEvent2); QCOMPARE(s1->state(), QScroller::Dragging); @@ -189,14 +188,14 @@ void tst_QScroller::kineticScroll(tst_QScrollerWidget *sw, QPointF from, QPoint QVERIFY(qAbs(sw->currentPos.y() - calculatedPos.y()) < 1.0); // send the touch end - touchPoint.setPos(touchEnd); - touchPoint.setScenePos(touchEnd); - touchPoint.setScreenPos(touchEnd); + touchPoint.setPosition(touchEnd); + touchPoint.setScenePosition(touchEnd); + touchPoint.setGlobalPosition(touchEnd); + touchPoint.setState(QEventPoint::State::Released); QTouchEvent touchEvent5(QEvent::TouchEnd, m_touchScreen, Qt::NoModifier, - Qt::TouchPointReleased, - (QList<QTouchEvent::TouchPoint>() << touchPoint)); + (QList<QEventPoint>() << touchPoint)); QApplication::sendEvent(sw, &touchEvent5); } @@ -215,45 +214,41 @@ void tst_QScroller::kineticScrollNoTest(tst_QScrollerWidget *sw, QPointF from, Q QScrollerProperties sp1 = s1->scrollerProperties(); int fps = 60; - QTouchEvent::TouchPoint rawTouchPoint; - rawTouchPoint.setId(0); - // send the touch begin event - QTouchEvent::TouchPoint touchPoint(0); - touchPoint.setState(Qt::TouchPointPressed); - touchPoint.setPos(touchStart); - touchPoint.setScenePos(touchStart); - touchPoint.setScreenPos(touchStart); + QMutableEventPoint touchPoint(0); + touchPoint.setState(QEventPoint::State::Pressed); + touchPoint.setPosition(touchStart); + touchPoint.setScenePosition(touchStart); + touchPoint.setGlobalPosition(touchStart); QTouchEvent touchEvent1(QEvent::TouchBegin, m_touchScreen, Qt::NoModifier, - Qt::TouchPointPressed, - (QList<QTouchEvent::TouchPoint>() << touchPoint)); + (QList<QEventPoint>() << touchPoint)); QApplication::sendEvent(sw, &touchEvent1); // send the touch update far enough to trigger a scroll QTest::qWait(200); // we need to wait a little or else the speed would be infinite. now we have around 500 pixel per second. - touchPoint.setPos(touchUpdate); - touchPoint.setScenePos(touchUpdate); - touchPoint.setScreenPos(touchUpdate); + touchPoint.setState(QEventPoint::State::Updated); + touchPoint.setPosition(touchUpdate); + touchPoint.setScenePosition(touchUpdate); + touchPoint.setGlobalPosition(touchUpdate); QTouchEvent touchEvent2(QEvent::TouchUpdate, m_touchScreen, Qt::NoModifier, - Qt::TouchPointMoved, - (QList<QTouchEvent::TouchPoint>() << touchPoint)); + (QList<QEventPoint>() << touchPoint)); QApplication::sendEvent(sw, &touchEvent2); QTest::qWait(1000 / fps * 2); // wait until the first scroll move // send the touch end - touchPoint.setPos(touchEnd); - touchPoint.setScenePos(touchEnd); - touchPoint.setScreenPos(touchEnd); + touchPoint.setState(QEventPoint::State::Released); + touchPoint.setPosition(touchEnd); + touchPoint.setScenePosition(touchEnd); + touchPoint.setGlobalPosition(touchEnd); QTouchEvent touchEvent5(QEvent::TouchEnd, m_touchScreen, Qt::NoModifier, - Qt::TouchPointReleased, - (QList<QTouchEvent::TouchPoint>() << touchPoint)); + (QList<QEventPoint>() << touchPoint)); QApplication::sendEvent(sw, &touchEvent5); } |