QmlDesigner: Add option for layer.effect when creating effects

(cherry picked from commit 3726caa5de)

Task-number: QDS-8162
Change-Id: I9b98d4ae264f4b6a703eb5bfdeb6e1fb546e5a37
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2022-11-03 17:19:48 +01:00
committed by Tim Jenssen
parent c299d95ea7
commit cdc0f72ecf

View File

@@ -39,6 +39,8 @@
#include "modelmerger.h" #include "modelmerger.h"
#include "rewritingexception.h" #include "rewritingexception.h"
#include <coreplugin/icore.h>
#include <QUrl> #include <QUrl>
#include <QPlainTextEdit> #include <QPlainTextEdit>
#include <QFileInfo> #include <QFileInfo>
@@ -181,12 +183,22 @@ QmlItemNode QmlItemNode::createQmlItemNodeFromFont(AbstractView *view,
return newQmlItemNode; return newQmlItemNode;
} }
static bool useLayerEffect()
{
QSettings *settings = Core::ICore::settings();
const QString layerEffectEntry = "QML/Designer/UseLayerEffect";
return settings->value(layerEffectEntry, true).toBool();
}
QmlItemNode QmlItemNode::createQmlItemNodeForEffect(AbstractView *view, QmlItemNode QmlItemNode::createQmlItemNodeForEffect(AbstractView *view,
const QmlItemNode &parentNode, const QmlItemNode &parentNode,
const QString &effectName) const QString &effectName)
{ {
QmlItemNode newQmlItemNode; QmlItemNode newQmlItemNode;
const bool layerEffect = useLayerEffect();
QmlDesigner::Import import = Import::createLibraryImport("Effects." + effectName, "1.0"); QmlDesigner::Import import = Import::createLibraryImport("Effects." + effectName, "1.0");
try { try {
if (!view->model()->hasImport(import, true, true)) if (!view->model()->hasImport(import, true, true))
@@ -197,11 +209,17 @@ QmlItemNode QmlItemNode::createQmlItemNodeForEffect(AbstractView *view,
TypeName type(effectName.toUtf8()); TypeName type(effectName.toUtf8());
newQmlItemNode = QmlItemNode(view->createModelNode(type, 1, 0)); newQmlItemNode = QmlItemNode(view->createModelNode(type, 1, 0));
NodeAbstractProperty parentProperty = parentNode.defaultNodeAbstractProperty(); NodeAbstractProperty parentProperty = layerEffect
? parentNode.nodeAbstractProperty("layer.effect")
: parentNode.defaultNodeAbstractProperty();
parentProperty.reparentHere(newQmlItemNode); parentProperty.reparentHere(newQmlItemNode);
newQmlItemNode.modelNode().bindingProperty("source").setExpression("parent"); if (!layerEffect) {
newQmlItemNode.modelNode().bindingProperty("anchors.fill").setExpression("parent"); newQmlItemNode.modelNode().bindingProperty("source").setExpression("parent");
newQmlItemNode.modelNode().bindingProperty("anchors.fill").setExpression("parent");
} else {
parentNode.modelNode().variantProperty("layer.enabled").setValue(true);
}
QTC_ASSERT(newQmlItemNode.isValid(), return QmlItemNode()); QTC_ASSERT(newQmlItemNode.isValid(), return QmlItemNode());