QmlDesigner: Add support for SpecularGlossyMaterial

Task-number: QDS-8087
Change-Id: Ic5cdca5d61d5f4ad11f63f3f5a59907798cde763
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Miikka Heikkinen
2022-10-25 15:28:43 +03:00
parent 162635cbe8
commit 8da35bac0f
6 changed files with 29 additions and 7 deletions

View File

@@ -80,6 +80,10 @@ StudioControls.Menu {
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.principledMaterialSections);
break;
case "SpecularGlossyMaterial":
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.specularGlossyMaterialSections);
break;
case "CustomMaterial":
root.matSectionsModel = root.matSectionsModel.concat(materialBrowserModel.customMaterialSections);
break;

View File

@@ -123,10 +123,12 @@ bool MaterialBrowserModel::loadPropertyGroups(const QString &path)
m_defaultMaterialSections.clear();
m_principledMaterialSections.clear();
m_specularGlossyMaterialSections.clear();
m_customMaterialSections.clear();
if (ok) {
m_defaultMaterialSections.append(m_propertyGroupsObj.value("DefaultMaterial").toObject().keys());
m_principledMaterialSections.append(m_propertyGroupsObj.value("PrincipledMaterial").toObject().keys());
m_specularGlossyMaterialSections.append(m_propertyGroupsObj.value("SpecularGlossyMaterial").toObject().keys());
QStringList customMatSections = m_propertyGroupsObj.value("CustomMaterial").toObject().keys();
if (customMatSections.size() > 1) // as of now custom material has only 1 section, so we don't add it
@@ -145,6 +147,7 @@ void MaterialBrowserModel::unloadPropertyGroups()
m_propertyGroupsObj = {};
m_defaultMaterialSections.clear();
m_principledMaterialSections.clear();
m_specularGlossyMaterialSections.clear();
m_customMaterialSections.clear();
emit materialSectionsChanged();
}

View File

@@ -47,6 +47,7 @@ class MaterialBrowserModel : public QAbstractListModel
Q_PROPERTY(QString copiedMaterialType READ copiedMaterialType WRITE setCopiedMaterialType NOTIFY copiedMaterialTypeChanged)
Q_PROPERTY(QStringList defaultMaterialSections MEMBER m_defaultMaterialSections NOTIFY materialSectionsChanged)
Q_PROPERTY(QStringList principledMaterialSections MEMBER m_principledMaterialSections NOTIFY materialSectionsChanged)
Q_PROPERTY(QStringList specularGlossyMaterialSections MEMBER m_specularGlossyMaterialSections NOTIFY materialSectionsChanged)
Q_PROPERTY(QStringList customMaterialSections MEMBER m_customMaterialSections NOTIFY materialSectionsChanged)
public:
@@ -128,6 +129,7 @@ private:
QString m_searchText;
QList<ModelNode> m_materialList;
QStringList m_defaultMaterialSections;
QStringList m_specularGlossyMaterialSections;
QStringList m_principledMaterialSections;
QStringList m_customMaterialSections;
ModelNode m_copiedMaterial;

View File

@@ -718,8 +718,8 @@ void MaterialEditorView::updatePossibleTypes()
return;
// Ensure basic types are always first
static const QStringList basicTypes {"DefaultMaterial", "PrincipledMaterial", "CustomMaterial"};
QStringList allTypes = basicTypes;
QStringList nonQuick3dTypes;
QStringList allTypes;
const QList<ItemLibraryEntry> itemLibEntries = m_itemLibraryInfo->entries();
for (const ItemLibraryEntry &entry : itemLibEntries) {
@@ -734,12 +734,22 @@ void MaterialEditorView::updatePossibleTypes()
addImport = model()->hasImport(import, true, true);
}
if (addImport) {
QString typeName = QString::fromLatin1(entry.typeName().split('.').last());
if (!allTypes.contains(typeName))
allTypes.append(typeName);
const QList<QByteArray> typeSplit = entry.typeName().split('.');
const QString typeName = QString::fromLatin1(typeSplit.last());
if (typeSplit.size() == 2 && typeSplit.first() == "QtQuick3D") {
if (!allTypes.contains(typeName))
allTypes.append(typeName);
} else if (!nonQuick3dTypes.contains(typeName)) {
nonQuick3dTypes.append(typeName);
}
}
}
}
allTypes.sort();
nonQuick3dTypes.sort();
allTypes.append(nonQuick3dTypes);
m_qmlBackEnd->contextObject()->setPossibleTypes(allTypes);
}

View File

@@ -40,6 +40,7 @@ ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &i
// Texture
// -> DefaultMaterial
// -> PrincipledMaterial
// -> SpecularGlossyMaterial
// -> SpriteParticle3D
// -> TextureInput
// -> SceneEnvironment
@@ -65,7 +66,8 @@ ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &i
if (insertInfo.isSubclassOf(textureType)) {
const TypeName textureTypeCpp = "<cpp>.QQuick3DTexture";
if (parentInfo.isSubclassOf("QtQuick3D.DefaultMaterial")
|| parentInfo.isSubclassOf("QtQuick3D.PrincipledMaterial")) {
|| parentInfo.isSubclassOf("QtQuick3D.PrincipledMaterial")
|| parentInfo.isSubclassOf("QtQuick3D.SpecularGlossyMaterial")) {
// All texture properties are valid targets
const PropertyNameList targetNodeNameList = parentInfo.propertyNames();
for (const PropertyName &name : targetNodeNameList) {

View File

@@ -1042,7 +1042,8 @@ bool NavigatorTreeModel::dropAsImage3dTexture(const ModelNode &targetNode,
};
if (targetNode.isSubclassOf("QtQuick3D.DefaultMaterial")
|| targetNode.isSubclassOf("QtQuick3D.PrincipledMaterial")) {
|| targetNode.isSubclassOf("QtQuick3D.PrincipledMaterial")
|| targetNode.isSubclassOf("QtQuick3D.SpecularGlossyMaterial")) {
// if dropping an image on a material, create a texture instead of image
// Show texture property selection dialog
auto dialog = ChooseFromPropertyListDialog::createIfNeeded(targetNode, "QtQuick3D.Texture",