summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Sutterud <lars.sutterud@qt.io>2023-04-26 10:45:55 +0200
committerLars Sutterud <lars.sutterud@qt.io>2023-05-04 15:23:13 +0200
commit2023b00bc31ab8cd0ba3cfe28a53b64e2ab07f08 (patch)
tree6ca5ea056a52e4acee858be1252f1c9d1b617a5c
parentceef0960d3291d53eba6ff410940f2b0c94ded17 (diff)
downloadqtmultimedia-2023b00bc31ab8cd0ba3cfe28a53b64e2ab07f08.tar.gz
Fix tst_QScreenCaptureIntegration::captureSecondaryScreen()
widgetOnSecondaryScreen is now positioned on the correct screen, avoiding a bug where screencapture would record with frameRate equal to the primary screen's refresh rate. Solution: - Creating the TestWidget with geometry corresponding to secondary screen, using screens.back()->geometry().topLeft().x(); - Sending correct screen size to capture(). Change-Id: I16c19bdfcb0cb713bfc4b7feab92eb3b1c04e716 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no>
-rw-r--r--tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp b/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp
index 72f38af43..c23525206 100644
--- a/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp
+++ b/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp
@@ -43,7 +43,6 @@ public:
auto widget = std::make_unique<QTestWidget>(firstColor, secondColor);
widget->setWindowTitle("Test QScreenCapture");
-
widget->setScreen(screen ? screen : QApplication::primaryScreen());
widget->setWindowFlags(flags);
widget->setGeometry(geometry);
@@ -226,9 +225,7 @@ void tst_QScreenCaptureIntegration::capture(QTestWidget &widget, const QPoint &d
QTest::qWait(delay);
const auto expectedFramesCount =
delay / static_cast<int>(1000 / std::min(widget.screen()->refreshRate(), 60.));
-
const int framesCount = static_cast<int>(sink.images().size());
-
QCOMPARE_LE(framesCount, expectedFramesCount + 2);
QCOMPARE_GE(framesCount, expectedFramesCount / 2);
@@ -384,21 +381,21 @@ void tst_QScreenCaptureIntegration::captureScreenByDefault()
void tst_QScreenCaptureIntegration::captureSecondaryScreen()
{
const auto screens = QApplication::screens();
-
if (screens.size() < 2)
QSKIP("2 or more screens required");
+ auto topLeft = screens.back()->geometry().topLeft().x();
+
auto widgetOnSecondaryScreen = QTestWidget::createAndShow(
Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint,
- QRect{ 200, 100, 430, 351 }, screens.back());
+ QRect{ topLeft + 200, 100, 430, 351 }, screens.back());
QVERIFY(QTest::qWaitForWindowExposed(widgetOnSecondaryScreen.get()));
auto widgetOnPrimaryScreen = QTestWidget::createAndShow(
Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint,
QRect{ 200, 100, 430, 351 }, screens.front(), QColor(0, 0, 0), QColor(0, 0, 0));
QVERIFY(QTest::qWaitForWindowExposed(widgetOnPrimaryScreen.get()));
-
- capture(*widgetOnSecondaryScreen, { 200, 100 }, QApplication::primaryScreen()->size(),
+ capture(*widgetOnSecondaryScreen, { 200, 100 }, screens.back()->size(),
[&screens](QScreenCapture &sc) { sc.setScreen(screens.back()); });
}