diff --git a/src/plugins/effectmakernew/CMakeLists.txt b/src/plugins/effectmakernew/CMakeLists.txt index 21646e31322..10cff8f2737 100644 --- a/src/plugins/effectmakernew/CMakeLists.txt +++ b/src/plugins/effectmakernew/CMakeLists.txt @@ -22,5 +22,6 @@ add_qtc_plugin(EffectMakerNew effectmakercontextobject.cpp effectmakercontextobject.h shaderfeatures.cpp shaderfeatures.h syntaxhighlighterdata.cpp syntaxhighlighterdata.h + propertyhandler.cpp propertyhandler.h BUILD_DEFAULT OFF ) diff --git a/src/plugins/effectmakernew/compositionnode.cpp b/src/plugins/effectmakernew/compositionnode.cpp index 74e43c76d56..8952a29f3ad 100644 --- a/src/plugins/effectmakernew/compositionnode.cpp +++ b/src/plugins/effectmakernew/compositionnode.cpp @@ -5,6 +5,7 @@ #include "effectutils.h" #include "effectmakeruniformsmodel.h" +#include "propertyhandler.h" #include "uniform.h" #include @@ -100,8 +101,11 @@ void CompositionNode::parse(const QString &qenPath) // parse properties QJsonArray jsonProps = json.value("properties").toArray(); - for (const auto /*QJsonValueRef*/ &prop : jsonProps) - m_unifomrsModel.addUniform(new Uniform(prop.toObject())); + for (const auto /*QJsonValueRef*/ &prop : jsonProps) { + const auto uniform = new Uniform(prop.toObject()); + m_unifomrsModel.addUniform(uniform); + g_propertyData.insert(uniform->name(), uniform->value()); + } // Seek through code to get tags QStringList shaderCodeLines; diff --git a/src/plugins/effectmakernew/effectmakermodel.cpp b/src/plugins/effectmakernew/effectmakermodel.cpp index 94de609c2e8..6dbe9a78674 100644 --- a/src/plugins/effectmakernew/effectmakermodel.cpp +++ b/src/plugins/effectmakernew/effectmakermodel.cpp @@ -781,11 +781,11 @@ void EffectMakerModel::updateCustomUniforms() } } QString valueString = value.isEmpty() ? QString() : QString(": %1").arg(value); - QString bindedValueString = bindedValue.isEmpty() ? QString() : QString(": %1").arg(bindedValue); + QString boundValueString = bindedValue.isEmpty() ? QString() : QString(": %1").arg(bindedValue); // Custom values are not readonly, others inside the effect can be QString readOnly = uniform->useCustomValue() ? QString() : QStringLiteral("readonly "); previewEffectPropertiesString += " " + readOnly + "property " + type + " " - + propertyName + valueString + '\n'; + + propertyName + boundValueString + '\n'; // Define type properties are not added into exports if (!isDefine) { if (uniform->useCustomValue()) { @@ -797,7 +797,7 @@ void EffectMakerModel::updateCustomUniforms() } exportedEffectPropertiesString += QStringLiteral(" ") + readOnly + "property " + type + " " + propertyName - + bindedValueString + '\n'; + + boundValueString + '\n'; } else { // Custom values are not added into root exportedRootPropertiesString += " property " + type + " " + propertyName @@ -951,8 +951,8 @@ QString EffectMakerModel::getQmlComponentString(bool localFiles) s += '\n' + customImagesString; s += '\n'; - s += l2 + "vertexShader: 'file://" + m_vertexShaderFilename + "'\n"; - s += l2 + "fragmentShader: 'file://" + m_fragmentShaderFilename + "'\n"; + s += l2 + "vertexShader: 'file:///" + m_vertexShaderFilename + "'\n"; + s += l2 + "fragmentShader: 'file:///" + m_fragmentShaderFilename + "'\n"; s += l2 + "anchors.fill: parent\n"; if (m_shaderFeatures.enabled(ShaderFeatures::GridMesh)) { QString gridSize = QString("%1, %2").arg(m_shaderFeatures.gridMeshWidth()).arg(m_shaderFeatures.gridMeshHeight()); diff --git a/src/plugins/effectmakernew/effectmakeruniformsmodel.cpp b/src/plugins/effectmakernew/effectmakeruniformsmodel.cpp index 9313b986404..d8aa312df5a 100644 --- a/src/plugins/effectmakernew/effectmakeruniformsmodel.cpp +++ b/src/plugins/effectmakernew/effectmakeruniformsmodel.cpp @@ -3,6 +3,7 @@ #include "effectmakeruniformsmodel.h" +#include "propertyhandler.h" #include "uniform.h" #include @@ -48,7 +49,9 @@ bool EffectMakerUniformsModel::setData(const QModelIndex &index, const QVariant if (!index.isValid() || !roleNames().contains(role)) return false; - m_uniforms.at(index.row())->setValue(value); + auto uniform = m_uniforms.at(index.row()); + uniform->setValue(value); + g_propertyData.insert(uniform->name(), value); emit dataChanged(index, index, {role}); return true; diff --git a/src/plugins/effectmakernew/effectmakerwidget.cpp b/src/plugins/effectmakernew/effectmakerwidget.cpp index d0114584932..ed396113080 100644 --- a/src/plugins/effectmakernew/effectmakerwidget.cpp +++ b/src/plugins/effectmakernew/effectmakerwidget.cpp @@ -7,8 +7,8 @@ #include "effectmakermodel.h" #include "effectmakernodesmodel.h" #include "effectmakerview.h" +#include "propertyhandler.h" -#include "nodeinstanceview.h" #include "qmldesignerconstants.h" #include "qmldesignerplugin.h" #include "qqmlcontext.h" @@ -65,6 +65,8 @@ EffectMakerWidget::EffectMakerWidget(EffectMakerView *view) QmlDesigner::QmlDesignerPlugin::trackWidgetFocusTime(this, QmlDesigner::Constants::EVENT_EFFECTMAKER_TIME); + m_quickWidget->rootContext()->setContextProperty("g_propertyData", &g_propertyData); + auto map = m_quickWidget->registerPropertyMap("EffectMakerBackend"); map->setProperties({{"effectMakerNodesModel", QVariant::fromValue(m_effectMakerNodesModel.data())}, {"effectMakerModel", QVariant::fromValue(m_effectMakerModel.data())}, diff --git a/src/plugins/effectmakernew/propertyhandler.cpp b/src/plugins/effectmakernew/propertyhandler.cpp new file mode 100644 index 00000000000..9382c9a1f67 --- /dev/null +++ b/src/plugins/effectmakernew/propertyhandler.cpp @@ -0,0 +1,10 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "propertyhandler.h" + +namespace EffectMaker { + +QQmlPropertyMap g_propertyData; + +} diff --git a/src/plugins/effectmakernew/propertyhandler.h b/src/plugins/effectmakernew/propertyhandler.h new file mode 100644 index 00000000000..82e2f7212d0 --- /dev/null +++ b/src/plugins/effectmakernew/propertyhandler.h @@ -0,0 +1,15 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#pragma once + +#include + +namespace EffectMaker { + +// This will be used for binding dynamic properties +// changes between C++ and QML. +extern QQmlPropertyMap g_propertyData; + +} +