aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml1
-rw-r--r--src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp69
-rw-r--r--src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.h3
-rw-r--r--src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp5
-rw-r--r--src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h2
5 files changed, 49 insertions, 31 deletions
diff --git a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
index 61bd0ebfd7..f9d3d88a78 100644
--- a/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
+++ b/share/qtcreator/qmldesigner/contentLibraryQmlSource/ContentLibraryTextureContextMenu.qml
@@ -15,6 +15,7 @@ StudioControls.Menu {
function popupMenu(targetTexture = null)
{
this.targetTexture = targetTexture
+ rootView.updateSceneEnvState();
popup()
}
diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp
index ae1d87276b..347512a837 100644
--- a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp
+++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp
@@ -3,7 +3,6 @@
#include "contentlibraryview.h"
-#include "bindingproperty.h"
#include "contentlibrarybundleimporter.h"
#include "contentlibrarywidget.h"
#include "contentlibrarymaterial.h"
@@ -88,11 +87,14 @@ WidgetInfo ContentLibraryView::widgetInfo()
}
// assign the texture as scene environment's light probe
- if (mode == ContentLibraryWidget::AddTextureMode::LightProbe && m_activeSceneEnv.isValid()) {
- BindingProperty lightProbeProp = m_activeSceneEnv.bindingProperty("lightProbe");
- lightProbeProp.setExpression(texNode.id());
- VariantProperty bgModeProp = m_activeSceneEnv.variantProperty("backgroundMode");
- bgModeProp.setValue(QVariant::fromValue(Enumeration("SceneEnvironment", "SkyBox")));
+ if (mode == ContentLibraryWidget::AddTextureMode::LightProbe && m_sceneId != -1) {
+ QmlObjectNode sceneEnv = resolveSceneEnv();
+ if (sceneEnv.isValid()) {
+ sceneEnv.setBindingProperty("lightProbe", texNode.id());
+ sceneEnv.setVariantProperty("backgroundMode",
+ QVariant::fromValue(Enumeration("SceneEnvironment",
+ "SkyBox")));
+ }
}
QTimer::singleShot(0, this, [this, texNode]() {
if (model() && texNode.isValid())
@@ -101,6 +103,9 @@ WidgetInfo ContentLibraryView::widgetInfo()
});
});
+ connect(m_widget, &ContentLibraryWidget::updateSceneEnvStateRequested,
+ this, &ContentLibraryView::resolveSceneEnv);
+
ContentLibraryMaterialsModel *materialsModel = m_widget->materialsModel().data();
connect(materialsModel, &ContentLibraryMaterialsModel::applyToSelectedTriggered, this,
@@ -187,30 +192,7 @@ void ContentLibraryView::importsChanged(const QList<Import> &addedImports, const
void ContentLibraryView::active3DSceneChanged(qint32 sceneId)
{
- m_activeSceneEnv = {};
- bool sceneEnvExists = false;
- if (sceneId != -1) {
- ModelNode activeScene = active3DSceneNode();
- if (activeScene.isValid()) {
- ModelNode view3D;
- if (activeScene.metaInfo().isQtQuick3DView3D()) {
- view3D = activeScene;
- } else {
- ModelNode sceneParent = activeScene.parentProperty().parentModelNode();
- if (sceneParent.metaInfo().isQtQuick3DView3D())
- view3D = sceneParent;
- }
-
- if (view3D.isValid()) {
- m_activeSceneEnv = modelNodeForId(view3D.bindingProperty("environment").expression());
- if (m_activeSceneEnv.isValid())
- sceneEnvExists = true;
- }
- }
- }
-
- m_widget->texturesModel()->setHasSceneEnv(sceneEnvExists);
- m_widget->environmentsModel()->setHasSceneEnv(sceneEnvExists);
+ m_sceneId = sceneId;
}
void ContentLibraryView::selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
@@ -361,6 +343,33 @@ ModelNode ContentLibraryView::createMaterial(const NodeMetaInfo &metaInfo)
return newMatNode;
}
+ModelNode ContentLibraryView::resolveSceneEnv()
+{
+ ModelNode activeSceneEnv;
+
+ if (m_sceneId != -1) {
+ ModelNode activeScene = active3DSceneNode();
+ if (activeScene.isValid()) {
+ QmlObjectNode view3D;
+ if (activeScene.metaInfo().isQtQuick3DView3D()) {
+ view3D = activeScene;
+ } else {
+ ModelNode sceneParent = activeScene.parentProperty().parentModelNode();
+ if (sceneParent.metaInfo().isQtQuick3DView3D())
+ view3D = sceneParent;
+ }
+ if (view3D.isValid())
+ activeSceneEnv = modelNodeForId(view3D.expression("environment"));
+ }
+ }
+
+ const bool sceneEnvExists = activeSceneEnv.isValid();
+ m_widget->texturesModel()->setHasSceneEnv(sceneEnvExists);
+ m_widget->environmentsModel()->setHasSceneEnv(sceneEnvExists);
+
+ return activeSceneEnv;
+}
+
void ContentLibraryView::updateBundleMaterialsImportedState()
{
using namespace Utils;
diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.h b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.h
index aae27c9140..5b4914a50c 100644
--- a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.h
+++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.h
@@ -43,15 +43,16 @@ private:
void applyBundleMaterialToDropTarget(const ModelNode &bundleMat, const NodeMetaInfo &metaInfo = {});
ModelNode getBundleMaterialDefaultInstance(const TypeName &type);
ModelNode createMaterial(const NodeMetaInfo &metaInfo);
+ ModelNode resolveSceneEnv();
QPointer<ContentLibraryWidget> m_widget;
QList<ModelNode> m_bundleMaterialTargets;
QList<ModelNode> m_selectedModels; // selected 3D model nodes
ContentLibraryMaterial *m_draggedBundleMaterial = nullptr;
ContentLibraryTexture *m_draggedBundleTexture = nullptr;
- ModelNode m_activeSceneEnv;
bool m_bundleMaterialAddToSelected = false;
bool m_hasQuick3DImport = false;
+ qint32 m_sceneId = -1;
};
} // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp
index 729e41b693..75eff3af98 100644
--- a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp
@@ -221,6 +221,11 @@ void ContentLibraryWidget::addLightProbe(ContentLibraryTexture *tex)
emit addTextureRequested(tex->path(), AddTextureMode::LightProbe);
}
+void ContentLibraryWidget::updateSceneEnvState()
+{
+ emit updateSceneEnvStateRequested();
+}
+
QPointer<ContentLibraryMaterialsModel> ContentLibraryWidget::materialsModel() const
{
return m_materialsModel;
diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h
index ec0b26cbc2..4d77068632 100644
--- a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h
+++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h
@@ -44,6 +44,7 @@ public:
Q_INVOKABLE void addImage(QmlDesigner::ContentLibraryTexture *tex);
Q_INVOKABLE void addTexture(QmlDesigner::ContentLibraryTexture *tex);
Q_INVOKABLE void addLightProbe(QmlDesigner::ContentLibraryTexture *tex);
+ Q_INVOKABLE void updateSceneEnvState();
enum class AddTextureMode { Image, Texture, LightProbe };
@@ -51,6 +52,7 @@ signals:
void bundleMaterialDragStarted(QmlDesigner::ContentLibraryMaterial *bundleMat);
void bundleTextureDragStarted(QmlDesigner::ContentLibraryTexture *bundleTex);
void addTextureRequested(const QString texPath, QmlDesigner::ContentLibraryWidget::AddTextureMode mode);
+ void updateSceneEnvStateRequested();
protected:
bool eventFilter(QObject *obj, QEvent *event) override;