aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickitem2
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2021-06-15 12:45:03 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2021-06-16 09:38:40 +0200
commit7b5c1063de0034d4b9e4345b9493aa3beba62a89 (patch)
tree9e2d2bb6714e87977a3c39f2a3136675959947ae /tests/auto/quick/qquickitem2
parent386a5b85b7fa201e26e8795373d77457728c806a (diff)
Avoid unnecessary palette allocations
The palette provider allocates QQuickPalette instances lazily in the palette() implementation. Since we only only test here whether a palette is present, uses the non-mutating providesPalette instead. As a drive-by, remove the paletteData() check from setCurrentColorGroup; paletteData() asserts if it would return nullptr, so this check is wrong and misleading. Amends 3675f2b235f32e05cf6d754e81e0e8f8ddd59752. Pick-to: 6.2 Change-Id: I9701b3520998ec538ef560106a6c6078e7f1c4d8 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/quick/qquickitem2')
-rw-r--r--tests/auto/quick/qquickitem2/data/paletteAllocate.qml35
-rw-r--r--tests/auto/quick/qquickitem2/tst_qquickitem.cpp41
2 files changed, 76 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem2/data/paletteAllocate.qml b/tests/auto/quick/qquickitem2/data/paletteAllocate.qml
new file mode 100644
index 0000000000..6c959ddbcb
--- /dev/null
+++ b/tests/auto/quick/qquickitem2/data/paletteAllocate.qml
@@ -0,0 +1,35 @@
+import QtQuick
+
+Item {
+ id: root
+ width: 300
+ height: 300
+ visible: true
+
+ palette.active.base: "blue"
+ palette.inactive.base: "red"
+ palette.disabled.base: "gray"
+
+ Rectangle {
+ id: background
+ objectName: "background"
+
+ anchors.centerIn: parent
+ width: parent.width / 2
+ height: parent.height / 2
+
+ color: root.palette.base
+
+ Rectangle {
+ id: foreground
+ objectName: "foreground"
+
+ anchors.centerIn: parent
+ width: parent.width / 2
+ height: parent.height / 2
+
+ color: root.palette.base
+ border.color: "black"
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
index 843b916eb1..4d381d59a3 100644
--- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp
@@ -134,7 +134,9 @@ private slots:
void isAncestorOf();
void grab();
+
void colorGroup();
+ void paletteAllocated();
private:
QQmlEngine engine;
@@ -3770,6 +3772,45 @@ void tst_QQuickItem::colorGroup()
QCOMPARE(foreground->property("color").value<QColor>(), palette->inactive()->base());
}
+/*!
+ Verify that items don't allocate their own QQuickPalette instance
+ unnecessarily.
+*/
+void tst_QQuickItem::paletteAllocated()
+{
+ QQuickView view;
+
+ view.setSource(testFileUrl("paletteAllocate.qml"));
+
+ QQuickItem *root = qobject_cast<QQuickItem *>(view.rootObject());
+ QQuickItem *background = root->findChild<QQuickItem *>("background");
+ QVERIFY(background);
+ QQuickItem *foreground = root->findChild<QQuickItem *>("foreground");
+ QVERIFY(foreground);
+
+ bool backgroundHasPalette = false;
+ bool foregroundHasPalette = false;
+ QObject::connect(background, &QQuickItem::paletteCreated, this, [&]{ backgroundHasPalette = true; });
+ QObject::connect(foreground, &QQuickItem::paletteCreated, this, [&]{ foregroundHasPalette = true; });
+
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ QVERIFY(!backgroundHasPalette);
+ QVERIFY(!foregroundHasPalette);
+
+ view.close();
+
+ QVERIFY(!backgroundHasPalette);
+ QVERIFY(!foregroundHasPalette);
+
+ auto quickpalette = foreground->property("palette").value<QQuickPalette*>();
+ QVERIFY(!backgroundHasPalette);
+ QVERIFY(quickpalette);
+ QVERIFY(foregroundHasPalette);
+}
+
QTEST_MAIN(tst_QQuickItem)
#include "tst_qquickitem.moc"