diff --git a/share/qtcreator/qmldesigner/contentLibraryImages/camera.png b/share/qtcreator/qmldesigner/contentLibraryImages/camera.png new file mode 100644 index 00000000000..bc76845fb00 Binary files /dev/null and b/share/qtcreator/qmldesigner/contentLibraryImages/camera.png differ diff --git a/share/qtcreator/qmldesigner/contentLibraryImages/light.png b/share/qtcreator/qmldesigner/contentLibraryImages/light.png new file mode 100644 index 00000000000..441ac86ae2e Binary files /dev/null and b/share/qtcreator/qmldesigner/contentLibraryImages/light.png differ diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.cpp b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.cpp index 96102bf8379..f81d8cc6ea0 100644 --- a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.cpp +++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.cpp @@ -7,21 +7,18 @@ namespace QmlDesigner { -namespace Internal { - ContentLibraryIconProvider::ContentLibraryIconProvider() : QQuickImageProvider(Pixmap) { - } QPixmap ContentLibraryIconProvider::requestPixmap(const QString &id, QSize *size, [[maybe_unused]] const QSize &requestedSize) { - QString realPath = Core::ICore::resourcePath("qmldesigner/contentLibraryImages/" + id).toString(); + QString imagePath = Core::ICore::resourcePath("qmldesigner/contentLibraryImages/" + id).toFSPathString(); - QPixmap pixmap{realPath}; + QPixmap pixmap{imagePath}; if (size) { size->setWidth(pixmap.width()); @@ -37,6 +34,4 @@ QPixmap ContentLibraryIconProvider::requestPixmap(const QString &id, return pixmap; } -} // namespace Internal - } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.h b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.h index 56633959d6a..644d0332120 100644 --- a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.h +++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryiconprovider.h @@ -5,7 +5,7 @@ #include -namespace QmlDesigner::Internal { +namespace QmlDesigner { class ContentLibraryIconProvider : public QQuickImageProvider { @@ -14,4 +14,4 @@ public: QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override; }; -} // namespace QmlDesigner::Internal +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp index 2ba87ec4355..6810199e50b 100644 --- a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp +++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp @@ -4,6 +4,7 @@ #include "contentlibraryview.h" #include "contentlibrarybundleimporter.h" +#include "contentlibraryiconprovider.h" #include "contentlibraryitem.h" #include "contentlibraryeffectsmodel.h" #include "contentlibrarymaterial.h" @@ -890,10 +891,18 @@ void ContentLibraryView::addLibItem(const ModelNode &node, const QPixmap &iconPi m_widget->userModel()->addItem(m_bundleId, name, qml, m_iconSavePath.toUrl(), depAssetsRelativePaths); // generate and save icon - if (iconPixmap.isNull()) + QPixmap iconPixmapToSave; + if (node.metaInfo().isQtQuick3DCamera()) + iconPixmapToSave = m_widget->iconProvider()->requestPixmap("camera.png", nullptr, {}); + else if (node.metaInfo().isQtQuick3DLight()) + iconPixmapToSave = m_widget->iconProvider()->requestPixmap("light.png", nullptr, {}); + else + iconPixmapToSave = iconPixmap; + + if (iconPixmapToSave.isNull()) model()->nodeInstanceView()->previewImageDataForGenericNode(node, {}, {}, ADD_ITEM_REQ_ID); else - saveIconToBundle(iconPixmap); + saveIconToBundle(iconPixmapToSave); } QString ContentLibraryView::getExportPath(const ModelNode &node) const diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp index c5cf6d21e9b..1dfc496c787 100644 --- a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.cpp @@ -5,12 +5,12 @@ #include "contentlibrarybundleimporter.h" #include "contentlibraryeffectsmodel.h" +#include "contentlibraryiconprovider.h" #include "contentlibraryitem.h" #include "contentlibrarymaterial.h" #include "contentlibrarymaterialsmodel.h" #include "contentlibrarytexture.h" #include "contentlibrarytexturesmodel.h" -#include "contentlibraryiconprovider.h" #include "contentlibraryusermodel.h" #include "utils/filedownloader.h" @@ -123,7 +123,8 @@ bool ContentLibraryWidget::eventFilter(QObject *obj, QEvent *event) } ContentLibraryWidget::ContentLibraryWidget() - : m_quickWidget(Utils::makeUniqueObjectPtr(this)) + : m_iconProvider(Utils::makeUniqueObjectPtr()) + , m_quickWidget(Utils::makeUniqueObjectPtr(this)) , m_materialsModel(new ContentLibraryMaterialsModel(this)) , m_texturesModel(new ContentLibraryTexturesModel("Textures", this)) , m_environmentsModel(new ContentLibraryTexturesModel("Environments", this)) @@ -138,8 +139,7 @@ ContentLibraryWidget::ContentLibraryWidget() m_quickWidget->quickWidget()->setObjectName(Constants::OBJECT_NAME_CONTENT_LIBRARY); m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); - m_quickWidget->engine()->addImageProvider(QStringLiteral("contentlibrary"), - new Internal::ContentLibraryIconProvider); + m_quickWidget->engine()->addImageProvider("contentlibrary", m_iconProvider.get()); m_quickWidget->engine()->addImportPath(propertyEditorResourcesPath() + "/imports"); m_quickWidget->setClearColor(Theme::getColor(Theme::Color::DSpanelBackground)); @@ -181,6 +181,10 @@ ContentLibraryWidget::ContentLibraryWidget() createImporter(); } +ContentLibraryWidget::~ContentLibraryWidget() +{ +} + void ContentLibraryWidget::createImporter() { m_importer = new ContentLibraryBundleImporter(); @@ -212,6 +216,11 @@ void ContentLibraryWidget::createImporter() }); } +ContentLibraryIconProvider *ContentLibraryWidget::iconProvider() const +{ + return m_iconProvider.get(); +} + void ContentLibraryWidget::updateImportedState(const QString &bundleId) { if (!m_importer) diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h index 6ead35f72a1..cec47c8917f 100644 --- a/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h +++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibrarywidget.h @@ -24,13 +24,13 @@ namespace QmlDesigner { class ContentLibraryBundleImporter; class ContentLibraryEffectsModel; +class ContentLibraryIconProvider; class ContentLibraryItem; class ContentLibraryMaterial; class ContentLibraryMaterialsModel; class ContentLibraryTexture; class ContentLibraryTexturesModel; class ContentLibraryUserModel; -class NodeMetaInfo; class ContentLibraryWidget : public QFrame { @@ -48,6 +48,7 @@ class ContentLibraryWidget : public QFrame public: ContentLibraryWidget(); + ~ContentLibraryWidget(); QList createToolBarWidgets(); @@ -94,6 +95,7 @@ public: QSize sizeHint() const override; ContentLibraryBundleImporter *importer() const; + ContentLibraryIconProvider *iconProvider() const; signals: void bundleItemDragStarted(QmlDesigner::ContentLibraryItem *item); @@ -129,6 +131,7 @@ private: void populateTextureBundleModels(); void createImporter(); + Utils::UniqueObjectPtr m_iconProvider; Utils::UniqueObjectPtr m_quickWidget; QPointer m_materialsModel; QPointer m_texturesModel;