aboutsummaryrefslogtreecommitdiffstats
path: root/src/labs/stylekit/qqstylekitfont_p.h
diff options
context:
space:
mode:
authorDoris Verria <doris.verria@qt.io>2025-11-27 17:53:53 +0100
committerDoris Verria <doris.verria@qt.io>2025-12-01 13:03:28 +0100
commitcaeaa6bdd10d1d5b2bcd3b59f629583905197267 (patch)
treea06bea62a507686de54f428168b858f1509bdb77 /src/labs/stylekit/qqstylekitfont_p.h
parent49f14263cd587282f77b0fac761de74483e52485 (diff)
StyleKit: Add style and theme fontsHEADdev
Add a fonts property to the style that allows you to set fonts per control, similarily to what we do in QQuickTheme. The fonts are propagated from the style to the theme, and from the fallback style to the style. That means that if a font is not set for a theme or style, it will be resolved against its fallback font. Since both the QQStyleKitTheme and QQStyleKitStyle should have a fonts property, introduce a common base class: QQStyleKitThemeProperties that contains the fonts property. Later, the palettes can be moved there as well. Also add a font property to the QQStyleKitReader that is suposed to return the font for the current control being read. Change-Id: I116c1ab9bc426570756476ee409513587c475a0d Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/labs/stylekit/qqstylekitfont_p.h')
-rw-r--r--src/labs/stylekit/qqstylekitfont_p.h49
1 files changed, 26 insertions, 23 deletions
diff --git a/src/labs/stylekit/qqstylekitfont_p.h b/src/labs/stylekit/qqstylekitfont_p.h
index eeadcdc0f4..41854222d8 100644
--- a/src/labs/stylekit/qqstylekitfont_p.h
+++ b/src/labs/stylekit/qqstylekitfont_p.h
@@ -17,6 +17,7 @@
//
#include <QtQml/QtQml>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
#include <QtGui/qfont.h>
QT_BEGIN_NAMESPACE
@@ -26,7 +27,7 @@ class QQStyleKitFont : public QObject
Q_OBJECT
Q_PROPERTY(QFont systemFont READ systemFont WRITE setSystemFont NOTIFY systemFontChanged FINAL)
Q_PROPERTY(QFont buttonFont READ buttonFont WRITE setButtonFont NOTIFY buttonFontChanged FINAL)
- Q_PROPERTY(QFont checkboxFont READ checkboxFont WRITE setCheckboxFont NOTIFY checkboxFontChanged FINAL)
+ Q_PROPERTY(QFont checkBoxFont READ checkBoxFont WRITE setCheckBoxFont NOTIFY checkBoxFontChanged FINAL)
Q_PROPERTY(QFont comboBoxFont READ comboBoxFont WRITE setComboBoxFont NOTIFY comboBoxFontChanged FINAL)
Q_PROPERTY(QFont groupBoxFont READ groupBoxFont WRITE setGroupBoxFont NOTIFY groupBoxFontChanged FINAL)
Q_PROPERTY(QFont itemViewFont READ itemViewFont WRITE setItemViewFont NOTIFY itemViewFontChanged FINAL)
@@ -54,8 +55,8 @@ public:
QFont buttonFont() const;
void setButtonFont(const QFont &font);
- QFont checkboxFont() const;
- void setCheckboxFont(const QFont &font);
+ QFont checkBoxFont() const;
+ void setCheckBoxFont(const QFont &font);
QFont comboBoxFont() const;
void setComboBoxFont(const QFont &font);
@@ -105,10 +106,15 @@ public:
QFont tumblerFont() const;
void setTumblerFont(const QFont &font);
+ QQStyleKitFont *fallbackFont() const;
+ void setFallbackFont(QQStyleKitFont *fallback);
+
+ QFont fontForScope(QQuickTheme::Scope scope) const;
+
signals:
void systemFontChanged();
void buttonFontChanged();
- void checkboxFontChanged();
+ void checkBoxFontChanged();
void comboBoxFontChanged();
void groupBoxFontChanged();
void itemViewFontChanged();
@@ -125,29 +131,26 @@ signals:
void toolBarFontChanged();
void toolTipFontChanged();
void tumblerFontChanged();
+ void fallbackFontChanged();
private:
Q_DISABLE_COPY(QQStyleKitFont)
- mutable std::unique_ptr<QFont> m_systemFont;
- mutable std::unique_ptr<QFont> m_buttonFont;
- mutable std::unique_ptr<QFont> m_checkboxFont;
- mutable std::unique_ptr<QFont> m_comboBoxFont;
- mutable std::unique_ptr<QFont> m_groupBoxFont;
- mutable std::unique_ptr<QFont> m_itemViewFont;
- mutable std::unique_ptr<QFont> m_labelFont;
- mutable std::unique_ptr<QFont> m_listViewFont;
- mutable std::unique_ptr<QFont> m_menuFont;
- mutable std::unique_ptr<QFont> m_menuBarFont;
- mutable std::unique_ptr<QFont> m_radioButtonFont;
- mutable std::unique_ptr<QFont> m_spinBoxFont;
- mutable std::unique_ptr<QFont> m_switchControlFont;
- mutable std::unique_ptr<QFont> m_tabBarFont;
- mutable std::unique_ptr<QFont> m_textAreaFont;
- mutable std::unique_ptr<QFont> m_textFieldFont;
- mutable std::unique_ptr<QFont> m_toolBarFont;
- mutable std::unique_ptr<QFont> m_toolTipFont;
- mutable std::unique_ptr<QFont> m_tumblerFont;
+ void ensureEffectiveUpToDate() const;
+ void markEffectiveDirty() { m_effectiveDirty = true; }
+
+ void setFontForScope(QQuickTheme::Scope scope, const QFont &font, void (QQStyleKitFont::*signal)());
+
+ bool isSet(QQuickTheme::Scope scope) const { return (m_setMask & (1u << int(scope))) != 0; }
+ void markSet(QQuickTheme::Scope scope) { m_setMask |= (1u << int(scope)); }
+
+ static const int NScopes = QQuickTheme::Tumbler + 1;
+ QFont m_local[NScopes];
+ mutable QFont m_effective[NScopes];
+ quint32 m_setMask = 0;
+ mutable bool m_effectiveDirty = true;
+
+ QQStyleKitFont *m_fallback = nullptr;
};
QT_END_NAMESPACE