From 5f055fed2d05aab8571efb53ab910ebc85dd2824 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 22 Mar 2024 12:26:18 +0200 Subject: [PATCH] QmlDesigner: Render effected items with extra margin correctly Replaced old hardcoding of 40px margin for effects with actual sourceRect of the layer. Also check for effect first before clip, as that clip doesn't actually affect the clipped item itself, it only affects the children of the clipped item. Fixes: QDS-12303 Change-Id: Ia962c74cdefb16ed17bea34f0fc50649256d78fe Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Mahmoud Badri --- .../qml2puppet/instances/quickitemnodeinstance.cpp | 6 +++--- .../qml2puppet/instances/servernodeinstance.cpp | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/tools/qml2puppet/qml2puppet/instances/quickitemnodeinstance.cpp b/src/tools/qml2puppet/qml2puppet/instances/quickitemnodeinstance.cpp index 9d432fe0471..f2fbb97abab 100644 --- a/src/tools/qml2puppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/src/tools/qml2puppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -280,10 +280,10 @@ static bool layerEnabledAndEffect(QQuickItem *item) QRectF QuickItemNodeInstance::boundingRect() const { if (quickItem()) { - if (quickItem()->clip()) { - return quickItem()->boundingRect(); - } else if (layerEnabledAndEffect(quickItem())) { + if (layerEnabledAndEffect(quickItem())) { return ServerNodeInstance::effectAdjustedBoundingRect(quickItem()); + } else if (quickItem()->clip()) { + return quickItem()->boundingRect(); } else { QSize maximumSize(4000, 4000); auto isValidSize = [maximumSize] (const QRectF& rect) { diff --git a/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp b/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp index 758e18df359..ca05a5ef039 100644 --- a/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp +++ b/src/tools/qml2puppet/qml2puppet/instances/servernodeinstance.cpp @@ -26,6 +26,8 @@ #include +#include + #include #include #include @@ -116,8 +118,13 @@ bool ServerNodeInstance::isSubclassOf(QObject *object, const QByteArray &superTy QRectF ServerNodeInstance::effectAdjustedBoundingRect(QQuickItem *item) { - if (item) - return item->boundingRect().adjusted(-40, -40, 40, 40); + if (item) { + QQuickItemPrivate *pItem = QQuickItemPrivate::get(item); + if (pItem && pItem->layer() && pItem->layer()->sourceRect().isValid()) + return pItem->layer()->sourceRect(); + else + return item->boundingRect(); + } return {}; }