diff options
| author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2025-12-15 16:14:22 +0200 |
|---|---|---|
| committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2025-12-15 16:14:22 +0200 |
| commit | b58ec3b086518da5aa573f99426235854c23e35f (patch) | |
| tree | 861a9935d8f1cdba2fdca546836a351736dbddbf /src/quicktestutils | |
| parent | 4826f86e274f1b29bd769e6790824f9e62a40f62 (diff) | |
| parent | 22032227d16c39211e2ebceef97d21f4d89c7c87 (diff) | |
Merge tag 'v6.5.8-lts-lgpl' into 6.56.5
Qt 6.5.8-lts-lgpl release
Diffstat (limited to 'src/quicktestutils')
| -rw-r--r-- | src/quicktestutils/quick/viewtestutils.cpp | 109 | ||||
| -rw-r--r-- | src/quicktestutils/quick/viewtestutils_p.h | 22 | ||||
| -rw-r--r-- | src/quicktestutils/quick/visualtestutils.cpp | 4 |
3 files changed, 86 insertions, 49 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 diff --git a/src/quicktestutils/quick/viewtestutils_p.h b/src/quicktestutils/quick/viewtestutils_p.h index 28666786f0..aec1b5063a 100644 --- a/src/quicktestutils/quick/viewtestutils_p.h +++ b/src/quicktestutils/quick/viewtestutils_p.h @@ -31,12 +31,9 @@ namespace QQuickViewTestUtils { QQuickView *createView(); - void flick(QQuickView *window, const QPoint &from, const QPoint &to, int duration); void centerOnScreen(QQuickView *window, const QSize &size); void centerOnScreen(QQuickView *window); void moveMouseAway(QQuickView *window); - void moveAndPress(QQuickView *window, const QPoint &position); - void moveAndRelease(QQuickView *window, const QPoint &position); QList<int> adjustIndexesForAddDisplaced(const QList<int> &indexes, int index, int count); QList<int> adjustIndexesForMove(const QList<int> &indexes, int from, int to, int count); @@ -185,14 +182,27 @@ namespace QQuickTest { void pointerPress(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, Qt::MouseButton button = Qt::LeftButton, - Qt::KeyboardModifiers modifiers = Qt::NoModifier); + Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1); void pointerMove(const QPointingDevice *dev, QQuickWindow *window, int pointId, - const QPoint &p); + const QPoint &p, int delay = -1); void pointerRelease(const QPointingDevice *dev, QQuickWindow *window, int pointId, const QPoint &p, Qt::MouseButton button = Qt::LeftButton, - Qt::KeyboardModifiers modifiers = Qt::NoModifier); + Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1); + + void pointerMoveAndPress(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &p, Qt::MouseButton button = Qt::LeftButton, + Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1); + + void pointerMoveAndRelease(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &p, Qt::MouseButton button = Qt::LeftButton, + Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1); + + void pointerFlick(const QPointingDevice *dev, QQuickWindow *window, + int pointId, const QPoint &from, const QPoint &to, int duration, + Qt::MouseButton button = Qt::LeftButton, + Qt::KeyboardModifiers modifiers = Qt::NoModifier, int delay = -1); } QT_END_NAMESPACE diff --git a/src/quicktestutils/quick/visualtestutils.cpp b/src/quicktestutils/quick/visualtestutils.cpp index c5e41f33f1..5a593ba9d0 100644 --- a/src/quicktestutils/quick/visualtestutils.cpp +++ b/src/quicktestutils/quick/visualtestutils.cpp @@ -145,6 +145,10 @@ bool QQuickVisualTestUtils::compareImages(const QImage &ia, const QImage &ib, QS QDebug(errorMessage) << "Images are of different formats:" << ia.format() << ib.format(); return false; } + if (ia.depth() != 32) { + QDebug(errorMessage) << "This function only supports bit depths of 32 - depth of images is:" << ia.depth(); + return false; + } int w = ia.width(); int h = ia.height(); |
