aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2022-12-05 14:22:13 +0200
committerTim Jenssen <tim.jenssen@qt.io>2022-12-06 15:49:24 +0000
commit6dfe3250837ba5e224e5809a75575600afa841d5 (patch)
treefbb130a66c6d726cd889696c6bd3b0050c982ea4
parente1fce66f38332eb0995b2a4847429e8a71808c9c (diff)
QmlDesigner: Fix texture source path for newly created textures
Fixes: QDS-8448 Change-Id: Ibaf51444f2dff8d3de95edd4c8afbc7bc2cd2241 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml4
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp7
-rw-r--r--src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h2
-rw-r--r--src/plugins/qmldesigner/components/createtexture.cpp14
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp7
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp84
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h3
7 files changed, 26 insertions, 95 deletions
diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml
index 3492a1dfef..2ad2a317ed 100644
--- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml
+++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml
@@ -43,10 +43,8 @@ Rectangle {
}
ToolTip {
- property bool hasSource: textureSource.slice(-1) !== "/"
-
visible: mouseArea.containsMouse
- text: hasSource ? textureSource : qsTr("Texture has no source image.")
+ text: textureSource ? textureSource : qsTr("Texture has no source image.")
delay: 1000
}
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index e6693f8e5d..3a3dd7d683 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -1731,6 +1731,13 @@ bool validateEffect(const QString &effectPath)
return true;
}
+Utils::FilePath getImagesDefaultDirectory()
+{
+ return Utils::FilePath::fromString(
+ getAssetDefaultDirectory(
+ "images", QmlDesignerPlugin::instance()->documentManager().currentProjectDirPath().toString()));
+}
+
} // namespace ModelNodeOperations
} //QmlDesigner
diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
index 5dcc20ff91..2e60b25319 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h
@@ -125,6 +125,8 @@ QString getEffectIcon(const QString &effectPath);
bool useLayerEffect();
bool validateEffect(const QString &effectPath);
+Utils::FilePath getImagesDefaultDirectory();
+
// ModelNodePreviewImageOperations
QVariant previewImageDataForGenericNode(const ModelNode &modelNode);
QVariant previewImageDataForImageNode(const ModelNode &modelNode);
diff --git a/src/plugins/qmldesigner/components/createtexture.cpp b/src/plugins/qmldesigner/components/createtexture.cpp
index 5a1c1e36f3..c7ab9701a9 100644
--- a/src/plugins/qmldesigner/components/createtexture.cpp
+++ b/src/plugins/qmldesigner/components/createtexture.cpp
@@ -4,6 +4,7 @@
#include "createtexture.h"
#include "abstractview.h"
+#include "documentmanager.h"
#include "modelnodeoperations.h"
#include "nodelistproperty.h"
#include "nodemetainfo.h"
@@ -41,7 +42,8 @@ void CreateTexture::execute(const QString &filePath, AddTextureMode mode, int sc
bool CreateTexture::addFileToProject(const QString &filePath)
{
- AddFilesResult result = ModelNodeOperations::addImageToProject({filePath}, "images", false);
+ AddFilesResult result = ModelNodeOperations::addImageToProject(
+ {filePath}, ModelNodeOperations::getImagesDefaultDirectory().toString(), false);
if (result.status() == AddFilesResult::Failed) {
Core::AsynchronousMessageBox::warning(QObject::tr("Failed to Add Texture"),
@@ -63,12 +65,16 @@ ModelNode CreateTexture::createTextureFromImage(const QString &assetPath, AddTex
NodeMetaInfo metaInfo = m_view->model()->qtQuick3DTextureMetaInfo();
- QString sourceVal = QLatin1String("images/%1").arg(assetPath.split('/').last());
+ Utils::FilePath imagePath = ModelNodeOperations::getImagesDefaultDirectory()
+ .pathAppended(Utils::FilePath::fromString(assetPath).fileName());
+ QString sourceVal = imagePath.relativePathFrom(
+ QmlDesigner::DocumentManager::currentFilePath()).toString();
+
ModelNode newTexNode = m_view->getTextureDefaultInstance(sourceVal);
if (!newTexNode.isValid()) {
newTexNode = m_view->createModelNode("QtQuick3D.Texture",
- metaInfo.majorVersion(),
- metaInfo.minorVersion());
+ metaInfo.majorVersion(),
+ metaInfo.minorVersion());
newTexNode.validId();
VariantProperty sourceProp = newTexNode.variantProperty("source");
sourceProp.setValue(sourceVal);
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp
index 3f5fde5a7c..0184b1cae1 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp
@@ -34,7 +34,12 @@ QVariant MaterialBrowserTexturesModel::data(const QModelIndex &index, int role)
QByteArray roleName = roleNames().value(role);
if (roleName == "textureSource") {
QString source = m_textureList.at(index.row()).variantProperty("source").value().toString();
- return QVariant(DocumentManager::currentResourcePath().path() + '/' + source);
+ if (source.isEmpty())
+ return {};
+ if (Utils::FilePath::fromString(source).isAbsolutePath())
+ return QVariant(source);
+ return QVariant(QmlDesignerPlugin::instance()->documentManager().currentDesignDocument()
+ ->fileName().absolutePath().pathAppended(source).cleanPath().toString());
}
if (roleName == "textureVisible")
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
index 39b9efe13a..37fd15000d 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
@@ -450,85 +450,7 @@ void MaterialBrowserView::customNotification(const AbstractView *view,
applyTextureToModel3D(nodeList.at(0), nodeList.at(1));
} else if (identifier == "apply_texture_to_material") {
applyTextureToMaterial({nodeList.at(0)}, nodeList.at(1));
- } else if (identifier == "add_textures") {
- if (data.size() != 4) {
- qWarning() << "Wrong number of arguments passed to add_textures: " << data.size();
- return;
- }
-
- QByteArray identifier = data.at(0).toByteArray();
- QStringList filePaths = data.at(1).toStringList();
- AddTextureMode mode = data.at(2).value<AddTextureMode>();
- bool addToProject = data.at(3).toBool();
-
- executeInTransaction(identifier, [&] {
- addTextures(filePaths, mode, addToProject);
- });
- } else if (identifier == "add_texture") {
- if (data.size() != 4) {
- qWarning() << "Wrong number of arguments passed to add_texture: " << data.size();
- return;
- }
-
- QByteArray identifier = data.at(0).toByteArray();
- QString filePath = data.at(1).toString();
- AddTextureMode mode = data.at(2).value<AddTextureMode>();
- bool addToProject = data.at(3).toBool();
-
- executeInTransaction(identifier, [&] {
- addOneTexture(filePath, mode, addToProject);
- });
- }
-}
-
-void MaterialBrowserView::addOneTexture(const QString &texPath, AddTextureMode mode, bool addToProject)
-{
- if (addToProject) {
- // copy image to project
- AddFilesResult result = ModelNodeOperations::addImageToProject({texPath}, "images", false);
-
- if (result.status() == AddFilesResult::Failed) {
- Core::AsynchronousMessageBox::warning(tr("Failed to Add Texture"),
- tr("Could not add %1 to project.").arg(texPath));
- return;
- }
}
-
- if (mode == AddTextureMode::Image)
- return;
-
- // create a texture from the image
- ModelNode matLib = materialLibraryNode();
- if (!matLib.isValid())
- return;
-
- NodeMetaInfo metaInfo = model()->metaInfo("QtQuick3D.Texture");
-
- QString sourceVal = QLatin1String("images/%1").arg(texPath.split('/').last());
- ModelNode texNode = getTextureDefaultInstance(sourceVal);
- if (!texNode.isValid()) {
- texNode = createModelNode("QtQuick3D.Texture", metaInfo.majorVersion(),
- metaInfo.minorVersion());
- texNode.validId();
- VariantProperty sourceProp = texNode.variantProperty("source");
- sourceProp.setValue(sourceVal);
- matLib.defaultNodeListProperty().reparentHere(texNode);
- }
-
- // assign the texture as scene environment's light probe
- if (mode == 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())
- emitCustomNotification("selected_texture_changed", {texNode});
- });
}
void MaterialBrowserView::active3DSceneChanged(qint32 sceneId)
@@ -559,12 +481,6 @@ ModelNode MaterialBrowserView::resolveSceneEnv()
return activeSceneEnv;
}
-void MaterialBrowserView::addTextures(const QStringList &filePaths, AddTextureMode mode, bool addToProject)
-{
- for (const QString &texPath : filePaths)
- addOneTexture(texPath, mode, addToProject);
-}
-
void MaterialBrowserView::instancesCompleted(const QVector<ModelNode> &completedNodeList)
{
for (const ModelNode &node : completedNodeList) {
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h
index 2f8113a164..22e6c6a8d8 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h
@@ -69,9 +69,6 @@ private:
void requestPreviews();
ModelNode resolveSceneEnv();
- void addOneTexture(const QString &filePath, AddTextureMode mode, bool addToProject);
- void addTextures(const QStringList &texturePaths, AddTextureMode mode, bool addToProject);
-
AsynchronousImageCache &m_imageCache;
QPointer<MaterialBrowserWidget> m_widget;
QList<ModelNode> m_selectedModels; // selected 3D model nodes