From e97a8471b505345dc06cba1cdd49b4034bfc1fe2 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 28 Sep 2021 10:28:28 +0200 Subject: [PATCH] ProjectExplorer: Make Json Wizard icons themable Wizard json files can now define via "iconKind" : "Themed" that the provided icon is a themable mask rather than a plain image. Change-Id: I668b7fe368b6989f3609143b22270cb8cec21b12 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/iwizardfactory.cpp | 7 +++++++ src/plugins/coreplugin/iwizardfactory.h | 2 ++ .../projectexplorer/jsonwizard/jsonwizardfactory.cpp | 8 +++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index b70cd1a2d03..d7da856b7ea 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -369,6 +370,11 @@ void IWizardFactory::requestNewItemDialog(const QString &title, s_reopenData.setData(title, factories, defaultLocation, extraVariables); } +QIcon IWizardFactory::themedIcon(const Utils::FilePath &iconMaskPath) +{ + return Utils::Icon({{iconMaskPath, Theme::PanelTextColorDark}}, Icon::Tint).icon(); +} + void IWizardFactory::destroyFeatureProvider() { qDeleteAll(s_providerList); @@ -445,6 +451,7 @@ static QIcon iconWithText(const QIcon &icon, const QString &text) font.setPixelSize(fontSize); font.setStretch(85); QPainter p(&pixmap); + p.setPen(Utils::creatorTheme()->color(Theme::PanelTextColorDark)); p.setFont(font); QTextOption textOption(Qt::AlignHCenter | Qt::AlignBottom); textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index b6ede111847..1e27ec6c900 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -115,6 +115,8 @@ public: const Utils::FilePath &defaultLocation, const QVariantMap &extraVariables); + static QIcon themedIcon(const Utils::FilePath &iconMaskPath); + protected: static QSet pluginFeatures(); static QSet availableFeatures(Utils::Id platformId); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index bb8f24f03e2..579722a63d6 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -73,6 +73,7 @@ const char DISPLAY_NAME_KEY[] = "trDisplayName"; const char ICON_KEY[] = "icon"; const char ICON_TEXT_KEY[] = "iconText"; const char IMAGE_KEY[] = "image"; +const char ICON_KIND_KEY[] = "iconKind"; const char DESCRIPTION_KEY[] = "trDescription"; const char REQUIRED_FEATURES_KEY[] = "featuresRequired"; const char SUGGESTED_FEATURES_KEY[] = "featuresSuggested"; @@ -586,7 +587,12 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const FilePath &base return false; } const QString iconText = data.value(QLatin1String(ICON_TEXT_KEY)).toString(); - setIcon(strVal.isEmpty() ? QIcon() : QIcon(iconPath.toString()), iconText); + const bool iconIsThemed = data.value(QLatin1String(ICON_KIND_KEY)).toString() + .compare("Themed", Qt::CaseInsensitive) == 0; + setIcon(iconIsThemed ? themedIcon(iconPath) + : strVal.isEmpty() ? QIcon() + : QIcon(iconPath.toString()), + iconText); strVal = data.value(QLatin1String(IMAGE_KEY)).toString(); if (!strVal.isEmpty()) {