summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/graphicsview/qgraphicsscene
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-02-12 16:26:38 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-02-20 13:54:34 +0000
commited3ed0b9db97a8fab0c03add23228b6b0a96f171 (patch)
tree130ebf9b291fa140dc39c331c0717cd55aab69b1 /tests/auto/widgets/graphicsview/qgraphicsscene
parent76617fdb56a5498c01ad75bc461687ded7e8f8d7 (diff)
Fix touch point positions of non-transformable QGraphicsItems
TouchEvent::TouchPoint::pos was not updated in QGraphicsScenePrivate::updateTouchPointsForItem(). To prevent the transformation being calculated repeatedly for each touch point member, extract a function genericMapFromSceneTransform() from genericMapFromScene() returning the transformation and use that whereever multiple points are transformed. Add a test, extracting helper functionality from tst_QGraphicsItem::touchEventPropagation(). In addition, fold tst_QGraphicsScene::checkTouchPointsEllipseDiameters() from c48f4bde0044bd5b23af231f3639d0779ecbdb03 into this test, so that it is testing all transformations. Task-number: QTBUG-66192 Change-Id: If71886d2c14c4e216f7781ea2f22f1adc444e6cf Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'tests/auto/widgets/graphicsview/qgraphicsscene')
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp76
1 files changed, 0 insertions, 76 deletions
diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
index fe8571abf1..3b340d06ab 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -254,7 +254,6 @@ private slots:
void zeroScale();
void focusItemChangedSignal();
void minimumRenderSize();
- void checkTouchPointsEllipseDiameters();
// task specific tests below me
void task139710_bspTreeCrash();
@@ -4765,81 +4764,6 @@ void tst_QGraphicsScene::minimumRenderSize()
QVERIFY(smallChild->repaints > smallerGrandChild->repaints);
}
-class TouchItem : public QGraphicsRectItem
-{
-public:
- TouchItem() : QGraphicsRectItem(QRectF(-10, -10, 20, 20)),
- seenTouch(false)
- {
- setAcceptTouchEvents(true);
- setFlag(QGraphicsItem::ItemIgnoresTransformations);
- }
- bool seenTouch;
- QList<QTouchEvent::TouchPoint> touchPoints;
-protected:
- bool sceneEvent(QEvent *event) override
- {
- switch (event->type()) {
- case QEvent::TouchBegin:
- case QEvent::TouchUpdate:
- case QEvent::TouchEnd:
- seenTouch = true;
- touchPoints = static_cast<QTouchEvent *>(event)->touchPoints();
- event->accept();
- return true;
- default:
- break;
- }
- return QGraphicsRectItem::sceneEvent(event);
- }
-};
-
-void tst_QGraphicsScene::checkTouchPointsEllipseDiameters()
-{
- QGraphicsScene scene;
- QGraphicsView view(&scene);
- scene.setSceneRect(1, 1, 198, 198);
- view.scale(1.5, 1.5);
- view.setFocus();
- TouchItem *rect = new TouchItem;
- scene.addItem(rect);
- view.show();
- QApplication::setActiveWindow(&view);
- QVERIFY(QTest::qWaitForWindowActive(&view));
-
- const QSizeF ellipseDiameters(10.0, 10.0);
- QTouchEvent::TouchPoint touchPoint(0);
- touchPoint.setState(Qt::TouchPointPressed);
- touchPoint.setPos(view.mapFromScene(rect->mapToScene(rect->boundingRect().center())));
- touchPoint.setScreenPos(view.mapToGlobal(touchPoint.pos().toPoint()));
- touchPoint.setEllipseDiameters(ellipseDiameters);
-
- QList<QTouchEvent::TouchPoint> touchPoints = { touchPoint };
-
- QTouchDevice *testDevice = QTest::createTouchDevice(QTouchDevice::TouchPad);
- QTouchEvent touchEvent(QEvent::TouchBegin,
- testDevice,
- Qt::NoModifier,
- Qt::TouchPointPressed,
- touchPoints);
- QApplication::sendEvent(view.viewport(), &touchEvent);
- QVERIFY(rect->seenTouch);
- QVERIFY(rect->touchPoints.size() == 1);
- QCOMPARE(ellipseDiameters, rect->touchPoints.first().ellipseDiameters());
-
- rect->seenTouch = false;
- rect->touchPoints.clear();
- QTouchEvent touchUpdateEvent(QEvent::TouchUpdate,
- testDevice,
- Qt::NoModifier,
- Qt::TouchPointMoved,
- touchPoints);
- QApplication::sendEvent(view.viewport(), &touchEvent);
- QVERIFY(rect->seenTouch);
- QVERIFY(rect->touchPoints.size() == 1);
- QCOMPARE(ellipseDiameters, rect->touchPoints.first().ellipseDiameters());
-}
-
void tst_QGraphicsScene::taskQTBUG_15977_renderWithDeviceCoordinateCache()
{
QGraphicsScene scene;