Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickuniversaltheme.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
7
8#include <QtCore/qmutex.h>
9#include <QtGui/qfontdatabase.h>
10#include <QtQuickTemplates2/private/qquicktheme_p.h>
11
13
15{
16 static inline void addSystemStyle(QPointer<QQuickUniversalStyle> style);
17 static inline void removeSystemStyle(QPointer<QQuickUniversalStyle> style);
18 static inline void updateSystemStyles();
20 static inline QMutex mutex;
21};
22
23void QQuickUniversalThemePrivate::addSystemStyle(QPointer<QQuickUniversalStyle> style)
24{
25 QMutexLocker locker{&mutex};
26 auto it = std::find(systemStyles.begin(), systemStyles.end(), style);
27 if (it == systemStyles.end())
28 systemStyles.push_back(style);
29}
30void QQuickUniversalThemePrivate::removeSystemStyle(QPointer<QQuickUniversalStyle> style)
31{
32 QMutexLocker locker{&mutex};
33 auto it = std::find(systemStyles.begin(), systemStyles.end(), style);
34 if (it != systemStyles.end())
35 systemStyles.erase(it);
36}
38{
39 QMutexLocker locker{&mutex};
40 for (auto it = systemStyles.begin(); it != systemStyles.end(); ) {
41 if (it->isNull()) {
42 it = systemStyles.erase(it);
43 } else {
44 (*it)->setTheme(QQuickUniversalStyle::System);
45 ++it;
46 }
47 }
48}
49
50void QQuickUniversalTheme::initialize(QQuickTheme *theme)
51{
52 QFont systemFont;
53 QFont groupBoxTitleFont;
54 QFont tabButtonFont;
55
56 const QLatin1String segoeUiFamilyName("Segoe UI");
57 if (QFontDatabase::families().contains(segoeUiFamilyName)) {
58 const QFont font(segoeUiFamilyName);
59 const QStringList families{font.family()};
60 systemFont.setFamilies(families);
61 groupBoxTitleFont.setFamilies(families);
62 tabButtonFont.setFamilies(families);
63 }
64
65 systemFont.setPixelSize(15);
66 theme->setFont(QQuickTheme::System, systemFont);
67
68 groupBoxTitleFont.setPixelSize(15);
69 groupBoxTitleFont.setWeight(QFont::DemiBold);
70 theme->setFont(QQuickTheme::GroupBox, groupBoxTitleFont);
71
72 tabButtonFont.setPixelSize(24);
73 tabButtonFont.setWeight(QFont::Light);
74 theme->setFont(QQuickTheme::TabBar, tabButtonFont);
75}
76
77void QQuickUniversalTheme::registerSystemStyle(QQuickUniversalStyle *style)
78{
79 QQuickUniversalThemePrivate::addSystemStyle(QPointer{style});
80}
81
82void QQuickUniversalTheme::unregisterSystemStyle(QQuickUniversalStyle *style)
83{
84 QQuickUniversalThemePrivate::removeSystemStyle(QPointer{style});
85}
86
87void QQuickUniversalTheme::updateTheme()
88{
89 QQuickUniversalThemePrivate::updateSystemStyles();
90}
91
92QT_END_NAMESPACE
static std::vector< QPointer< QQuickUniversalStyle > > systemStyles
static void removeSystemStyle(QPointer< QQuickUniversalStyle > style)
static void addSystemStyle(QPointer< QQuickUniversalStyle > style)