feat: Tokens attached object points to Config.appearance

This commit is contained in:
2 * r + 2 * t 2026-04-11 21:16:35 +10:00
parent 324acb492a
commit 0429650a6e
2 changed files with 51 additions and 51 deletions

View file

@ -91,38 +91,52 @@ Tokens::Tokens(ConfigScope* scope, QObject* parent)
void Tokens::connectScope() { void Tokens::connectScope() {
if (!m_scope) if (!m_scope)
return; return;
connect(m_scope, &ConfigScope::tokensChanged, this, &Tokens::sourceChanged);
connect(m_scope, &ConfigScope::configChanged, this, &Tokens::sourceChanged); connect(m_scope, &ConfigScope::configChanged, this, &Tokens::sourceChanged);
} }
#define TOKENS_ATTACHED_GETTER(Type, name) \ // Resolve appearance from per-monitor GlobalConfig overlay or global GlobalConfig
const Type* Tokens::name() const { \ static const AppearanceConfig* resolveAppearance(ConfigScope* scope) {
if (m_scope && m_scope->tokens()) \ if (scope && scope->config())
return m_scope->tokens()->name(); \ return scope->config()->appearance();
auto* global = TokenConfig::instance(); \ auto* global = GlobalConfig::instance();
return global ? global->name() : nullptr; \ return global ? global->appearance() : nullptr;
} }
TOKENS_ATTACHED_GETTER(AppearanceTokens, appearance) const AppearanceRounding* Tokens::rounding() const {
TOKENS_ATTACHED_GETTER(BarTokens, bar) auto* a = resolveAppearance(m_scope);
TOKENS_ATTACHED_GETTER(DashboardTokens, dashboard) return a ? a->rounding() : nullptr;
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)
#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) { Tokens* Tokens::qmlAttachedProperties(QObject* object) {
// Ensure TokenConfig singleton is created before any attached property access // Ensure GlobalConfig singleton is created before any attached property access
if (!TokenConfig::instance()) { if (!GlobalConfig::instance()) {
if (auto* engine = qmlEngine(object)) if (auto* engine = qmlEngine(object))
engine->singletonInstance<TokenConfig*>("Caelestia.Config", "TokenConfig"); engine->singletonInstance<GlobalConfig*>("Caelestia.Config", "GlobalConfig");
} }
return new Tokens(ConfigScope::find(object), object); return new Tokens(ConfigScope::find(object), object);
} }

View file

@ -1,5 +1,6 @@
#pragma once #pragma once
#include "appearanceconfig.hpp"
#include "configobject.hpp" #include "configobject.hpp"
#include <qlist.h> #include <qlist.h>
@ -329,37 +330,22 @@ class Tokens : public QObject {
QML_UNCREATABLE("") QML_UNCREATABLE("")
QML_ATTACHED(Tokens) QML_ATTACHED(Tokens)
Q_PROPERTY(caelestia::config::ConfigScope* scope READ scope NOTIFY sourceChanged) Q_PROPERTY(const caelestia::config::AppearanceRounding* rounding READ rounding NOTIFY sourceChanged)
Q_PROPERTY(const caelestia::config::AppearanceTokens* appearance READ appearance NOTIFY sourceChanged) Q_PROPERTY(const caelestia::config::AppearanceSpacing* spacing READ spacing NOTIFY sourceChanged)
Q_PROPERTY(const caelestia::config::BarTokens* bar READ bar NOTIFY sourceChanged) Q_PROPERTY(const caelestia::config::AppearancePadding* padding READ padding NOTIFY sourceChanged)
Q_PROPERTY(const caelestia::config::DashboardTokens* dashboard READ dashboard NOTIFY sourceChanged) Q_PROPERTY(const caelestia::config::AppearanceFont* font READ font NOTIFY sourceChanged)
Q_PROPERTY(const caelestia::config::LauncherTokens* launcher READ launcher NOTIFY sourceChanged) Q_PROPERTY(const caelestia::config::AppearanceAnim* anim READ anim NOTIFY sourceChanged)
Q_PROPERTY(const caelestia::config::NotifsTokens* notifs READ notifs NOTIFY sourceChanged) Q_PROPERTY(const caelestia::config::AppearanceTransparency* transparency READ transparency 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)
public: public:
explicit Tokens(ConfigScope* scope, QObject* parent = nullptr); explicit Tokens(ConfigScope* scope, QObject* parent = nullptr);
[[nodiscard]] ConfigScope* scope() const { return m_scope; } [[nodiscard]] const AppearanceRounding* rounding() const;
[[nodiscard]] const AppearanceSpacing* spacing() const;
[[nodiscard]] const AppearanceTokens* appearance() const; [[nodiscard]] const AppearancePadding* padding() const;
[[nodiscard]] const BarTokens* bar() const; [[nodiscard]] const AppearanceFont* font() const;
[[nodiscard]] const DashboardTokens* dashboard() const; [[nodiscard]] const AppearanceAnim* anim() const;
[[nodiscard]] const LauncherTokens* launcher() const; [[nodiscard]] const AppearanceTransparency* transparency() 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;
static Tokens* qmlAttachedProperties(QObject* object); static Tokens* qmlAttachedProperties(QObject* object);