mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-21 00:55:09 -07:00
[Onboarding] Seed the theme picker from the theme's identity accent
Replace the hardcoded brand-green preseed with the shipped theme's own AccentStrong (Plasma seeds violet, Fusion green), resolved from the default palette so auto/user-generated palettes can't mask it, and re-seed whenever the theme changes so the swatch never goes stale. Also consult the shipped palette in maybeAutoGeneratePalette so scheme flips don't regenerate a fresh palette over curated theme colors.
This commit is contained in:
parent
fc891be7b8
commit
d998b97530
2 changed files with 48 additions and 7 deletions
|
|
@ -5,7 +5,6 @@
|
|||
#include "../../interface/palette_editor/quick_setup_panel.h"
|
||||
#include "../../interface/theme_manager.h"
|
||||
#include "../../interface/widgets/general/background_sources.h"
|
||||
#include "../brand_colors.h"
|
||||
#include "libcockatrice/settings/appearance_settings.h"
|
||||
|
||||
#include <QComboBox>
|
||||
|
|
@ -15,10 +14,31 @@
|
|||
#include <QGroupBox>
|
||||
#include <QLabel>
|
||||
#include <QMessageBox>
|
||||
#include <QPalette>
|
||||
#include <QVBoxLayout>
|
||||
#include <libcockatrice/settings/paths_settings.h>
|
||||
#include <libcockatrice/settings/personal_settings.h>
|
||||
|
||||
namespace
|
||||
{
|
||||
/** @brief A theme's shipped identity accent, immune to any user- or auto-
|
||||
* generated palette that may currently be masking appColor(). */
|
||||
QColor themeIdentityAccent(const QString &themeDirPath, const QString &themeName)
|
||||
{
|
||||
for (const QString &scheme : {QStringLiteral("Light"), QStringLiteral("Dark")}) {
|
||||
const PaletteConfig cfg = ThemeManager::loadDefaultPaletteConfig(themeDirPath, themeName, scheme);
|
||||
if (cfg.appColors.contains(AppColor::AccentStrong)) {
|
||||
return cfg.appColors.value(AppColor::AccentStrong);
|
||||
}
|
||||
const QColor highlight = cfg.colors.value(QPalette::Active).value(QPalette::Highlight);
|
||||
if (highlight.isValid()) {
|
||||
return highlight;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
} // namespace
|
||||
|
||||
ThemeSetupPage::ThemeSetupPage(QWidget *parent) : FirstRunWizardPage(parent)
|
||||
{
|
||||
themeCombo = new QComboBox(this);
|
||||
|
|
@ -31,11 +51,14 @@ ThemeSetupPage::ThemeSetupPage(QWidget *parent) : FirstRunWizardPage(parent)
|
|||
|
||||
quickSetupPanel = new QuickSetupPanel(this);
|
||||
|
||||
// Preseed with the brand green so a fresh install's generated palette --
|
||||
// and therefore the banner accent, which follows QPalette::Highlight --
|
||||
// keeps the Cockatrice identity until the user picks their own look.
|
||||
// Seed the picker from the current theme's own identity accent rather than
|
||||
// a hardcoded brand green: Plasma seeds violet, Fusion green, etc., and it
|
||||
// is immune to stale generated palettes that may mask appColor(). This was
|
||||
// initially a brand-green workaround from before Fusion became the default.
|
||||
// setAccentColor blocks signals, so this never triggers a generation.
|
||||
quickSetupPanel->setAccentColor(kCockatriceBrandGreen);
|
||||
lastSeededTheme = SettingsCache::instance().getThemeName();
|
||||
quickSetupPanel->setAccentColor(
|
||||
themeIdentityAccent(themeManager->getAvailableThemes().value(lastSeededTheme), lastSeededTheme));
|
||||
|
||||
connect(themeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ThemeSetupPage::onThemeChanged);
|
||||
connect(schemeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ThemeSetupPage::onSchemeChanged);
|
||||
|
|
@ -54,7 +77,8 @@ ThemeSetupPage::ThemeSetupPage(QWidget *parent) : FirstRunWizardPage(parent)
|
|||
// Mirrors AppearanceSettingsPage's identical listener for the combo-sync
|
||||
// half of this.
|
||||
connect(themeManager, &ThemeManager::themeChanged, this, [this] {
|
||||
const QString newDir = themeManager->getAvailableThemes().value(SettingsCache::instance().getThemeName());
|
||||
const QString newTheme = SettingsCache::instance().getThemeName();
|
||||
const QString newDir = themeManager->getAvailableThemes().value(newTheme);
|
||||
const ThemeConfig cfg = ThemeConfig::fromThemeDir(newDir);
|
||||
const QString current = cfg.colorScheme;
|
||||
|
||||
|
|
@ -63,6 +87,14 @@ ThemeSetupPage::ThemeSetupPage(QWidget *parent) : FirstRunWizardPage(parent)
|
|||
schemeCombo->setCurrentIndex(idx >= 0 ? idx : 0);
|
||||
schemeCombo->blockSignals(false);
|
||||
|
||||
// Keep the picker's accent in step with the theme's own identity; the
|
||||
// swatch seeded at construction would otherwise stay stale (e.g. green
|
||||
// from a previous theme) when the user toggles themes.
|
||||
if (newTheme != lastSeededTheme) {
|
||||
lastSeededTheme = newTheme;
|
||||
quickSetupPanel->setAccentColor(themeIdentityAccent(newDir, newTheme));
|
||||
}
|
||||
|
||||
maybeAutoGeneratePalette();
|
||||
});
|
||||
|
||||
|
|
@ -165,8 +197,14 @@ void ThemeSetupPage::maybeAutoGeneratePalette()
|
|||
const QString dirPath = themeManager->getAvailableThemes().value(SettingsCache::instance().getThemeName());
|
||||
const QString scheme = resolvedScheme();
|
||||
|
||||
// The theme dir may resolve to the user profile even for built-in themes
|
||||
// (getAvailableThemes gives the user copy precedence), so consult the
|
||||
// shipped palette too -- both via loadDefaultPaletteConfig's system fallback.
|
||||
// Without it, scheme flips regenerate a fresh palette from the picker accent
|
||||
// and clobber the curated colours the theme explicitly ships.
|
||||
if (PaletteConfig::fromScheme(dirPath, scheme).hasPalette() ||
|
||||
PaletteConfig::fromDefault(dirPath, scheme).hasPalette()) {
|
||||
ThemeManager::loadDefaultPaletteConfig(dirPath, SettingsCache::instance().getThemeName(), scheme)
|
||||
.hasPalette()) {
|
||||
return; // theme already has something real to show -- leave it alone
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@ private:
|
|||
QComboBox *homeTabBackgroundCombo;
|
||||
|
||||
bool paletteDirty = false;
|
||||
|
||||
/// Theme whose identity accent currently seeds the picker.
|
||||
QString lastSeededTheme;
|
||||
};
|
||||
|
||||
#endif // THEME_SETUP_PAGE_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue