77 lines
2.5 KiB
C++
77 lines
2.5 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, const char* prop, QObject* parent) {
|
|
if (scope && scope->config())
|
|
return scope->config()->appearance();
|
|
if (parent)
|
|
qCWarning(lcConfig, "Tokens.%s accessed without a ConfigScope ancestor on %s", prop,
|
|
parent->metaObject()->className());
|
|
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);
|
|
}
|
|
|
|
void Tokens::bindAnim() {
|
|
m_anim->bindDurations(GlobalConfig::instance()->appearance()->anim()->durations());
|
|
m_anim->bindCurves(TokenConfig::instance()->appearance()->curves());
|
|
}
|
|
|
|
#define TOKENS_ATTACHED_GETTER(Type, name) \
|
|
const Type* Tokens::name() const { \
|
|
auto* a = resolveAppearance(m_scope, #name, parent()); \
|
|
return a ? a->name() : nullptr; \
|
|
}
|
|
|
|
TOKENS_ATTACHED_GETTER(AppearanceRounding, rounding)
|
|
TOKENS_ATTACHED_GETTER(AppearanceSpacing, spacing)
|
|
TOKENS_ATTACHED_GETTER(AppearancePadding, padding)
|
|
TOKENS_ATTACHED_GETTER(AppearanceFont, font)
|
|
TOKENS_ATTACHED_GETTER(AppearanceTransparency, transparency)
|
|
|
|
#undef TOKENS_ATTACHED_GETTER
|
|
|
|
const SizeTokens* Tokens::sizes() const {
|
|
if (m_scope && m_scope->tokens())
|
|
return m_scope->tokens()->sizes();
|
|
if (parent())
|
|
qCWarning(lcConfig, "Tokens.sizes accessed without a ConfigScope ancestor on %s",
|
|
parent()->metaObject()->className());
|
|
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
|