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;
|
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
|
// AnimDurations
|
||||||
|
|
||||||
void AnimDurations::bindTokens(AnimDurationTokens* tokens) {
|
void AnimDurations::bindTokens(AnimDurationTokens* tokens) {
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,8 @@ class FontConfig : public ConfigObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
QML_ANONYMOUS
|
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, size, 14)
|
||||||
CONFIG_PROPERTY(int, weight, QFont::Normal)
|
CONFIG_PROPERTY(int, weight, QFont::Normal)
|
||||||
CONFIG_PROPERTY(bool, italic, false)
|
CONFIG_PROPERTY(bool, italic, false)
|
||||||
|
|
@ -141,18 +142,14 @@ public:
|
||||||
explicit FontConfig(QObject* parent = nullptr)
|
explicit FontConfig(QObject* parent = nullptr)
|
||||||
: ConfigObject(parent) {}
|
: ConfigObject(parent) {}
|
||||||
|
|
||||||
void setDefaults(const QString& family, int size, int weight = QFont::Normal, const QVariantMap& vaxes = {}) {
|
void setDefaults(int size, int weight = QFont::Normal, const QVariantMap& vaxes = {});
|
||||||
m_family = family;
|
|
||||||
m_size = size;
|
|
||||||
m_weight = weight;
|
|
||||||
m_vaxes = vaxes;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class FontStyleConfig : public ConfigObject {
|
class FontStyleConfig : public ConfigObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
QML_ANONYMOUS
|
QML_ANONYMOUS
|
||||||
|
|
||||||
|
CONFIG_PROPERTY(QString, family, QStringLiteral("GoogleSansFlex"))
|
||||||
CONFIG_SUBOBJECT(FontConfig, large)
|
CONFIG_SUBOBJECT(FontConfig, large)
|
||||||
CONFIG_SUBOBJECT(FontConfig, medium)
|
CONFIG_SUBOBJECT(FontConfig, medium)
|
||||||
CONFIG_SUBOBJECT(FontConfig, small)
|
CONFIG_SUBOBJECT(FontConfig, small)
|
||||||
|
|
@ -163,6 +160,8 @@ public:
|
||||||
, m_large(new FontConfig(this))
|
, m_large(new FontConfig(this))
|
||||||
, m_medium(new FontConfig(this))
|
, m_medium(new FontConfig(this))
|
||||||
, m_small(new FontConfig(this)) {}
|
, m_small(new FontConfig(this)) {}
|
||||||
|
|
||||||
|
void setDefaultFamily(const QString& family);
|
||||||
};
|
};
|
||||||
|
|
||||||
class IconFontStyleConfig : public FontStyleConfig {
|
class IconFontStyleConfig : public FontStyleConfig {
|
||||||
|
|
@ -202,30 +201,36 @@ public:
|
||||||
const auto mono = QStringLiteral("CaskaydiaCove NF");
|
const auto mono = QStringLiteral("CaskaydiaCove NF");
|
||||||
const auto icons = QStringLiteral("Material Symbols Rounded");
|
const auto icons = QStringLiteral("Material Symbols Rounded");
|
||||||
|
|
||||||
m_headline->large()->setDefaults(sans, 32, QFont::Normal);
|
m_headline->setDefaultFamily(sans);
|
||||||
m_headline->medium()->setDefaults(sans, 28, QFont::Normal);
|
m_headline->large()->setDefaults(32, QFont::Normal);
|
||||||
m_headline->small()->setDefaults(sans, 24, 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->setDefaultFamily(sans);
|
||||||
m_title->medium()->setDefaults(sans, 16, QFont::Medium);
|
m_title->large()->setDefaults(22, QFont::Medium);
|
||||||
m_title->small()->setDefaults(sans, 14, 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->setDefaultFamily(sans);
|
||||||
m_body->medium()->setDefaults(sans, 14, QFont::Normal);
|
m_body->large()->setDefaults(16, QFont::Normal);
|
||||||
m_body->small()->setDefaults(sans, 12, 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->setDefaultFamily(sans);
|
||||||
m_label->medium()->setDefaults(sans, 12, QFont::Medium);
|
m_label->large()->setDefaults(14, QFont::Medium);
|
||||||
m_label->small()->setDefaults(sans, 11, 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->setDefaultFamily(mono);
|
||||||
m_mono->medium()->setDefaults(mono, 14, QFont::Normal);
|
m_mono->large()->setDefaults(16, QFont::Normal);
|
||||||
m_mono->small()->setDefaults(mono, 12, 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->setDefaultFamily(icons);
|
||||||
m_icon->large()->setDefaults(icons, static_cast<int>(32 / 1.33), QFont::Normal);
|
m_icon->extraLarge()->setDefaults(static_cast<int>(48 / 1.33), QFont::Normal);
|
||||||
m_icon->medium()->setDefaults(icons, static_cast<int>(24 / 1.33), QFont::Normal);
|
m_icon->large()->setDefaults(static_cast<int>(32 / 1.33), QFont::Normal);
|
||||||
m_icon->small()->setDefaults(icons, static_cast<int>(20 / 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;
|
return m_small;
|
||||||
}
|
}
|
||||||
|
|
||||||
QFont FontStyleBase::buildFont(const FontConfig* cfg) {
|
QFont FontStyleBase::buildFont(const FontConfig* cfg, const QString& fallbackFamily) {
|
||||||
QFont font;
|
QFont font;
|
||||||
font.setFamily(cfg->family());
|
font.setFamily(cfg->family().isEmpty() ? fallbackFamily : cfg->family());
|
||||||
font.setPointSize(cfg->size());
|
font.setPointSize(cfg->size());
|
||||||
font.setWeight(QFont::Weight(cfg->weight()));
|
font.setWeight(QFont::Weight(cfg->weight()));
|
||||||
font.setItalic(cfg->italic());
|
font.setItalic(cfg->italic());
|
||||||
|
|
@ -38,6 +38,7 @@ void FontStyleBase::bind(FontStyleConfig* cfg) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_cfg) {
|
if (m_cfg) {
|
||||||
|
disconnect(m_cfg, nullptr, this, nullptr);
|
||||||
disconnect(m_cfg->large(), nullptr, this, nullptr);
|
disconnect(m_cfg->large(), nullptr, this, nullptr);
|
||||||
disconnect(m_cfg->medium(), nullptr, this, nullptr);
|
disconnect(m_cfg->medium(), nullptr, this, nullptr);
|
||||||
disconnect(m_cfg->small(), nullptr, this, nullptr);
|
disconnect(m_cfg->small(), nullptr, this, nullptr);
|
||||||
|
|
@ -46,6 +47,7 @@ void FontStyleBase::bind(FontStyleConfig* cfg) {
|
||||||
m_cfg = cfg;
|
m_cfg = cfg;
|
||||||
|
|
||||||
if (cfg) {
|
if (cfg) {
|
||||||
|
connect(cfg, &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild);
|
||||||
connect(cfg->large(), &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild);
|
connect(cfg->large(), &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild);
|
||||||
connect(cfg->medium(), &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild);
|
connect(cfg->medium(), &ConfigObject::propertiesChanged, this, &FontStyleBase::rebuild);
|
||||||
connect(cfg->small(), &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() {
|
void FontStyleBase::rebuild() {
|
||||||
if (m_cfg) {
|
if (m_cfg) {
|
||||||
m_large = buildFont(m_cfg->large());
|
const auto family = m_cfg->family();
|
||||||
m_medium = buildFont(m_cfg->medium());
|
m_large = buildFont(m_cfg->large(), family);
|
||||||
m_small = buildFont(m_cfg->small());
|
m_medium = buildFont(m_cfg->medium(), family);
|
||||||
|
m_small = buildFont(m_cfg->small(), family);
|
||||||
} else {
|
} else {
|
||||||
m_large = QFont();
|
m_large = QFont();
|
||||||
m_medium = QFont();
|
m_medium = QFont();
|
||||||
|
|
@ -113,10 +116,11 @@ IconFontBuilders* IconFontStyle::builders() const {
|
||||||
|
|
||||||
void IconFontStyle::rebuild() {
|
void IconFontStyle::rebuild() {
|
||||||
if (auto* cfg = qobject_cast<IconFontStyleConfig*>(m_cfg)) {
|
if (auto* cfg = qobject_cast<IconFontStyleConfig*>(m_cfg)) {
|
||||||
m_large = buildFont(cfg->large());
|
const auto family = cfg->family();
|
||||||
m_medium = buildFont(cfg->medium());
|
m_large = buildFont(cfg->large(), family);
|
||||||
m_small = buildFont(cfg->small());
|
m_medium = buildFont(cfg->medium(), family);
|
||||||
m_extraLarge = buildFont(cfg->extraLarge());
|
m_small = buildFont(cfg->small(), family);
|
||||||
|
m_extraLarge = buildFont(cfg->extraLarge(), family);
|
||||||
} else {
|
} else {
|
||||||
m_large = QFont();
|
m_large = QFont();
|
||||||
m_medium = QFont();
|
m_medium = QFont();
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ signals:
|
||||||
protected:
|
protected:
|
||||||
virtual void rebuild();
|
virtual void rebuild();
|
||||||
|
|
||||||
static QFont buildFont(const FontConfig* cfg);
|
static QFont buildFont(const FontConfig* cfg, const QString& fallbackFamily);
|
||||||
|
|
||||||
FontStyleConfig* m_cfg = nullptr;
|
FontStyleConfig* m_cfg = nullptr;
|
||||||
QFont m_large;
|
QFont m_large;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue