From 56ba5e5182913d01a694f9cb1cd53937ace2d645 Mon Sep 17 00:00:00 2001 From: Vladimir Golovnev Date: Sat, 12 Aug 2023 18:57:34 +0300 Subject: [PATCH] Correctly load colors from custom themes PR #19448. Closes #19447. --- src/gui/uithemesource.cpp | 33 ++++++++++++++++++++------------- src/gui/uithemesource.h | 11 ++++++----- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/gui/uithemesource.cpp b/src/gui/uithemesource.cpp index 8565c6414..c4e4ef7f4 100644 --- a/src/gui/uithemesource.cpp +++ b/src/gui/uithemesource.cpp @@ -161,13 +161,13 @@ void DefaultThemeSource::loadColors() return; } - const QByteArray configData = readResult.value(); + const QByteArray &configData = readResult.value(); if (configData.isEmpty()) return; const QJsonObject config = parseThemeConfig(configData); - QHash lightModeColorOverrides = colorsFromJSON(config.value(KEY_COLORS_LIGHT).toObject()); + const QHash lightModeColorOverrides = colorsFromJSON(config.value(KEY_COLORS_LIGHT).toObject()); for (auto overridesIt = lightModeColorOverrides.cbegin(); overridesIt != lightModeColorOverrides.cend(); ++overridesIt) { auto it = m_colors.find(overridesIt.key()); @@ -175,7 +175,7 @@ void DefaultThemeSource::loadColors() it.value().light = overridesIt.value(); } - QHash darkModeColorOverrides = colorsFromJSON(config.value(KEY_COLORS_DARK).toObject()); + const QHash darkModeColorOverrides = colorsFromJSON(config.value(KEY_COLORS_DARK).toObject()); for (auto overridesIt = darkModeColorOverrides.cbegin(); overridesIt != darkModeColorOverrides.cend(); ++overridesIt) { auto it = m_colors.find(overridesIt.key()); @@ -184,6 +184,12 @@ void DefaultThemeSource::loadColors() } } +CustomThemeSource::CustomThemeSource(const Path &themeRootPath) + : m_themeRootPath {themeRootPath} +{ + loadColors(); +} + QColor CustomThemeSource::getColor(const QString &colorId, const ColorMode colorMode) const { if (colorMode == ColorMode::Dark) @@ -246,6 +252,11 @@ DefaultThemeSource *CustomThemeSource::defaultThemeSource() const return m_defaultThemeSource.get(); } +Path CustomThemeSource::themeRootPath() const +{ + return m_themeRootPath; +} + void CustomThemeSource::loadColors() { const auto readResult = Utils::IO::readFile((themeRootPath() / Path(CONFIG_FILE_NAME)), FILE_MAX_SIZE, QIODevice::Text); @@ -257,7 +268,7 @@ void CustomThemeSource::loadColors() return; } - const QByteArray configData = readResult.value(); + const QByteArray &configData = readResult.value(); if (configData.isEmpty()) return; @@ -267,13 +278,9 @@ void CustomThemeSource::loadColors() m_darkModeColors.insert(colorsFromJSON(config.value(KEY_COLORS_DARK).toObject())); } -Path QRCThemeSource::themeRootPath() const -{ - return Path(u":/uitheme"_s); -} - FolderThemeSource::FolderThemeSource(const Path &folderPath) - : m_folder {folderPath} + : CustomThemeSource(folderPath) + , m_folder {folderPath} { } @@ -285,10 +292,10 @@ QByteArray FolderThemeSource::readStyleSheet() const QString stylesheetResourcesDir = u":/uitheme"_s; QByteArray styleSheetData = CustomThemeSource::readStyleSheet(); - return styleSheetData.replace(stylesheetResourcesDir.toUtf8(), themeRootPath().data().toUtf8()); + return styleSheetData.replace(stylesheetResourcesDir.toUtf8(), m_folder.data().toUtf8()); } -Path FolderThemeSource::themeRootPath() const +QRCThemeSource::QRCThemeSource() + : CustomThemeSource(Path(u":/uitheme"_s)) { - return m_folder; } diff --git a/src/gui/uithemesource.h b/src/gui/uithemesource.h index 8a156d8fc..cb2afbbeb 100644 --- a/src/gui/uithemesource.h +++ b/src/gui/uithemesource.h @@ -84,21 +84,24 @@ public: QByteArray readStyleSheet() override; protected: - virtual Path themeRootPath() const = 0; + explicit CustomThemeSource(const Path &themeRootPath); + DefaultThemeSource *defaultThemeSource() const; private: + Path themeRootPath() const; void loadColors(); const std::unique_ptr m_defaultThemeSource = std::make_unique(); + Path m_themeRootPath; QHash m_colors; QHash m_darkModeColors; }; class QRCThemeSource final : public CustomThemeSource { -private: - Path themeRootPath() const override; +public: + QRCThemeSource(); }; class FolderThemeSource : public CustomThemeSource @@ -109,7 +112,5 @@ public: QByteArray readStyleSheet() override; private: - Path themeRootPath() const override; - const Path m_folder; };