diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 3dfe1af40d8..41c234462dc 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -73,14 +73,7 @@ class AvatarImageProvider : public QQuickImageProvider { const auto qmlIcon = OCC::Resources::QMLResources::parseIcon(id); const auto accountState = OCC::AccountManager::instance()->account(QUuid::fromString(qmlIcon.iconName)); - QIcon icon = accountState->account()->avatar(); - // the sourceSize of the Image must be provided - Q_ASSERT(requestedSize.isValid()); - const QSize actualSize = requestedSize.isValid() ? requestedSize : icon.availableSizes().constFirst(); - if (size) { - *size = actualSize; - } - return icon.pixmap(actualSize, qmlIcon.enabled ? QIcon::Normal : QIcon::Disabled); + return OCC::Resources::pixmap(requestedSize, accountState->account()->avatar(), qmlIcon.enabled ? QIcon::Normal : QIcon::Disabled, size); } }; } diff --git a/src/gui/spaces/spaceimageprovider.cpp b/src/gui/spaces/spaceimageprovider.cpp index 36f36468612..ab752df44c3 100644 --- a/src/gui/spaces/spaceimageprovider.cpp +++ b/src/gui/spaces/spaceimageprovider.cpp @@ -13,6 +13,7 @@ */ #include "spaceimageprovider.h" #include "libsync/graphapi/spacesmanager.h" +#include "resources/qmlresources.h" #include "resources/resources.h" using namespace OCC; @@ -36,11 +37,5 @@ QPixmap SpaceImageProvider::requestPixmap(const QString &id, QSize *size, const icon = space->image()->image(); } } - // the sourceSize of the Image must be provided - Q_ASSERT(requestedSize.isValid()); - const QSize actualSize = requestedSize.isValid() ? requestedSize : icon.availableSizes().constFirst(); - if (size) { - *size = actualSize; - } - return icon.pixmap(actualSize); + return Resources::pixmap(requestedSize, icon, QIcon::Normal, size); } diff --git a/src/resources/qmlresources.cpp b/src/resources/qmlresources.cpp index a1389e902e4..245bebe0baa 100644 --- a/src/resources/qmlresources.cpp +++ b/src/resources/qmlresources.cpp @@ -16,6 +16,10 @@ #include "resources/resources.h" +namespace { +constexpr QSize minIconSize{16, 16}; +} + using namespace OCC; QUrl Resources::QMLResources::resourcePath2(const QString &provider, const QString &icon, bool enabled, const QVariantMap &properies) { @@ -36,3 +40,13 @@ Resources::QMLResources::Icon Resources::QMLResources::parseIcon(const QString & const auto data = QJsonDocument::fromJson(QByteArray::fromBase64(id.toUtf8())).object(); return Icon{data.value(QLatin1String("theme")).toString(), data.value(QLatin1String("icon")).toString(), data.value(QLatin1String("enabled")).toBool()}; } + +QPixmap Resources::pixmap(const QSize &requestedSize, const QIcon &icon, QIcon::Mode mode, QSize *outSize) +{ + Q_ASSERT(requestedSize.isValid()); + QSize actualSize = requestedSize.isValid() ? requestedSize : icon.availableSizes().constFirst(); + if (outSize) { + *outSize = actualSize; + } + return icon.pixmap(actualSize.expandedTo(minIconSize), mode); +} diff --git a/src/resources/qmlresources.h b/src/resources/qmlresources.h index 2400f9b77f6..1b5125d221b 100644 --- a/src/resources/qmlresources.h +++ b/src/resources/qmlresources.h @@ -15,6 +15,7 @@ #pragma once #include "resources/owncloudresources.h" +#include #include namespace OCC { @@ -38,5 +39,7 @@ namespace Resources { static Icon parseIcon(const QString &id); }; + + QPixmap OWNCLOUDRESOURCES_EXPORT pixmap(const QSize &requestedSize, const QIcon &icon, QIcon::Mode mode, QSize *outSize); } // Resources } // OCC diff --git a/src/resources/resources.cpp b/src/resources/resources.cpp index 7d6f722a043..6019d189020 100644 --- a/src/resources/resources.cpp +++ b/src/resources/resources.cpp @@ -195,12 +195,5 @@ QPixmap CoreImageProvider::requestPixmap(const QString &id, QSize *size, const Q } else { icon = themeIcon(qmlIcon.iconName); } - - // the sourceSize of the Image must be provided - Q_ASSERT(requestedSize.isValid()); - const QSize actualSize = requestedSize.isValid() ? requestedSize : icon.availableSizes().constFirst(); - if (size) { - *size = actualSize; - } - return icon.pixmap(actualSize, qmlIcon.enabled ? QIcon::Normal : QIcon::Disabled); + return Resources::pixmap(requestedSize, icon, qmlIcon.enabled ? QIcon::Normal : QIcon::Disabled, size); }