aboutsummaryrefslogtreecommitdiffstats
path: root/src/labs/stylekit/qqstylekitfont_p.h
blob: 41854222d86cb9300acefd9713354bcacc225aa8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant reason:default

#ifndef QQSTYLEKITFONT_H
#define QQSTYLEKITFONT_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <QtQml/QtQml>
#include <QtQuickTemplates2/private/qquicktheme_p.h>
#include <QtGui/qfont.h>

QT_BEGIN_NAMESPACE

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 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)
    Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont NOTIFY labelFontChanged FINAL)
    Q_PROPERTY(QFont listViewFont READ listViewFont WRITE setListViewFont NOTIFY listViewFontChanged FINAL)
    Q_PROPERTY(QFont menuFont READ menuFont WRITE setMenuFont NOTIFY menuFontChanged FINAL)
    Q_PROPERTY(QFont menuBarFont READ menuBarFont WRITE setMenuBarFont NOTIFY menuBarFontChanged FINAL)
    Q_PROPERTY(QFont radioButtonFont READ radioButtonFont WRITE setRadioButtonFont NOTIFY radioButtonFontChanged FINAL)
    Q_PROPERTY(QFont spinBoxFont READ spinBoxFont WRITE setSpinBoxFont NOTIFY spinBoxFontChanged FINAL)
    Q_PROPERTY(QFont switchControlFont READ switchControlFont WRITE setSwitchControlFont NOTIFY switchControlFontChanged FINAL)
    Q_PROPERTY(QFont tabBarFont READ tabBarFont WRITE setTabBarFont NOTIFY tabBarFontChanged FINAL)
    Q_PROPERTY(QFont textAreaFont READ textAreaFont WRITE setTextAreaFont NOTIFY textAreaFontChanged FINAL)
    Q_PROPERTY(QFont textFieldFont READ textFieldFont WRITE setTextFieldFont NOTIFY textFieldFontChanged FINAL)
    Q_PROPERTY(QFont toolBarFont READ toolBarFont WRITE setToolBarFont NOTIFY toolBarFontChanged FINAL)
    Q_PROPERTY(QFont toolTipFont READ toolTipFont WRITE setToolTipFont NOTIFY toolTipFontChanged FINAL)
    Q_PROPERTY(QFont tumblerFont READ tumblerFont WRITE setTumblerFont NOTIFY tumblerFontChanged FINAL)

    QML_NAMED_ELEMENT(StyleKitFont)

public:
    QQStyleKitFont(QObject *parent = nullptr);
    QFont systemFont() const;
    void setSystemFont(const QFont &font);

    QFont buttonFont() const;
    void setButtonFont(const QFont &font);

    QFont checkBoxFont() const;
    void setCheckBoxFont(const QFont &font);

    QFont comboBoxFont() const;
    void setComboBoxFont(const QFont &font);

    QFont groupBoxFont() const;
    void setGroupBoxFont(const QFont &font);

    QFont itemViewFont() const;
    void setItemViewFont(const QFont &font);

    QFont labelFont() const;
    void setLabelFont(const QFont &font);

    QFont listViewFont() const;
    void setListViewFont(const QFont &font);

    QFont menuFont() const;
    void setMenuFont(const QFont &font);

    QFont menuBarFont() const;
    void setMenuBarFont(const QFont &font);

    QFont radioButtonFont() const;
    void setRadioButtonFont(const QFont &font);

    QFont spinBoxFont() const;
    void setSpinBoxFont(const QFont &font);

    QFont switchControlFont() const;
    void setSwitchControlFont(const QFont &font);

    QFont tabBarFont() const;
    void setTabBarFont(const QFont &font);

    QFont textAreaFont() const;
    void setTextAreaFont(const QFont &font);

    QFont textFieldFont() const;
    void setTextFieldFont(const QFont &font);

    QFont toolBarFont() const;
    void setToolBarFont(const QFont &font);

    QFont toolTipFont() const;
    void setToolTipFont(const QFont &font);

    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 comboBoxFontChanged();
    void groupBoxFontChanged();
    void itemViewFontChanged();
    void labelFontChanged();
    void listViewFontChanged();
    void menuFontChanged();
    void menuBarFontChanged();
    void radioButtonFontChanged();
    void spinBoxFontChanged();
    void switchControlFontChanged();
    void tabBarFontChanged();
    void textAreaFontChanged();
    void textFieldFontChanged();
    void toolBarFontChanged();
    void toolTipFontChanged();
    void tumblerFontChanged();
    void fallbackFontChanged();

private:
    Q_DISABLE_COPY(QQStyleKitFont)

    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

#endif // QQSTYLEKITFONT_H