diff options
Diffstat (limited to 'src/quicktestutils/quick/viewtestutils.cpp')
| -rw-r--r-- | src/quicktestutils/quick/viewtestutils.cpp | 109 |
1 files changed, 66 insertions, 43 deletions
diff --git a/src/quicktestutils/quick/viewtestutils.cpp b/src/quicktestutils/quick/viewtestutils.cpp index 79c34168e5..1263d7667c 100644 --- a/src/quicktestutils/quick/viewtestutils.cpp +++ b/src/quicktestutils/quick/viewtestutils.cpp @@ -8,6 +8,7 @@ #include <QtQuick/QQuickView> #include <QtQuick/QQuickView> #include <QtGui/QScreen> +#include <QtGui/private/qhighdpiscaling_p.h> #include <QtGui/qpa/qwindowsysteminterface.h> #include <QtTest/QTest> @@ -52,33 +53,6 @@ void QQuickViewTestUtils::moveMouseAway(QQuickView *window) #endif } -void QQuickViewTestUtils::moveAndRelease(QQuickView *window, const QPoint &position) -{ - QTest::mouseMove(window, position); - QTest::mouseRelease(window, Qt::LeftButton, {}, position); -} - -void QQuickViewTestUtils::moveAndPress(QQuickView *window, const QPoint &position) -{ - QTest::mouseMove(window, position); - QTest::mousePress(window, Qt::LeftButton, {}, position); -} - -void QQuickViewTestUtils::flick(QQuickView *window, const QPoint &from, const QPoint &to, int duration) -{ - const int pointCount = 5; - QPoint diff = to - from; - - // send press, five equally spaced moves, and release. - moveAndPress(window, from); - - for (int i = 0; i < pointCount; ++i) - QTest::mouseMove(window, from + (i+1)*diff/pointCount, duration / pointCount); - - moveAndRelease(window, to); - QTest::qWait(50); -} - QList<int> QQuickViewTestUtils::adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count) { QList<int> result; @@ -524,50 +498,63 @@ namespace QQuickTest { static Qt::KeyboardModifiers pressedTabletModifiers = Qt::NoModifier; void pointerPress(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, - Qt::MouseButton button, Qt::KeyboardModifiers modifiers) + Qt::MouseButton button, Qt::KeyboardModifiers modifiers, int delay) { + const auto defaultDelay = QTest::defaultMouseDelay(); switch (dev->type()) { case QPointingDevice::DeviceType::Mouse: case QPointingDevice::DeviceType::TouchPad: - QTest::mousePress(window, button, modifiers, p); + QTest::mousePress(window, button, modifiers, p, delay >= 0 ? delay : defaultDelay ? defaultDelay : 1); break; case QPointingDevice::DeviceType::TouchScreen: + // TODO apply delay when QTBUG-95421 is fixed QTest::touchEvent(window, const_cast<QPointingDevice *>(dev)).press(pointId, p, window); QQuickTouchUtils::flush(window); break; case QPointingDevice::DeviceType::Puck: case QPointingDevice::DeviceType::Stylus: - case QPointingDevice::DeviceType::Airbrush: - QTest::lastMouseTimestamp += QTest::defaultMouseDelay(); + case QPointingDevice::DeviceType::Airbrush:{ + const QPointF nativeLocal = QHighDpi::toNativeLocalPosition(p, window); + const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window); + QTest::lastMouseTimestamp += delay >= 0 ? delay : defaultDelay ? defaultDelay : 1; pressedTabletButton = button; pressedTabletModifiers = modifiers; - QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, p, window->mapToGlobal(p), + QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, nativeLocal, nativeGlobal, button, 0.8, 0, 0, 0, 0, 0, modifiers); break; + } default: qWarning() << "can't send a press event from" << dev; break; } } - void pointerMove(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p) + void pointerMove(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, int delay) { + const auto defaultDelay = QTest::defaultMouseDelay(); switch (dev->type()) { case QPointingDevice::DeviceType::Mouse: case QPointingDevice::DeviceType::TouchPad: - QTest::mouseMove(window, p); + QTest::mouseMove(window, p, delay >= 0 ? delay : defaultDelay ? defaultDelay : 1); break; case QPointingDevice::DeviceType::TouchScreen: + // TODO apply delay when QTBUG-95421 is fixed QTest::touchEvent(window, const_cast<QPointingDevice *>(dev)).move(pointId, p, window); QQuickTouchUtils::flush(window); break; case QPointingDevice::DeviceType::Puck: case QPointingDevice::DeviceType::Stylus: - case QPointingDevice::DeviceType::Airbrush: - QTest::lastMouseTimestamp += QTest::defaultMouseDelay(); - QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, p, window->mapToGlobal(p), - pressedTabletButton, 0, 0, 0, 0, 0, 0, pressedTabletModifiers); + case QPointingDevice::DeviceType::Airbrush: { + const QPointF nativeLocal = QHighDpi::toNativeLocalPosition(p, window); + const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window); + const auto delay = QTest::defaultMouseDelay(); + // often QTest::defaultMouseDelay() == 0; but avoid infinite velocity + QTest::lastMouseTimestamp += delay >= 0 ? delay : defaultDelay ? defaultDelay : 1; + QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, nativeLocal, nativeGlobal, + pressedTabletButton, pressedTabletButton == Qt::NoButton ? 0 : 0.75, + 0, 0, 0, 0, 0, pressedTabletModifiers); break; + } default: qWarning() << "can't send a move event from" << dev; break; @@ -575,30 +562,66 @@ namespace QQuickTest { } void pointerRelease(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, - Qt::MouseButton button, Qt::KeyboardModifiers modifiers) + Qt::MouseButton button, Qt::KeyboardModifiers modifiers, int delay) { + const auto defaultDelay = QTest::defaultMouseDelay(); switch (dev->type()) { case QPointingDevice::DeviceType::Mouse: case QPointingDevice::DeviceType::TouchPad: - QTest::mouseRelease(window, button, modifiers, p); + QTest::mouseRelease(window, button, modifiers, p, delay >= 0 ? delay : defaultDelay ? defaultDelay : 1); break; case QPointingDevice::DeviceType::TouchScreen: + // TODO apply delay when QTBUG-95421 is fixed QTest::touchEvent(window, const_cast<QPointingDevice *>(dev)).release(pointId, p, window); QQuickTouchUtils::flush(window); break; case QPointingDevice::DeviceType::Puck: case QPointingDevice::DeviceType::Stylus: - case QPointingDevice::DeviceType::Airbrush: - QTest::lastMouseTimestamp += QTest::defaultMouseDelay(); - QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, p, window->mapToGlobal(p), + case QPointingDevice::DeviceType::Airbrush: { + const QPointF nativeLocal = QHighDpi::toNativeLocalPosition(p, window); + const QPointF nativeGlobal = QHighDpi::toNativeGlobalPosition(window->mapToGlobal(p), window); + QTest::lastMouseTimestamp += delay >= 0 ? delay : defaultDelay ? defaultDelay : 1; + QWindowSystemInterface::handleTabletEvent(window, QTest::lastMouseTimestamp, dev, nativeLocal, nativeGlobal, Qt::NoButton, 0, 0, 0, 0, 0, 0, modifiers); break; + } default: qWarning() << "can't send a press event from" << dev; break; } } + void pointerMoveAndPress(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &p, Qt::MouseButton button, + Qt::KeyboardModifiers modifiers, int delay) + { + pointerMove(dev, window, pointId, p, delay); + pointerPress(dev, window, pointId, p, button, modifiers); + } + + void pointerMoveAndRelease(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &p, Qt::MouseButton button, + Qt::KeyboardModifiers modifiers, int delay) + { + pointerMove(dev, window, pointId, p, delay); + pointerRelease(dev, window, pointId, p, button, modifiers); + } + + void pointerFlick(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &from, const QPoint &to, int duration, + Qt::MouseButton button, Qt::KeyboardModifiers modifiers, int delay) + { + const int pointCount = 5; + const QPoint diff = to - from; + + // send press, five equally spaced moves, and release. + pointerMoveAndPress(dev, window, pointId, from, button, modifiers, delay); + + for (int i = 0; i < pointCount; ++i) + pointerMove(dev, window, pointId, from + (i + 1) * diff / pointCount, duration / pointCount); + + pointerMoveAndRelease(dev, window, pointId, to, button, modifiers); + } } QT_END_NAMESPACE |
