From 5982ab8074d0cc6e82a65599294343fd7350b8c6 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 10 Apr 2025 17:13:01 +0300 Subject: [PATCH] QmlDesigner: Fix root item effect rendering ShaderEffects affecting root item are now correctly triggering root item render if they have changes. Fixes: QDS-15085 Change-Id: I7e675a9514e0de0a45d0709ff5e59e8371700b45 Reviewed-by: Thomas Hartmann --- .../instances/qt5nodeinstanceserver.cpp | 17 ++++++++++++++--- .../instances/qt5rendernodeinstanceserver.cpp | 4 +++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/tools/qmlpuppet/qmlpuppet/instances/qt5nodeinstanceserver.cpp b/src/tools/qmlpuppet/qmlpuppet/instances/qt5nodeinstanceserver.cpp index 85b5021f5ed..f4a11b1a2b8 100644 --- a/src/tools/qmlpuppet/qmlpuppet/instances/qt5nodeinstanceserver.cpp +++ b/src/tools/qmlpuppet/qmlpuppet/instances/qt5nodeinstanceserver.cpp @@ -189,10 +189,21 @@ QList subItems(QQuickItem *parentItem) const QList Qt5NodeInstanceServer::allItems() const { - if (rootNodeInstance().isValid()) - return rootNodeInstance().allItemsRecursive(); + if (!rootNodeInstance().isValid()) + return {}; - return {}; + QList allItems = rootNodeInstance().allItemsRecursive(); + + // ShaderEffects affecting root item will be root item siblings, so add those as well + QQuickItem *rootItem = rootNodeInstance().rootQuickItem(); + if (rootItem && rootItem->parentItem()) { + const QList siblings = rootItem->parentItem()->childItems(); + for (QQuickItem *sibling : siblings) { + if (sibling != rootItem) + allItems.append(sibling); + } + } + return allItems; } bool Qt5NodeInstanceServer::rootIsRenderable3DObject() const diff --git a/src/tools/qmlpuppet/qmlpuppet/instances/qt5rendernodeinstanceserver.cpp b/src/tools/qmlpuppet/qmlpuppet/instances/qt5rendernodeinstanceserver.cpp index c8f1d489e3e..37b1e3faaec 100644 --- a/src/tools/qmlpuppet/qmlpuppet/instances/qt5rendernodeinstanceserver.cpp +++ b/src/tools/qmlpuppet/qmlpuppet/instances/qt5rendernodeinstanceserver.cpp @@ -163,7 +163,9 @@ ServerNodeInstance Qt5RenderNodeInstanceServer::findNodeInstanceForItem(QQuickIt if (item) { if (hasInstanceForObject(item)) return instanceForObject(item); - else if (item->parentItem()) + else if (item == rootNodeInstance().rootQuickItem()->parentItem()) + return rootNodeInstance(); + else return findNodeInstanceForItem(item->parentItem()); }