QmlDesigner: Generate material browser texture icons using provider
Provider allows using special generation methods for hdr images, which QImage doesn't support. Task-number: QDS-8296 Change-Id: I829199264ff4a5eb677d65c908eacd1e20ad94e5 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
@@ -37,7 +37,7 @@ Rectangle {
|
||||
}
|
||||
|
||||
Image {
|
||||
source: textureSource
|
||||
source: "image://materialBrowserTex/" + textureSource
|
||||
sourceSize.width: root.width - 10
|
||||
sourceSize.height: root.height - 10
|
||||
anchors.centerIn: parent
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/AssetsLibrary">
|
||||
<file>images/asset_default.png</file>
|
||||
<file>images/asset_default@2x.png</file>
|
||||
<file>images/asset_shader.png</file>
|
||||
<file>images/asset_shader@2x.png</file>
|
||||
<file>images/asset_shader_128.png</file>
|
||||
@@ -12,5 +10,8 @@
|
||||
<file>images/asset_video@2x.png</file>
|
||||
<file>images/browse.png</file>
|
||||
<file>images/browse@2x.png</file>
|
||||
<file>images/assets_default.png</file>
|
||||
<file>images/assets_default@2x.png</file>
|
||||
<file>images/assets_default_128.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
|
Before Width: | Height: | Size: 312 B |
|
Before Width: | Height: | Size: 346 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
@@ -35,7 +35,7 @@ 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 QUrl::fromLocalFile(DocumentManager::currentResourcePath().path() + '/' + source);
|
||||
return QVariant(DocumentManager::currentResourcePath().path() + '/' + source);
|
||||
}
|
||||
|
||||
if (roleName == "textureVisible")
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/environment.h>
|
||||
#include <utils/hdrimage.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/stylehelper.h>
|
||||
|
||||
@@ -88,6 +89,33 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class TextureImageProvider : public QQuickImageProvider
|
||||
{
|
||||
public:
|
||||
TextureImageProvider() : QQuickImageProvider(Pixmap) {}
|
||||
|
||||
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override
|
||||
{
|
||||
QPixmap pixmap;
|
||||
const QString suffix = id.split('.').last().toLower();
|
||||
if (suffix == "hdr")
|
||||
pixmap = HdrImage{id}.toPixmap();
|
||||
else
|
||||
pixmap = Utils::StyleHelper::dpiSpecificImageFile(id);
|
||||
|
||||
if (pixmap.isNull())
|
||||
pixmap = Utils::StyleHelper::dpiSpecificImageFile(":/materialeditor/images/texture_default.png");
|
||||
|
||||
if (size)
|
||||
*size = pixmap.size();
|
||||
|
||||
if (requestedSize.isValid())
|
||||
return pixmap.scaled(requestedSize, Qt::KeepAspectRatio);
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
};
|
||||
|
||||
bool MaterialBrowserWidget::eventFilter(QObject *obj, QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::FocusOut) {
|
||||
@@ -119,8 +147,9 @@ bool MaterialBrowserWidget::eventFilter(QObject *obj, QEvent *event)
|
||||
QString iconPath = QLatin1String("%1/%2")
|
||||
.arg(DocumentManager::currentResourcePath().path(),
|
||||
m_textureToDrag.variantProperty("source").value().toString());
|
||||
|
||||
model->startDrag(mimeData, QPixmap(iconPath).scaled({128, 128}));
|
||||
model->startDrag(mimeData,
|
||||
m_textureImageProvider->requestPixmap(iconPath, nullptr,
|
||||
{128, 128}));
|
||||
}
|
||||
m_materialToDrag = {};
|
||||
m_textureToDrag = {};
|
||||
@@ -140,6 +169,7 @@ MaterialBrowserWidget::MaterialBrowserWidget(MaterialBrowserView *view)
|
||||
, m_materialBrowserTexturesModel(new MaterialBrowserTexturesModel(this))
|
||||
, m_quickWidget(new QQuickWidget(this))
|
||||
, m_previewImageProvider(new PreviewImageProvider())
|
||||
, m_textureImageProvider(new TextureImageProvider())
|
||||
{
|
||||
setWindowTitle(tr("Material Browser", "Title of material browser widget"));
|
||||
setMinimumWidth(120);
|
||||
@@ -160,6 +190,8 @@ MaterialBrowserWidget::MaterialBrowserWidget(MaterialBrowserView *view)
|
||||
});
|
||||
|
||||
m_quickWidget->engine()->addImageProvider("materialBrowser", m_previewImageProvider);
|
||||
m_quickWidget->engine()->addImageProvider("materialBrowserTex", m_textureImageProvider);
|
||||
|
||||
Theme::setupTheme(m_quickWidget->engine());
|
||||
m_quickWidget->installEventFilter(this);
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ class MaterialBrowserView;
|
||||
class MaterialBrowserModel;
|
||||
class MaterialBrowserTexturesModel;
|
||||
class PreviewImageProvider;
|
||||
class TextureImageProvider;
|
||||
|
||||
class MaterialBrowserWidget : public QFrame
|
||||
{
|
||||
@@ -70,6 +71,7 @@ private:
|
||||
|
||||
QShortcut *m_qmlSourceUpdateShortcut = nullptr;
|
||||
PreviewImageProvider *m_previewImageProvider = nullptr;
|
||||
TextureImageProvider *m_textureImageProvider = nullptr;
|
||||
Core::IContext *m_context = nullptr;
|
||||
|
||||
QString m_filterText;
|
||||
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
@@ -1,5 +1,7 @@
|
||||
<RCC>
|
||||
<qresource prefix="/materialeditor">
|
||||
<file>images/defaultmaterialpreview.png</file>
|
||||
<file>images/texture_default.png</file>
|
||||
<file>images/texture_default@2x.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||