diff --git a/plugin/src/Caelestia/Config/appearanceconfig.cpp b/plugin/src/Caelestia/Config/appearanceconfig.cpp index 5a89baf0..a5230135 100644 --- a/plugin/src/Caelestia/Config/appearanceconfig.cpp +++ b/plugin/src/Caelestia/Config/appearanceconfig.cpp @@ -142,6 +142,20 @@ int AppearancePadding::extraExtraLarge() const { return m_tokens ? static_cast(m_tokens->extraExtraLarge() * m_scale) : 0; } +// FontConfig + +void FontConfig::setDefaults(int size, int weight, const QVariantMap& vaxes) { + m_size = size; + m_weight = weight; + m_vaxes = vaxes; +} + +// FontStyleConfig + +void FontStyleConfig::setDefaultFamily(const QString& family) { + m_family = family; +} + // AnimDurations void AnimDurations::bindTokens(AnimDurationTokens* tokens) { diff --git a/plugin/src/Caelestia/Config/appearanceconfig.hpp b/plugin/src/Caelestia/Config/appearanceconfig.hpp index 323b40d3..8f591cf0 100644 --- a/plugin/src/Caelestia/Config/appearanceconfig.hpp +++ b/plugin/src/Caelestia/Config/appearanceconfig.hpp @@ -131,7 +131,8 @@ class FontConfig : public ConfigObject { Q_OBJECT QML_ANONYMOUS - CONFIG_PROPERTY(QString, family, QStringLiteral("GoogleSansFlex")) + // Empty family inherits from the parent FontStyleConfig. + CONFIG_PROPERTY(QString, family, {}) CONFIG_PROPERTY(int, size, 14) CONFIG_PROPERTY(int, weight, QFont::Normal) CONFIG_PROPERTY(bool, italic, false) @@ -141,18 +142,14 @@ public: explicit FontConfig(QObject* parent = nullptr) : ConfigObject(parent) {} - void setDefaults(const QString& family, int size, int weight = QFont::Normal, const QVariantMap& vaxes = {}) { - m_family = family; - m_size = size; - m_weight = weight; - m_vaxes = vaxes; - } + void setDefaults(int size, int weight = QFont::Normal, const QVariantMap& vaxes = {}); }; class FontStyleConfig : public ConfigObject { Q_OBJECT QML_ANONYMOUS + CONFIG_PROPERTY(QString, family, QStringLiteral("GoogleSansFlex")) CONFIG_SUBOBJECT(FontConfig, large) CONFIG_SUBOBJECT(FontConfig, medium) CONFIG_SUBOBJECT(FontConfig, small) @@ -163,6 +160,8 @@ public: , m_large(new FontConfig(this)) , m_medium(new FontConfig(this)) , m_small(new FontConfig(this)) {} + + void setDefaultFamily(const QString& family); }; class IconFontStyleConfig : public FontStyleConfig { @@ -202,30 +201,36 @@ public: const auto mono = QStringLiteral("CaskaydiaCove NF"); const auto icons = QStringLiteral("Material Symbols Rounded"); - m_headline->large()->setDefaults(sans, 32, QFont::Normal); - m_headline->medium()->setDefaults(sans, 28, QFont::Normal); - m_headline->small()->setDefaults(sans, 24, QFont::Normal); + m_headline->setDefaultFamily(sans); + m_headline->large()->setDefaults(32, QFont::Normal); + m_headline->medium()->setDefaults(28, QFont::Normal); + m_headline->small()->setDefaults(24, QFont::Normal); - m_title->large()->setDefaults(sans, 22, QFont::Medium); - m_title->medium()->setDefaults(sans, 16, QFont::Medium); - m_title->small()->setDefaults(sans, 14, QFont::Medium); + m_title->setDefaultFamily(sans); + m_title->large()->setDefaults(22, QFont::Medium); + m_title->medium()->setDefaults(16, QFont::Medium); + m_title->small()->setDefaults(14, QFont::Medium); - m_body->large()->setDefaults(sans, 16, QFont::Normal); - m_body->medium()->setDefaults(sans, 14, QFont::Normal); - m_body->small()->setDefaults(sans, 12, QFont::Normal); + m_body->setDefaultFamily(sans); + m_body->large()->setDefaults(16, QFont::Normal); + m_body->medium()->setDefaults(14, QFont::Normal); + m_body->small()->setDefaults(12, QFont::Normal); - m_label->large()->setDefaults(sans, 14, QFont::Medium); - m_label->medium()->setDefaults(sans, 12, QFont::Medium); - m_label->small()->setDefaults(sans, 11, QFont::Medium); + m_label->setDefaultFamily(sans); + m_label->large()->setDefaults(14, QFont::Medium); + m_label->medium()->setDefaults(12, QFont::Medium); + m_label->small()->setDefaults(11, QFont::Medium); - m_mono->large()->setDefaults(mono, 16, QFont::Normal); - m_mono->medium()->setDefaults(mono, 14, QFont::Normal); - m_mono->small()->setDefaults(mono, 12, QFont::Normal); + m_mono->setDefaultFamily(mono); + m_mono->large()->setDefaults(16, QFont::Normal); + m_mono->medium()->setDefaults(14, QFont::Normal); + m_mono->small()->setDefaults(12, QFont::Normal); - m_icon->extraLarge()->setDefaults(icons, static_cast(48 / 1.33), QFont::Normal); - m_icon->large()->setDefaults(icons, static_cast(32 / 1.33), QFont::Normal); - m_icon->medium()->setDefaults(icons, static_cast(24 / 1.33), QFont::Normal); - m_icon->small()->setDefaults(icons, static_cast(20 / 1.33), QFont::Normal); + m_icon->setDefaultFamily(icons); + m_icon->extraLarge()->setDefaults(static_cast(48 / 1.33), QFont::Normal); + m_icon->large()->setDefaults(static_cast(32 / 1.33), QFont::Normal); + m_icon->medium()->setDefaults(static_cast(24 / 1.33), QFont::Normal); + m_icon->small()->setDefaults(static_cast(20 / 1.33), QFont::Normal); } }; diff --git a/plugin/src/Caelestia/Config/font.cpp b/plugin/src/Caelestia/Config/font.cpp index eeb06bd8..852e8355 100644 --- a/plugin/src/Caelestia/Config/font.cpp +++ b/plugin/src/Caelestia/Config/font.cpp @@ -17,9 +17,9 @@ QFont FontStyleBase::small() const { return m_small; } -QFont FontStyleBase::buildFont(const FontConfig* cfg) { +QFont FontStyleBase::buildFont(const FontConfig* cfg, const QString& fallbackFamily) { QFont font; - font.setFamily(cfg->family()); + font.setFamily(cfg->family().isEmpty() ? fallbackFamily : cfg->family()); font.setPointSize(cfg->size()); font.setWeight(QFont::Weight(cfg->weight())); font.setItalic(cfg->italic()); @@ -38,6 +38,7 @@ void FontStyleBase::bind(FontStyleConfig* cfg) { return; if (m_cfg) { + disconnect(m_cfg, nullptr, this, nullptr); disconnect(m_cfg->large(), nullptr, this, nullptr); disconnect(m_cfg->medium(), nullptr, this, nullptr); disconnect(m_cfg->small(), nullptr, this, nullptr); @@ -46,6 +47,7 @@ void FontStyleBase::bind(FontStyleConfig* cfg) { m_cfg = cfg; if (cfg) { + connect(cfg, &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild); connect(cfg->large(), &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild); connect(cfg->medium(), &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild); connect(cfg->small(), &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild); @@ -56,9 +58,10 @@ void FontStyleBase::bind(FontStyleConfig* cfg) { void FontStyleBase::rebuild() { if (m_cfg) { - m_large = buildFont(m_cfg->large()); - m_medium = buildFont(m_cfg->medium()); - m_small = buildFont(m_cfg->small()); + const auto family = m_cfg->family(); + m_large = buildFont(m_cfg->large(), family); + m_medium = buildFont(m_cfg->medium(), family); + m_small = buildFont(m_cfg->small(), family); } else { m_large = QFont(); m_medium = QFont(); @@ -113,10 +116,11 @@ IconFontBuilders* IconFontStyle::builders() const { void IconFontStyle::rebuild() { if (auto* cfg = qobject_cast(m_cfg)) { - m_large = buildFont(cfg->large()); - m_medium = buildFont(cfg->medium()); - m_small = buildFont(cfg->small()); - m_extraLarge = buildFont(cfg->extraLarge()); + const auto family = cfg->family(); + m_large = buildFont(cfg->large(), family); + m_medium = buildFont(cfg->medium(), family); + m_small = buildFont(cfg->small(), family); + m_extraLarge = buildFont(cfg->extraLarge(), family); } else { m_large = QFont(); m_medium = QFont(); diff --git a/plugin/src/Caelestia/Config/font.hpp b/plugin/src/Caelestia/Config/font.hpp index a4bc8e2d..4e6dc7e9 100644 --- a/plugin/src/Caelestia/Config/font.hpp +++ b/plugin/src/Caelestia/Config/font.hpp @@ -70,7 +70,7 @@ signals: protected: virtual void rebuild(); - static QFont buildFont(const FontConfig* cfg); + static QFont buildFont(const FontConfig* cfg, const QString& fallbackFamily); FontStyleConfig* m_cfg = nullptr; QFont m_large;