diff options
author | Lars Sutterud <lars.sutterud@qt.io> | 2023-04-26 10:45:55 +0200 |
---|---|---|
committer | Lars Sutterud <lars.sutterud@qt.io> | 2023-05-04 15:23:13 +0200 |
commit | 2023b00bc31ab8cd0ba3cfe28a53b64e2ab07f08 (patch) | |
tree | 6ca5ea056a52e4acee858be1252f1c9d1b617a5c | |
parent | ceef0960d3291d53eba6ff410940f2b0c94ded17 (diff) | |
download | qtmultimedia-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.cpp | 11 |
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()); }); } |