From 36b4eac829e9650be44cb1469c70b601f11dbbc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Wed, 8 Apr 2026 15:13:40 +0200 Subject: [PATCH 1/4] Utility method to check if a theme is supposed to be in dark or light mode. Took 22 minutes Took 4 seconds --- cockatrice/src/interface/theme_manager.cpp | 25 ++++++++++++++++++++++ cockatrice/src/interface/theme_manager.h | 1 + 2 files changed, 26 insertions(+) diff --git a/cockatrice/src/interface/theme_manager.cpp b/cockatrice/src/interface/theme_manager.cpp index 5809ce350..6a5514fb1 100644 --- a/cockatrice/src/interface/theme_manager.cpp +++ b/cockatrice/src/interface/theme_manager.cpp @@ -108,6 +108,31 @@ void ThemeManager::ensureThemeDirectoryExists() } } +bool ThemeManager::isDarkMode() +{ + auto themeName = SettingsCache::instance().getThemeName(); + // Explicit Dark Mode + if (themeName == FUSION_THEME_NAME_LIGHT || themeName.endsWith("(Light)")) { + return false; + } + // Explicit Light Mode + if (themeName == FUSION_THEME_NAME_DARK || themeName.endsWith("(Dark)")) { + return true; + } + + // Auto detection on compatible Qt versions +#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)) + if (QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark && + (themeName == NONE_THEME_NAME || themeName == FUSION_THEME_NAME || themeName.endsWith("(System Default)"))) { + return true; + } else { + return false; + } +#endif + // Default to light mode + return false; +} + QStringMap &ThemeManager::getAvailableThemes() { QDir dir; diff --git a/cockatrice/src/interface/theme_manager.h b/cockatrice/src/interface/theme_manager.h index d942f0fef..c039c5728 100644 --- a/cockatrice/src/interface/theme_manager.h +++ b/cockatrice/src/interface/theme_manager.h @@ -50,6 +50,7 @@ private: protected: void ensureThemeDirectoryExists(); + bool isDarkMode(); QBrush loadBrush(QString fileName, QColor fallbackColor); QBrush loadExtraBrush(QString fileName, QBrush &fallbackBrush); From d99f40623cf125fb3e7c6f74ae0286ce1dfa03c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Wed, 8 Apr 2026 15:16:28 +0200 Subject: [PATCH 2/4] Method is public. Took 3 minutes --- cockatrice/src/interface/theme_manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cockatrice/src/interface/theme_manager.h b/cockatrice/src/interface/theme_manager.h index c039c5728..81e236732 100644 --- a/cockatrice/src/interface/theme_manager.h +++ b/cockatrice/src/interface/theme_manager.h @@ -50,11 +50,11 @@ private: protected: void ensureThemeDirectoryExists(); - bool isDarkMode(); QBrush loadBrush(QString fileName, QColor fallbackColor); QBrush loadExtraBrush(QString fileName, QBrush &fallbackBrush); public: + bool isDarkMode(); QStringMap &getAvailableThemes(); QBrush &getBgBrush(Role zone); From 1261e7da78e993089a0d5063002e0ef38c1fcbb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Wed, 8 Apr 2026 15:19:09 +0200 Subject: [PATCH 3/4] Add a utility method to check if we're using a built-in theme Took 3 minutes Took 3 seconds --- cockatrice/src/interface/theme_manager.cpp | 8 ++++++++ cockatrice/src/interface/theme_manager.h | 1 + 2 files changed, 9 insertions(+) diff --git a/cockatrice/src/interface/theme_manager.cpp b/cockatrice/src/interface/theme_manager.cpp index 6a5514fb1..8b587be6e 100644 --- a/cockatrice/src/interface/theme_manager.cpp +++ b/cockatrice/src/interface/theme_manager.cpp @@ -133,6 +133,14 @@ bool ThemeManager::isDarkMode() return false; } +bool ThemeManager::isBuiltInTheme() +{ + const auto themeName = SettingsCache::instance().getThemeName(); + + return themeName == NONE_THEME_NAME || themeName == FUSION_THEME_NAME || themeName == FUSION_THEME_NAME_LIGHT || + themeName == FUSION_THEME_NAME_DARK; +} + QStringMap &ThemeManager::getAvailableThemes() { QDir dir; diff --git a/cockatrice/src/interface/theme_manager.h b/cockatrice/src/interface/theme_manager.h index 81e236732..416923128 100644 --- a/cockatrice/src/interface/theme_manager.h +++ b/cockatrice/src/interface/theme_manager.h @@ -54,6 +54,7 @@ protected: QBrush loadExtraBrush(QString fileName, QBrush &fallbackBrush); public: + bool isBuiltInTheme(); bool isDarkMode(); QStringMap &getAvailableThemes(); From 4568f4b5012aeeddd24dcb2c708f8437063410f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Wed, 8 Apr 2026 15:24:49 +0200 Subject: [PATCH 4/4] Use built-in theme detection for home screen. Took 6 minutes --- cockatrice/src/interface/widgets/general/home_widget.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cockatrice/src/interface/widgets/general/home_widget.cpp b/cockatrice/src/interface/widgets/general/home_widget.cpp index ea20ef6a0..8c5d76dfc 100644 --- a/cockatrice/src/interface/widgets/general/home_widget.cpp +++ b/cockatrice/src/interface/widgets/general/home_widget.cpp @@ -2,6 +2,7 @@ #include "../../../client/settings/cache_settings.h" #include "../../../interface/widgets/tabs/tab_supervisor.h" +#include "../../theme_manager.h" #include "../../window_main.h" #include "background_sources.h" #include "home_styled_button.h" @@ -256,7 +257,7 @@ void HomeWidget::updateConnectButton(const ClientStatus status) QPair HomeWidget::extractDominantColors(const QPixmap &pixmap) { - if (SettingsCache::instance().getThemeName() == "Default" && + if (themeManager->isBuiltInTheme() && SettingsCache::instance().getHomeTabBackgroundSource() == BackgroundSources::toId(BackgroundSources::Theme)) { return QPair(QColor::fromRgb(20, 140, 60), QColor::fromRgb(120, 200, 80)); }