nosignal-shell/plugin/src/Caelestia/Config/tokensattached.cpp
2026-04-12 22:38:36 +10:00

90 lines
2.2 KiB
C++

#include "tokensattached.hpp"
#include "anim.hpp"
#include "config.hpp"
#include "configscope.hpp"
#include "monitorconfigmanager.hpp"
#include "tokens.hpp"
namespace caelestia::config {
namespace {
const AppearanceConfig* resolveAppearance(ConfigScope* scope) {
if (scope && scope->config())
return scope->config()->appearance();
return GlobalConfig::instance()->appearance();
}
} // namespace
Tokens::Tokens(ConfigScope* scope, QObject* parent)
: QObject(parent)
, m_scope(scope)
, m_anim(new AnimTokens(this)) {
connectScope();
bindAnim();
}
void Tokens::connectScope() {
if (!m_scope)
return;
connect(m_scope, &ConfigScope::configChanged, this, &Tokens::sourceChanged);
connect(m_scope, &ConfigScope::configChanged, this, &Tokens::bindAnim);
}
void Tokens::bindAnim() {
auto* appearance = resolveAppearance(m_scope);
if (!appearance)
return;
m_anim->bindDurations(appearance->anim()->durations());
auto* tokens = TokenConfig::instance();
if (tokens)
m_anim->bindCurves(tokens->appearance()->curves());
}
const AppearanceRounding* Tokens::rounding() const {
auto* a = resolveAppearance(m_scope);
return a ? a->rounding() : nullptr;
}
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 AppearanceTransparency* Tokens::transparency() const {
auto* a = resolveAppearance(m_scope);
return a ? a->transparency() : nullptr;
}
const SizeTokens* Tokens::sizes() const {
if (m_scope && m_scope->tokens())
return m_scope->tokens()->sizes();
return TokenConfig::instance()->sizes();
}
const AnimTokens* Tokens::anim() const {
return m_anim;
}
TokenConfig* Tokens::forScreen(const QString& screen) {
return TokenConfig::forScreen(screen);
}
Tokens* Tokens::qmlAttachedProperties(QObject* object) {
return new Tokens(ConfigScope::find(object), object);
}
} // namespace caelestia::config