diff --git a/plugin/src/Caelestia/Config/tokens.cpp b/plugin/src/Caelestia/Config/tokens.cpp index 2b0559fa..3c987ac1 100644 --- a/plugin/src/Caelestia/Config/tokens.cpp +++ b/plugin/src/Caelestia/Config/tokens.cpp @@ -91,38 +91,52 @@ Tokens::Tokens(ConfigScope* scope, QObject* parent) void Tokens::connectScope() { if (!m_scope) return; - connect(m_scope, &ConfigScope::tokensChanged, this, &Tokens::sourceChanged); connect(m_scope, &ConfigScope::configChanged, this, &Tokens::sourceChanged); } -#define TOKENS_ATTACHED_GETTER(Type, name) \ - const Type* Tokens::name() const { \ - if (m_scope && m_scope->tokens()) \ - return m_scope->tokens()->name(); \ - auto* global = TokenConfig::instance(); \ - return global ? global->name() : nullptr; \ - } +// Resolve appearance from per-monitor GlobalConfig overlay or global GlobalConfig +static const AppearanceConfig* resolveAppearance(ConfigScope* scope) { + if (scope && scope->config()) + return scope->config()->appearance(); + auto* global = GlobalConfig::instance(); + return global ? global->appearance() : nullptr; +} -TOKENS_ATTACHED_GETTER(AppearanceTokens, appearance) -TOKENS_ATTACHED_GETTER(BarTokens, bar) -TOKENS_ATTACHED_GETTER(DashboardTokens, dashboard) -TOKENS_ATTACHED_GETTER(LauncherTokens, launcher) -TOKENS_ATTACHED_GETTER(NotifsTokens, notifs) -TOKENS_ATTACHED_GETTER(OsdTokens, osd) -TOKENS_ATTACHED_GETTER(SessionTokens, session) -TOKENS_ATTACHED_GETTER(SidebarTokens, sidebar) -TOKENS_ATTACHED_GETTER(UtilitiesTokens, utilities) -TOKENS_ATTACHED_GETTER(LockTokens, lock) -TOKENS_ATTACHED_GETTER(WInfoTokens, winfo) -TOKENS_ATTACHED_GETTER(ControlCenterTokens, controlCenter) +const AppearanceRounding* Tokens::rounding() const { + auto* a = resolveAppearance(m_scope); + return a ? a->rounding() : nullptr; +} -#undef TOKENS_ATTACHED_GETTER +const AppearanceSpacing* Tokens::spacing() const { + auto* a = resolveAppearance(m_scope); + return a ? a->spacing() : nullptr; +} + +const AppearancePadding* Tokens::padding() const { + auto* a = resolveAppearance(m_scope); + return a ? a->padding() : nullptr; +} + +const AppearanceFont* Tokens::font() const { + auto* a = resolveAppearance(m_scope); + return a ? a->font() : nullptr; +} + +const AppearanceAnim* Tokens::anim() const { + auto* a = resolveAppearance(m_scope); + return a ? a->anim() : nullptr; +} + +const AppearanceTransparency* Tokens::transparency() const { + auto* a = resolveAppearance(m_scope); + return a ? a->transparency() : nullptr; +} Tokens* Tokens::qmlAttachedProperties(QObject* object) { - // Ensure TokenConfig singleton is created before any attached property access - if (!TokenConfig::instance()) { + // Ensure GlobalConfig singleton is created before any attached property access + if (!GlobalConfig::instance()) { if (auto* engine = qmlEngine(object)) - engine->singletonInstance("Caelestia.Config", "TokenConfig"); + engine->singletonInstance("Caelestia.Config", "GlobalConfig"); } return new Tokens(ConfigScope::find(object), object); } diff --git a/plugin/src/Caelestia/Config/tokens.hpp b/plugin/src/Caelestia/Config/tokens.hpp index b8b4ab79..7b38804c 100644 --- a/plugin/src/Caelestia/Config/tokens.hpp +++ b/plugin/src/Caelestia/Config/tokens.hpp @@ -1,5 +1,6 @@ #pragma once +#include "appearanceconfig.hpp" #include "configobject.hpp" #include @@ -329,37 +330,22 @@ class Tokens : public QObject { QML_UNCREATABLE("") QML_ATTACHED(Tokens) - Q_PROPERTY(caelestia::config::ConfigScope* scope READ scope NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::AppearanceTokens* appearance READ appearance NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::BarTokens* bar READ bar NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::DashboardTokens* dashboard READ dashboard NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::LauncherTokens* launcher READ launcher NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::NotifsTokens* notifs READ notifs NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::OsdTokens* osd READ osd NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::SessionTokens* session READ session NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::SidebarTokens* sidebar READ sidebar NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::UtilitiesTokens* utilities READ utilities NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::LockTokens* lock READ lock NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::WInfoTokens* winfo READ winfo NOTIFY sourceChanged) - Q_PROPERTY(const caelestia::config::ControlCenterTokens* controlCenter READ controlCenter NOTIFY sourceChanged) + Q_PROPERTY(const caelestia::config::AppearanceRounding* rounding READ rounding NOTIFY sourceChanged) + Q_PROPERTY(const caelestia::config::AppearanceSpacing* spacing READ spacing NOTIFY sourceChanged) + Q_PROPERTY(const caelestia::config::AppearancePadding* padding READ padding NOTIFY sourceChanged) + Q_PROPERTY(const caelestia::config::AppearanceFont* font READ font NOTIFY sourceChanged) + Q_PROPERTY(const caelestia::config::AppearanceAnim* anim READ anim NOTIFY sourceChanged) + Q_PROPERTY(const caelestia::config::AppearanceTransparency* transparency READ transparency NOTIFY sourceChanged) public: explicit Tokens(ConfigScope* scope, QObject* parent = nullptr); - [[nodiscard]] ConfigScope* scope() const { return m_scope; } - - [[nodiscard]] const AppearanceTokens* appearance() const; - [[nodiscard]] const BarTokens* bar() const; - [[nodiscard]] const DashboardTokens* dashboard() const; - [[nodiscard]] const LauncherTokens* launcher() const; - [[nodiscard]] const NotifsTokens* notifs() const; - [[nodiscard]] const OsdTokens* osd() const; - [[nodiscard]] const SessionTokens* session() const; - [[nodiscard]] const SidebarTokens* sidebar() const; - [[nodiscard]] const UtilitiesTokens* utilities() const; - [[nodiscard]] const LockTokens* lock() const; - [[nodiscard]] const WInfoTokens* winfo() const; - [[nodiscard]] const ControlCenterTokens* controlCenter() const; + [[nodiscard]] const AppearanceRounding* rounding() const; + [[nodiscard]] const AppearanceSpacing* spacing() const; + [[nodiscard]] const AppearancePadding* padding() const; + [[nodiscard]] const AppearanceFont* font() const; + [[nodiscard]] const AppearanceAnim* anim() const; + [[nodiscard]] const AppearanceTransparency* transparency() const; static Tokens* qmlAttachedProperties(QObject* object);