aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktestutils/quick/visualtestutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktestutils/quick/visualtestutils.cpp')
-rw-r--r--src/quicktestutils/quick/visualtestutils.cpp80
1 files changed, 78 insertions, 2 deletions
diff --git a/src/quicktestutils/quick/visualtestutils.cpp b/src/quicktestutils/quick/visualtestutils.cpp
index 12da74d519..eb04bf086b 100644
--- a/src/quicktestutils/quick/visualtestutils.cpp
+++ b/src/quicktestutils/quick/visualtestutils.cpp
@@ -1,13 +1,17 @@
// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "visualtestutils_p.h"
#include <QtCore/QCoreApplication>
+#include <QtCore/private/qvariantanimation_p.h>
#include <QtCore/QDebug>
#include <QtQuick/QQuickItem>
+#if QT_CONFIG(quick_itemview)
#include <QtQuick/private/qquickitemview_p.h>
+#endif
#include <QtQuickTest/QtQuickTest>
+#include <QtQuickTestUtils/private/viewtestutils_p.h>
QT_BEGIN_NAMESPACE
@@ -58,7 +62,62 @@ void QQuickVisualTestUtils::centerOnScreen(QQuickWindow *window)
window->setFramePosition(screenGeometry.center() - offset);
}
-bool QQuickVisualTestUtils::delegateVisible(QQuickItem *item)
+QPoint QQuickVisualTestUtils::lerpPoints(const QPoint &point1, const QPoint &point2, qreal t)
+{
+ return QPoint(_q_interpolate(point1.x(), point2.x(), t), _q_interpolate(point1.y(), point2.y(), t));
+};
+
+/*!
+ \internal
+
+ Convenience class to linearly interpolate between two pointer move points.
+
+ \code
+ PointLerper pointLerper(window);
+ // Lerps from {0, 0} to {15, 15}.
+ pointLerper.move(15, 15);
+ QVERIFY(parentButton->isHovered());
+
+ // Lerps from {15, 15} to {25, 25}.
+ pointLerper.move(25, 25);
+ QVERIFY(childButton->isHovered());
+ \endcode
+*/
+QQuickVisualTestUtils::PointLerper::PointLerper(QQuickWindow *window, const QPointingDevice *pointingDevice)
+ : mWindow(window)
+ , mPointingDevice(pointingDevice)
+{
+}
+
+/*!
+ \internal
+
+ Moves from the last pos (or {0, 0} if there have been no calls
+ to this function yet) to \a pos using linear interpolation
+ over 10 (default value) steps with 1 ms (default value) delays
+ between each step.
+*/
+void QQuickVisualTestUtils::PointLerper::move(const QPoint &pos, int steps, int delayInMilliseconds)
+{
+ forEachStep(steps, [&](qreal progress) {
+ QQuickTest::pointerMove(mPointingDevice, mWindow, 0, lerpPoints(mFrom, pos, progress));
+ QTest::qWait(delayInMilliseconds);
+ });
+ mFrom = pos;
+};
+
+void QQuickVisualTestUtils::PointLerper::move(int x, int y, int steps, int delayInMilliseconds)
+{
+ move(QPoint(x, y), steps, delayInMilliseconds);
+};
+
+/*!
+ \internal
+
+ Returns \c true if \c {item->isVisible()} returns \c true, and
+ the item is not culled.
+*/
+bool QQuickVisualTestUtils::isDelegateVisible(QQuickItem *item)
{
return item->isVisible() && !QQuickItemPrivate::get(item)->culled;
}
@@ -111,6 +170,7 @@ bool QQuickVisualTestUtils::compareImages(const QImage &ia, const QImage &ib, QS
return true;
}
+#if QT_CONFIG(quick_itemview)
/*!
\internal
@@ -139,6 +199,7 @@ QQuickItem *QQuickVisualTestUtils::findViewDelegateItem(QQuickItemView *itemView
return itemView->itemAtIndex(index);
}
+#endif
QQuickVisualTestUtils::QQuickApplicationHelper::QQuickApplicationHelper(QQmlDataTest *testCase,
const QString &testFilePath, const QVariantMap &initialProperties, const QStringList &qmlImportPaths)
@@ -198,6 +259,21 @@ void QQuickVisualTestUtils::MnemonicKeySimulator::click(Qt::Key key)
release(key);
}
+QPoint QQuickVisualTestUtils::mapCenterToWindow(const QQuickItem *item)
+{
+ return item->mapToScene(QPointF(item->width() / 2, item->height() / 2)).toPoint();
+}
+
+QPoint QQuickVisualTestUtils::mapToWindow(const QQuickItem *item, qreal relativeX, qreal relativeY)
+{
+ return item->mapToScene(QPointF(relativeX, relativeY)).toPoint();
+}
+
+QPoint QQuickVisualTestUtils::mapToWindow(const QQuickItem *item, const QPointF &relativePos)
+{
+ return mapToWindow(item, relativePos.x(), relativePos.y());
+}
+
QT_END_NAMESPACE
#include "moc_visualtestutils_p.cpp"