About
Contact
QtCreator
KDevelop
Solarized
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
4
#include
"qquicktheme_p.h"
5
#include
"qquicktheme_p_p.h"
6
7
#include <QtGui/qpa/qplatformtheme.h>
8
#include <QtGui/private/qguiapplication_p.h>
9
10
QT_BEGIN_NAMESPACE
11
12
std::
unique_ptr
<
QQuickTheme
>
QQuickThemePrivate
::
instance
;
13
14
static
void
cleanup_instance
()
15
{
16
QQuickThemePrivate
::
instance
.
reset
();
17
}
18
19
static
void
install_instance_cleanuper
()
20
{
21
qAddPostRoutine
(
cleanup_instance
);
22
}
23
24
Q_COREAPP_STARTUP_FUNCTION
(
install_instance_cleanuper
)
25
26
static
QPlatformTheme
::
Font
platformFont
(
QQuickTheme
::
Scope
scope
)
27
{
28
switch
(
scope
) {
29
case
QQuickTheme
::
Button
:
return
QPlatformTheme
::
PushButtonFont
;
30
case
QQuickTheme
::
CheckBox
:
return
QPlatformTheme
::
CheckBoxFont
;
31
case
QQuickTheme
::
ComboBox
:
return
QPlatformTheme
::
ComboMenuItemFont
;
32
case
QQuickTheme
::
GroupBox
:
return
QPlatformTheme
::
GroupBoxTitleFont
;
33
case
QQuickTheme
::
ItemView
:
return
QPlatformTheme
::
ItemViewFont
;
34
case
QQuickTheme
::
Label
:
return
QPlatformTheme
::
LabelFont
;
35
case
QQuickTheme
::
ListView
:
return
QPlatformTheme
::
ListViewFont
;
36
case
QQuickTheme
::
Menu
:
return
QPlatformTheme
::
MenuFont
;
37
case
QQuickTheme
::
MenuBar
:
return
QPlatformTheme
::
MenuBarFont
;
38
case
QQuickTheme
::
RadioButton
:
return
QPlatformTheme
::
RadioButtonFont
;
39
case
QQuickTheme
::
SpinBox
:
return
QPlatformTheme
::
EditorFont
;
40
case
QQuickTheme
::
Switch
:
return
QPlatformTheme
::
CheckBoxFont
;
41
case
QQuickTheme
::
TabBar
:
return
QPlatformTheme
::
TabButtonFont
;
42
case
QQuickTheme
::
TextArea
:
return
QPlatformTheme
::
EditorFont
;
43
case
QQuickTheme
::
TextField
:
return
QPlatformTheme
::
EditorFont
;
44
case
QQuickTheme
::
ToolBar
:
return
QPlatformTheme
::
ToolButtonFont
;
45
case
QQuickTheme
::
ToolTip
:
return
QPlatformTheme
::
TipLabelFont
;
46
case
QQuickTheme
::
Tumbler
:
return
QPlatformTheme
::
ItemViewFont
;
47
default
:
return
QPlatformTheme
::
SystemFont
;
48
}
49
}
50
51
static
QPlatformTheme
::
Palette
platformPalette
(
QQuickTheme
::
Scope
scope
)
52
{
53
switch
(
scope
) {
54
case
QQuickTheme
::
Button
:
return
QPlatformTheme
::
ButtonPalette
;
55
case
QQuickTheme
::
CheckBox
:
return
QPlatformTheme
::
CheckBoxPalette
;
56
case
QQuickTheme
::
ComboBox
:
return
QPlatformTheme
::
ComboBoxPalette
;
57
case
QQuickTheme
::
GroupBox
:
return
QPlatformTheme
::
GroupBoxPalette
;
58
case
QQuickTheme
::
ItemView
:
return
QPlatformTheme
::
ItemViewPalette
;
59
case
QQuickTheme
::
Label
:
return
QPlatformTheme
::
LabelPalette
;
60
case
QQuickTheme
::
ListView
:
return
QPlatformTheme
::
ItemViewPalette
;
61
case
QQuickTheme
::
Menu
:
return
QPlatformTheme
::
MenuPalette
;
62
case
QQuickTheme
::
MenuBar
:
return
QPlatformTheme
::
MenuBarPalette
;
63
case
QQuickTheme
::
RadioButton
:
return
QPlatformTheme
::
RadioButtonPalette
;
64
case
QQuickTheme
::
SpinBox
:
return
QPlatformTheme
::
TextLineEditPalette
;
65
case
QQuickTheme
::
Switch
:
return
QPlatformTheme
::
CheckBoxPalette
;
66
case
QQuickTheme
::
TabBar
:
return
QPlatformTheme
::
TabBarPalette
;
67
case
QQuickTheme
::
TextArea
:
return
QPlatformTheme
::
TextEditPalette
;
68
case
QQuickTheme
::
TextField
:
return
QPlatformTheme
::
TextLineEditPalette
;
69
case
QQuickTheme
::
ToolBar
:
return
QPlatformTheme
::
ToolButtonPalette
;
70
case
QQuickTheme
::
ToolTip
:
return
QPlatformTheme
::
ToolTipPalette
;
71
case
QQuickTheme
::
Tumbler
:
return
QPlatformTheme
::
ItemViewPalette
;
72
default
:
return
QPlatformTheme
::
SystemPalette
;
73
}
74
}
75
76
QQuickTheme
::
QQuickTheme
()
77
:
d_ptr
(
new
QQuickThemePrivate
)
78
{
79
}
80
81
QQuickTheme
::
~QQuickTheme
()
82
{
83
}
84
85
QQuickTheme
*
QQuickTheme
::
instance
()
86
{
87
return
QQuickThemePrivate
::
instance
.
get
();
88
}
89
90
QFont
QQuickTheme
::
font
(
Scope
scope
)
91
{
92
const
QFont
*
font
=
nullptr
;
93
if
(
QQuickTheme
*
theme
=
instance
())
94
font
=
QQuickThemePrivate
::
get
(
theme
)->
fonts
[
scope
].
data
();
95
else
if
(
QPlatformTheme
*
theme
=
QGuiApplicationPrivate
::
platformTheme
())
96
font
=
theme
->
font
(
type:
platformFont
(
scope
));
97
98
if
(
font
) {
99
QFont
f
=
*
font
;
100
if
(
scope
==
System
)
101
f
.
setResolveMask
(
0
);
102
return
f
;
103
}
104
105
if
(
scope
!=
System
)
106
return
QQuickTheme
::
font
(
scope:
System
);
107
108
return
QFont
(
);
109
}
110
111
QPalette
QQuickTheme
::
palette
(
Scope
scope
)
112
{
113
const
QPalette
*
palette
=
nullptr
;
114
115
if
(
auto
theme
=
instance
()) {
116
if
(
theme
->
usePlatformPalette
()) {
117
if
(
auto
platformTheme
=
QGuiApplicationPrivate
::
platformTheme
()) {
118
palette
=
platformTheme
->
palette
(
type:
platformPalette
(
scope
));
119
// In case, if palettes are provided through configuration file
120
// (qtquickcontrols2.conf), then respect configuration palette
121
// and resolve it with platform palette
122
if
(
palette
) {
123
QQuickThemePrivate
*
p
=
QQuickThemePrivate
::
get
(
theme
);
124
if
(
p
->
defaultPalette
&&
p
->
defaultPalette
->
resolveMask
() !=
0
) {
125
QPalette
defPalette
=
*
p
->
defaultPalette
;
126
defPalette
.
resolve
(
other:
*
palette
);
127
if
(
scope
==
System
)
128
defPalette
.
setResolveMask
(
0
);
129
return
defPalette
;
130
}
131
}
132
}
133
}
else
{
134
palette
=
QQuickThemePrivate
::
get
(
theme
)->
palettes
[
scope
].
data
();
135
}
136
}
137
138
if
(
palette
) {
139
QPalette
f
=
*
palette
;
140
if
(
scope
==
System
)
141
f
.
setResolveMask
(
0
);
142
return
f
;
143
}
144
145
if
(
scope
!=
System
)
146
return
QQuickTheme
::
palette
(
scope:
System
);
147
148
return
QPalette
(
);
149
}
150
151
void
QQuickTheme
::
setFont
(
Scope
scope
,
const
QFont
&
font
)
152
{
153
Q_D
(QQuickTheme);
154
d
->
fonts
[
scope
]
=
QSharedPointer
<
QFont
>::
create
(
arguments:
d
->
defaultFont
?
d
->
defaultFont
->
resolve
(
font
) :
font
);
155
}
156
157
void
QQuickTheme
::
setPalette
(
Scope
scope
,
const
QPalette
&
palette
)
158
{
159
Q_D
(QQuickTheme);
160
d
->
palettes
[
scope
]
=
QSharedPointer
<
QPalette
>::
create
(
arguments:
d
->
defaultPalette
?
d
->
defaultPalette
->
resolve
(
other:
palette
) :
palette
);
161
}
162
163
QT_END_NAMESPACE
164