tst_QGraphicsScene: Pass on High DPI screens

The test requires High DPI scaling to be disabled since it
captures widgets.

Turn it off initially and introduce a member variable
containing a suitable size depending on the screen to make the
test pass on High DPI screens without violating minimum window
widths on Windows.

Change-Id: Ida9f306cff6abd48ee5de7001c7670a0da60c6c2
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
This commit is contained in:
Friedemann Kleint 2019-08-16 10:06:56 +02:00
parent ab55046862
commit c2aaa9e18e

View File

@ -182,6 +182,10 @@ protected:
class tst_QGraphicsScene : public QObject class tst_QGraphicsScene : public QObject
{ {
Q_OBJECT Q_OBJECT
public:
tst_QGraphicsScene();
static void initMain() { QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling); }
public slots: public slots:
void cleanup(); void cleanup();
@ -284,8 +288,19 @@ private slots:
void taskQTBUG_15977_renderWithDeviceCoordinateCache(); void taskQTBUG_15977_renderWithDeviceCoordinateCache();
void taskQTBUG_16401_focusItem(); void taskQTBUG_16401_focusItem();
void taskQTBUG_42915_focusNextPrevChild(); void taskQTBUG_42915_focusNextPrevChild();
private:
QRect m_availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
QSize m_testSize;
}; };
tst_QGraphicsScene::tst_QGraphicsScene()
{
const int testSize = qMax(200, m_availableGeometry.width() / 10);
m_testSize.setWidth(testSize);
m_testSize.setHeight(testSize);
}
void tst_QGraphicsScene::cleanup() void tst_QGraphicsScene::cleanup()
{ {
// ensure not even skipped tests with custom input context leave it dangling // ensure not even skipped tests with custom input context leave it dangling
@ -1085,6 +1100,7 @@ void tst_QGraphicsScene::addItem()
CustomView view; CustomView view;
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.setScene(&scene); view.setScene(&scene);
view.resize(m_testSize);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowExposed(&view));
QCoreApplication::processEvents(); QCoreApplication::processEvents();
@ -2597,6 +2613,7 @@ void tst_QGraphicsScene::render()
QGraphicsView view; QGraphicsView view;
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
QGraphicsScene scene(&view); QGraphicsScene scene(&view);
scene.addEllipse(QRectF(-10, -10, 20, 20), QPen(Qt::black, 0), QBrush(Qt::white)); scene.addEllipse(QRectF(-10, -10, 20, 20), QPen(Qt::black, 0), QBrush(Qt::white));
scene.addEllipse(QRectF(-2, -7, 4, 4), QPen(Qt::black, 0), QBrush(Qt::yellow))->setZValue(1); scene.addEllipse(QRectF(-2, -7, 4, 4), QPen(Qt::black, 0), QBrush(Qt::yellow))->setZValue(1);
@ -2678,34 +2695,32 @@ void tst_QGraphicsScene::renderItemsWithNegativeWidthOrHeight()
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) || defined(Q_OS_WINRT) #if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) || defined(Q_OS_WINRT)
QSKIP("Test only works on platforms with resizable windows"); QSKIP("Test only works on platforms with resizable windows");
#endif #endif
QGraphicsScene scene(0, 0, m_testSize.width(), m_testSize.height());
QGraphicsScene scene(0, 0, 150, 150);
// Add item with negative width. // Add item with negative width.
QGraphicsRectItem *item1 = new QGraphicsRectItem(0, 0, -150, 50); QGraphicsRectItem *item1 = new QGraphicsRectItem(0, 0, -m_testSize.width(), 50);
item1->setBrush(Qt::red); item1->setBrush(Qt::red);
item1->setPos(150, 50); item1->setPos(m_testSize.width(), 50);
scene.addItem(item1); scene.addItem(item1);
// Add item with negative height. // Add item with negative height.
QGraphicsRectItem *item2 = new QGraphicsRectItem(0, 0, 50, -150); QGraphicsRectItem *item2 = new QGraphicsRectItem(0, 0, 50, -m_testSize.height());
item2->setBrush(Qt::blue); item2->setBrush(Qt::blue);
item2->setPos(50, 150); item2->setPos(50, m_testSize.height());
scene.addItem(item2); scene.addItem(item2);
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.setFrameStyle(QFrame::NoFrame); view.setFrameStyle(QFrame::NoFrame);
view.resize(150, 150);
view.show(); view.show();
QCOMPARE(view.viewport()->size(), QSize(150, 150)); QTRY_COMPARE(view.viewport()->size(), m_testSize);
QImage expected(view.viewport()->size(), QImage::Format_RGB32); QImage expected(view.viewport()->size(), QImage::Format_RGB32);
view.viewport()->render(&expected); view.viewport()->render(&expected);
// Make sure the scene background is the same as the viewport background. // Make sure the scene background is the same as the viewport background.
scene.setBackgroundBrush(view.viewport()->palette().brush(view.viewport()->backgroundRole())); scene.setBackgroundBrush(view.viewport()->palette().brush(view.viewport()->backgroundRole()));
QImage actual(150, 150, QImage::Format_RGB32); QImage actual(m_testSize, QImage::Format_RGB32);
QPainter painter(&actual); QPainter painter(&actual);
scene.render(&painter); scene.render(&painter);
painter.end(); painter.end();
@ -2730,6 +2745,7 @@ void tst_QGraphicsScene::contextMenuEvent()
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
view.show(); view.show();
view.activateWindow(); view.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
@ -2746,7 +2762,7 @@ void tst_QGraphicsScene::contextMenuEvent()
class ContextMenuItem : public QGraphicsRectItem class ContextMenuItem : public QGraphicsRectItem
{ {
public: public:
ContextMenuItem() : QGraphicsRectItem(0, 0, 100, 100) ContextMenuItem(const QSize &s) : QGraphicsRectItem(0, 0, s.width(), s.height())
{ setBrush(Qt::red); } { setBrush(Qt::red); }
protected: protected:
@ -2760,27 +2776,30 @@ void tst_QGraphicsScene::contextMenuEvent_ItemIgnoresTransformations()
QSKIP("Test fails on some Android devices (QTBUG-44430)"); QSKIP("Test fails on some Android devices (QTBUG-44430)");
#endif #endif
QGraphicsScene scene(0, 0, 200, 200); QGraphicsScene scene(0, 0, m_testSize.width(), m_testSize.height());
ContextMenuItem *item = new ContextMenuItem; const QSize itemSize = m_testSize / 2;
ContextMenuItem *item = new ContextMenuItem(itemSize);
item->setFlag(QGraphicsItem::ItemIgnoresTransformations); item->setFlag(QGraphicsItem::ItemIgnoresTransformations);
scene.addItem(item); scene.addItem(item);
QWidget topLevel; QWidget topLevel;
topLevel.setWindowTitle(QTest::currentTestFunction()); topLevel.setWindowTitle(QTest::currentTestFunction());
topLevel.resize(m_testSize);
QGraphicsView view(&scene, &topLevel); QGraphicsView view(&scene, &topLevel);
view.resize(200, 200);
topLevel.show(); topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel)); QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
{ {
QPoint pos(50, 50); QPoint pos(itemSize.width() / 2, itemSize.height() / 2);
QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore(); event.ignore();
QApplication::sendEvent(view.viewport(), &event); QApplication::sendEvent(view.viewport(), &event);
QVERIFY(event.isAccepted()); QVERIFY(event.isAccepted());
} }
{ {
QPoint pos(150, 150); QPoint pos(itemSize.width() * 3 / 2, itemSize.height() * 3 / 2);
QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore(); event.ignore();
QApplication::sendEvent(view.viewport(), &event); QApplication::sendEvent(view.viewport(), &event);
@ -2788,14 +2807,14 @@ void tst_QGraphicsScene::contextMenuEvent_ItemIgnoresTransformations()
} }
view.scale(1.5, 1.5); view.scale(1.5, 1.5);
{ {
QPoint pos(25, 25); QPoint pos(itemSize.width() / 4, itemSize.height() / 4);
QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore(); event.ignore();
QApplication::sendEvent(view.viewport(), &event); QApplication::sendEvent(view.viewport(), &event);
QVERIFY(event.isAccepted()); QVERIFY(event.isAccepted());
} }
{ {
QPoint pos(55, 55); QPoint pos(itemSize.width() / 2 + 5, itemSize.height() / 2 + 5);
QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos));
event.ignore(); event.ignore();
QApplication::sendEvent(view.viewport(), &event); QApplication::sendEvent(view.viewport(), &event);
@ -2844,6 +2863,7 @@ void tst_QGraphicsScene::update2()
scene.setSceneRect(-200, -200, 200, 200); scene.setSceneRect(-200, -200, 200, 200);
CustomView view; CustomView view;
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
view.setScene(&scene); view.setScene(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
@ -3514,6 +3534,7 @@ void tst_QGraphicsScene::task160653_selectionChanged()
QSignalSpy spy(&scene, &QGraphicsScene::selectionChanged); QSignalSpy spy(&scene, &QGraphicsScene::selectionChanged);
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowActive(&view)); QVERIFY(QTest::qWaitForWindowActive(&view));
QTest::mouseClick( QTest::mouseClick(
@ -3803,6 +3824,7 @@ void tst_QGraphicsScene::inputMethod()
QGraphicsScene scene; QGraphicsScene scene;
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.resize(m_testSize);
view.show(); view.show();
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
@ -4044,6 +4066,7 @@ void tst_QGraphicsScene::isActive()
{ {
QWidget toplevel1; QWidget toplevel1;
toplevel1.setWindowTitle(QTest::currentTestFunction()); toplevel1.setWindowTitle(QTest::currentTestFunction());
toplevel1.resize(m_testSize);
QHBoxLayout *layout = new QHBoxLayout; QHBoxLayout *layout = new QHBoxLayout;
toplevel1.setLayout(layout); toplevel1.setLayout(layout);
QGraphicsView *view1 = new QGraphicsView(&scene1); QGraphicsView *view1 = new QGraphicsView(&scene1);
@ -4109,9 +4132,9 @@ void tst_QGraphicsScene::isActive()
{ {
const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
QWidget toplevel2; QWidget toplevel2;
toplevel2.setWindowTitle(QTest::currentTestFunction()); toplevel2.setWindowTitle(QTest::currentTestFunction());
toplevel2.resize(m_testSize);
QHBoxLayout *layout = new QHBoxLayout; QHBoxLayout *layout = new QHBoxLayout;
toplevel2.setLayout(layout); toplevel2.setLayout(layout);
QGraphicsView *view1 = new QGraphicsView(&scene1); QGraphicsView *view1 = new QGraphicsView(&scene1);
@ -4124,7 +4147,7 @@ void tst_QGraphicsScene::isActive()
QVERIFY(!scene1.hasFocus()); QVERIFY(!scene1.hasFocus());
QVERIFY(!scene2.hasFocus()); QVERIFY(!scene2.hasFocus());
toplevel2.move(availableGeometry.topLeft() + QPoint(50, 50)); toplevel2.move(m_availableGeometry.topLeft() + QPoint(50, 50));
toplevel2.show(); toplevel2.show();
QApplication::setActiveWindow(&toplevel2); QApplication::setActiveWindow(&toplevel2);
QVERIFY(QTest::qWaitForWindowActive(&toplevel2)); QVERIFY(QTest::qWaitForWindowActive(&toplevel2));
@ -4173,7 +4196,8 @@ void tst_QGraphicsScene::isActive()
QVERIFY(!scene2.hasFocus()); QVERIFY(!scene2.hasFocus());
QGraphicsView topLevelView; QGraphicsView topLevelView;
topLevelView.move(availableGeometry.topLeft() + QPoint(500, 50)); topLevelView.move(toplevel2.geometry().topRight() + QPoint(100, 50));
topLevelView.resize(m_testSize);
topLevelView.show(); topLevelView.show();
QApplication::setActiveWindow(&topLevelView); QApplication::setActiveWindow(&topLevelView);
topLevelView.setFocus(); topLevelView.setFocus();
@ -4219,6 +4243,7 @@ void tst_QGraphicsScene::isActive()
{ {
QWidget toplevel3; QWidget toplevel3;
toplevel3.resize(m_testSize);
QHBoxLayout *layout = new QHBoxLayout; QHBoxLayout *layout = new QHBoxLayout;
toplevel3.setLayout(layout); toplevel3.setLayout(layout);
QGraphicsView *view1 = new QGraphicsView(&scene1); QGraphicsView *view1 = new QGraphicsView(&scene1);
@ -4297,6 +4322,7 @@ void tst_QGraphicsScene::siblingIndexAlwaysValid()
QGraphicsView view2(&scene2); QGraphicsView view2(&scene2);
view2.setWindowTitle(QTest::currentTestFunction()); view2.setWindowTitle(QTest::currentTestFunction());
view2.resize(m_testSize);
// first add the blue rect // first add the blue rect
QGraphicsRectItem* const item1 = new QGraphicsRectItem(QRect( 10, 10, 10, 10 )); QGraphicsRectItem* const item1 = new QGraphicsRectItem(QRect( 10, 10, 10, 10 ));
@ -4341,6 +4367,7 @@ void tst_QGraphicsScene::removeFullyTransparentItem()
CustomView view; CustomView view;
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
view.setScene(&scene); view.setScene(&scene);
view.show(); view.show();
QApplication::setActiveWindow(&view); QApplication::setActiveWindow(&view);
@ -4398,6 +4425,7 @@ void tst_QGraphicsScene::taskQT657_paintIntoCacheWithTransparentParts()
QGraphicsScene *scene = new QGraphicsScene(); QGraphicsScene *scene = new QGraphicsScene();
CustomView view; CustomView view;
view.resize(m_testSize);
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.setScene(scene); view.setScene(scene);
@ -4442,6 +4470,7 @@ void tst_QGraphicsScene::taskQTBUG_7863_paintIntoCacheWithTransparentParts()
QGraphicsScene *scene = new QGraphicsScene(); QGraphicsScene *scene = new QGraphicsScene();
CustomView view; CustomView view;
view.resize(m_testSize);
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.setScene(scene); view.setScene(scene);
@ -4483,6 +4512,7 @@ void tst_QGraphicsScene::taskQTBUG_7863_paintIntoCacheWithTransparentParts()
QGraphicsScene *scene = new QGraphicsScene(); QGraphicsScene *scene = new QGraphicsScene();
CustomView view; CustomView view;
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
view.setScene(scene); view.setScene(scene);
scene->addItem(rectItem); scene->addItem(rectItem);
@ -4522,6 +4552,7 @@ void tst_QGraphicsScene::taskQTBUG_7863_paintIntoCacheWithTransparentParts()
QGraphicsScene *scene = new QGraphicsScene(); QGraphicsScene *scene = new QGraphicsScene();
CustomView view; CustomView view;
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
view.setScene(scene); view.setScene(scene);
scene->addItem(rectItem); scene->addItem(rectItem);
@ -4737,6 +4768,7 @@ void tst_QGraphicsScene::minimumRenderSize()
CustomView view; CustomView view;
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
view.setScene(&scene); view.setScene(&scene);
view.show(); view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowExposed(&view));
@ -4790,6 +4822,7 @@ void tst_QGraphicsScene::focusOnTouch()
QGraphicsScene scene; QGraphicsScene scene;
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
scene.setSceneRect(0, 0, 100, 100); scene.setSceneRect(0, 0, 100, 100);
QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100); QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100);
rect->setFlag(QGraphicsItem::ItemIsFocusable, true); rect->setFlag(QGraphicsItem::ItemIsFocusable, true);
@ -4847,6 +4880,7 @@ void tst_QGraphicsScene::taskQTBUG_16401_focusItem()
{ {
QGraphicsScene scene; QGraphicsScene scene;
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.resize(m_testSize);
QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100); QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100);
rect->setFlag(QGraphicsItem::ItemIsFocusable); rect->setFlag(QGraphicsItem::ItemIsFocusable);
@ -4878,6 +4912,7 @@ void tst_QGraphicsScene::taskQTBUG_42915_focusNextPrevChild()
QGraphicsScene scene; QGraphicsScene scene;
QGraphicsView view(&scene); QGraphicsView view(&scene);
view.setWindowTitle(QTest::currentTestFunction()); view.setWindowTitle(QTest::currentTestFunction());
view.resize(m_testSize);
scene.setSceneRect(1, 1, 198, 198); scene.setSceneRect(1, 1, 198, 198);
view.setFocus(); view.setFocus();