feat: allow specifying font family by style
This commit is contained in:
parent
c4539d6960
commit
23c138e417
4 changed files with 59 additions and 36 deletions
|
|
@ -142,6 +142,20 @@ int AppearancePadding::extraExtraLarge() const {
|
|||
return m_tokens ? static_cast<int>(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) {
|
||||
|
|
|
|||
|
|
@ -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<int>(48 / 1.33), QFont::Normal);
|
||||
m_icon->large()->setDefaults(icons, static_cast<int>(32 / 1.33), QFont::Normal);
|
||||
m_icon->medium()->setDefaults(icons, static_cast<int>(24 / 1.33), QFont::Normal);
|
||||
m_icon->small()->setDefaults(icons, static_cast<int>(20 / 1.33), QFont::Normal);
|
||||
m_icon->setDefaultFamily(icons);
|
||||
m_icon->extraLarge()->setDefaults(static_cast<int>(48 / 1.33), QFont::Normal);
|
||||
m_icon->large()->setDefaults(static_cast<int>(32 / 1.33), QFont::Normal);
|
||||
m_icon->medium()->setDefaults(static_cast<int>(24 / 1.33), QFont::Normal);
|
||||
m_icon->small()->setDefaults(static_cast<int>(20 / 1.33), QFont::Normal);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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<IconFontStyleConfig*>(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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue