mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-25 16:13:54 -07:00
Snapshot system palette.
Took 8 minutes Took 11 seconds
This commit is contained in:
parent
19b3e8b286
commit
3de441a823
2 changed files with 24 additions and 1 deletions
|
|
@ -97,6 +97,13 @@ ThemeManager::ThemeManager(QObject *parent) : QObject(parent)
|
||||||
defaultStyleName = "windowsvista";
|
defaultStyleName = "windowsvista";
|
||||||
}
|
}
|
||||||
ensureThemeDirectoryExists();
|
ensureThemeDirectoryExists();
|
||||||
|
|
||||||
|
// Capture the QPA-initialised palette before we ever call qApp->setPalette().
|
||||||
|
// Once setPalette() is called, is_app_palette is locked true and neither
|
||||||
|
// setStyle() nor colorSchemeChanged will update it automatically.
|
||||||
|
// This snapshot is our guaranteed-clean base for applyStyleAndPalette.
|
||||||
|
systemPalette = qApp->palette();
|
||||||
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0))
|
#if (QT_VERSION >= QT_VERSION_CHECK(6, 5, 0))
|
||||||
connect(QGuiApplication::styleHints(), &QStyleHints::colorSchemeChanged, this, &ThemeManager::themeChangedSlot);
|
connect(QGuiApplication::styleHints(), &QStyleHints::colorSchemeChanged, this, &ThemeManager::themeChangedSlot);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -344,7 +351,7 @@ void ThemeManager::applyStyleAndPalette(const QString &themeName,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
base = qApp->palette();
|
base = systemPalette;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overlay custom palette colours
|
// Overlay custom palette colours
|
||||||
|
|
@ -434,6 +441,20 @@ void ThemeManager::themeChangedSlot()
|
||||||
emit themeChanged();
|
emit themeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ThemeManager::onColorSchemeChanged()
|
||||||
|
{
|
||||||
|
// qApp->palette() is locked (is_app_palette = true), so the QPA won't push
|
||||||
|
// the new OS palette through automatically. style->polish(QPalette&) queries
|
||||||
|
// GetSysColor on Windows — adequate for light mode, imperfect for Win11 dark
|
||||||
|
// mode (which uses a different API), but better than a stale light snapshot.
|
||||||
|
QPalette fresh;
|
||||||
|
qApp->style()->polish(fresh);
|
||||||
|
if (fresh.color(QPalette::Window).isValid()) {
|
||||||
|
systemPalette = fresh;
|
||||||
|
}
|
||||||
|
themeChangedSlot();
|
||||||
|
}
|
||||||
|
|
||||||
static QString roleBgName(ThemeManager::Role role)
|
static QString roleBgName(ThemeManager::Role role)
|
||||||
{
|
{
|
||||||
switch (role) {
|
switch (role) {
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QPalette systemPalette;
|
||||||
QString defaultStyleName;
|
QString defaultStyleName;
|
||||||
QString currentThemePath;
|
QString currentThemePath;
|
||||||
std::array<QBrush, Role::MaxRole + 1> brushes;
|
std::array<QBrush, Role::MaxRole + 1> brushes;
|
||||||
|
|
@ -89,6 +90,7 @@ public:
|
||||||
QBrush getExtraBgBrush(Role zone, int zoneId = 0);
|
QBrush getExtraBgBrush(Role zone, int zoneId = 0);
|
||||||
protected slots:
|
protected slots:
|
||||||
void themeChangedSlot();
|
void themeChangedSlot();
|
||||||
|
void onColorSchemeChanged();
|
||||||
signals:
|
signals:
|
||||||
void themeChanged();
|
void themeChanged();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue