Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qwasmtheme.cpp
Go to the documentation of this file.
1
// Copyright (C) 2018 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
#
include
"qwasmtheme.h"
6
#
include
"qwasmfiledialoghelper.h"
7
#
include
"qwasmplatform.h"
8
#
include
<
QtCore
/
qvariant
.
h
>
9
#
include
<
QFontDatabase
>
10
#
include
<
QList
>
11
#
include
<
qloggingcategory
.
h
>
12
#
include
<
qpa
/
qwindowsysteminterface
.
h
>
13
#
include
<
qpalette
.
h
>
14
15
#
include
<
emscripten
.
h
>
16
#
include
<
emscripten
/
bind
.
h
>
17
#
include
<
emscripten
/
val
.
h
>
18
19
Q_GUI_EXPORT
QPalette qt_fusionPalette();
20
21
QT_BEGIN_NAMESPACE
22
23
Q_STATIC_LOGGING_CATEGORY
(lcQpaThemeWasm,
"qt.qpa.theme.wasm"
)
24
25
namespace
{
26
bool
matchMedia
(
std
::string mediaQueryString)
27
{
28
return
emscripten::val::global(
"window"
)
29
.call<emscripten::val>(
"matchMedia"
, mediaQueryString)[
"matches"
]
30
.as<
bool
>();
31
}
32
33
Qt
::
ColorScheme
getColorSchemeFromMedia
()
34
{
35
if
(matchMedia(
colorSchemePreferenceDark
)) {
36
return
Qt::ColorScheme::Dark;
37
}
else
{
38
return
Qt::ColorScheme::Light;
39
}
40
}
41
42
Qt
::
ContrastPreference
getContrastPreferenceFromMedia
()
43
{
44
if
(matchMedia(
contrastPreferenceMore
)) {
45
return
Qt::ContrastPreference::HighContrast;
46
}
else
{
47
return
Qt::ContrastPreference::NoPreference;
48
}
49
}
50
51
Qt
::
MotionPreference
getMotionPreferenceFromMedia
()
52
{
53
if
(matchMedia(reducedMotionPreferenceReduce))
54
return
Qt::MotionPreference::ReducedMotion;
55
return
Qt::MotionPreference::NoPreference;
56
}
57
}
// namespace
58
59
using
namespace
Qt::StringLiterals;
60
61
QWasmTheme
::
QWasmTheme
()
62
{
63
m_colorScheme = getColorSchemeFromMedia();
64
qCDebug
(lcQpaThemeWasm) <<
"Initializing Wasm theme. Color scheme: "
<< m_colorScheme;
65
m_contrastPreference = getContrastPreferenceFromMedia();
66
qCDebug
(lcQpaThemeWasm) <<
"Initializing Wasm theme. Contrast preference: "
<< m_contrastPreference;
67
m_motionPreference = getMotionPreferenceFromMedia();
68
qCDebug
(lcQpaThemeWasm) <<
"Initializing Wasm theme. Motion preference: "
<< m_motionPreference;
69
70
for
(
auto
family : QFontDatabase::families())
71
if
(QFontDatabase::isFixedPitch(family))
72
fixedFont =
new
QFont(family);
73
74
m_palette = std::make_unique<QPalette>();
75
m_paletteIsDirty =
true
;
// Force update later
76
77
registerCallbacks(
78
{ colorSchemePreferenceDark },
79
[
this
](emscripten::val) { QWasmTheme::onColorSchemeChange(); },
80
m_colorSchemeChangeCallback);
81
registerCallbacks(
82
{ contrastPreferenceNoPreference, contrastPreferenceMore, contrastPreferenceLess,
83
contrastPreferenceCustom },
84
[
this
](emscripten::val) { QWasmTheme::onContrastPreferenceChange(); },
85
m_contrastPreferenceChangeCallbacks);
86
registerCallbacks(
87
{ reducedMotionPreferenceReduce },
88
[
this
](emscripten::val) { QWasmTheme::onMotionPreferenceChange(); },
89
m_motionPreferenceChangeCallback);
90
}
91
92
QWasmTheme
::~
QWasmTheme
()
93
{
94
if
(fixedFont)
95
delete
fixedFont;
96
}
97
98
const
QPalette
*
QWasmTheme
::
palette
(Palette type)
const
99
{
100
if
(type == SystemPalette) {
101
if
(m_paletteIsDirty) {
102
m_paletteIsDirty =
false
;
103
*m_palette = qt_fusionPalette();
104
}
105
return
m_palette.get();
106
}
107
return
nullptr
;
108
}
109
110
Qt
::
ColorScheme
QWasmTheme
::
colorScheme
()
const
111
{
112
return
m_colorScheme;
113
}
114
115
void
QWasmTheme
::
requestColorScheme
(Qt::ColorScheme scheme)
116
{
117
if
(m_colorScheme != scheme) {
118
m_paletteIsDirty =
true
;
119
m_colorScheme = scheme;
120
QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
121
}
122
}
123
124
Qt
::
ContrastPreference
QWasmTheme
::
contrastPreference
()
const
125
{
126
return
m_contrastPreference;
127
}
128
129
Qt
::
MotionPreference
QWasmTheme
::
motionPreference
()
const
130
{
131
return
m_motionPreference;
132
}
133
134
QVariant
QWasmTheme
::
themeHint
(ThemeHint hint)
const
135
{
136
if
(hint == QPlatformTheme::StyleNames)
137
return
QVariant(QStringList() <<
"Fusion"_L1
);
138
if
(hint == QPlatformTheme::UiEffects)
139
return
QVariant(
int
(HoverEffect));
140
if
(hint == QPlatformTheme::MnemonicsEnabled)
141
return
platform
(
)
!= Platform::MacOS;
142
return
QPlatformTheme::themeHint(hint);
143
}
144
145
const
QFont
*
QWasmTheme
::
font
(Font type)
const
146
{
147
if
(type == QPlatformTheme::FixedFont) {
148
return
fixedFont;
149
}
150
return
nullptr
;
151
}
152
153
bool
QWasmTheme
::
usePlatformNativeDialog
(DialogType type)
const
154
{
155
return
(type == DialogType::FileDialog);
156
}
157
158
QPlatformDialogHelper
*
QWasmTheme
::
createPlatformDialogHelper
(DialogType type)
const
159
{
160
if
(type == DialogType::FileDialog)
161
return
new
QWasmFileDialogHelper();
162
return
nullptr
;
163
}
164
165
void
QWasmTheme
::
onColorSchemeChange
()
166
{
167
auto
colorScheme = getColorSchemeFromMedia();
168
if
(m_colorScheme != colorScheme) {
169
qCDebug
(lcQpaThemeWasm) <<
"Color scheme changed to "
<< colorScheme;
170
m_colorScheme = colorScheme;
171
m_paletteIsDirty =
true
;
172
QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
173
}
174
}
175
176
void
QWasmTheme
::
onContrastPreferenceChange
()
177
{
178
auto
contrastPreference = getContrastPreferenceFromMedia();
179
if
(m_contrastPreference != contrastPreference) {
180
qCDebug
(lcQpaThemeWasm) <<
"Contrast preference changed to "
<< contrastPreference;
181
m_contrastPreference = contrastPreference;
182
m_paletteIsDirty =
true
;
183
QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
184
}
185
}
186
187
void
QWasmTheme
::
onMotionPreferenceChange
()
188
{
189
auto
motionPreference = getMotionPreferenceFromMedia();
190
if
(m_motionPreference != motionPreference) {
191
qCDebug
(lcQpaThemeWasm) <<
"Motion preference changed to "
<< motionPreference;
192
m_motionPreference = motionPreference;
193
QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
194
}
195
}
196
197
QT_END_NAMESPACE
QWasmTheme
Definition
qwasmtheme.h:53
QWasmTheme::onContrastPreferenceChange
void onContrastPreferenceChange()
Definition
qwasmtheme.cpp:176
QWasmTheme::createPlatformDialogHelper
QPlatformDialogHelper * createPlatformDialogHelper(DialogType type) const override
Definition
qwasmtheme.cpp:158
QWasmTheme::contrastPreference
Qt::ContrastPreference contrastPreference() const override
Definition
qwasmtheme.cpp:124
QWasmTheme::onMotionPreferenceChange
void onMotionPreferenceChange()
Definition
qwasmtheme.cpp:187
QWasmTheme::usePlatformNativeDialog
bool usePlatformNativeDialog(DialogType type) const override
Definition
qwasmtheme.cpp:153
QWasmTheme::palette
const QPalette * palette(Palette type=SystemPalette) const override
Return a color palette for type type.
Definition
qwasmtheme.cpp:98
QWasmTheme::colorScheme
Qt::ColorScheme colorScheme() const override
Definition
qwasmtheme.cpp:110
QWasmTheme::requestColorScheme
void requestColorScheme(Qt::ColorScheme scheme) override
Definition
qwasmtheme.cpp:115
QWasmTheme::QWasmTheme
QWasmTheme()
Definition
qwasmtheme.cpp:61
QWasmTheme::onColorSchemeChange
void onColorSchemeChange()
Definition
qwasmtheme.cpp:165
QWasmTheme::themeHint
QVariant themeHint(ThemeHint hint) const override
Definition
qwasmtheme.cpp:134
QWasmTheme::~QWasmTheme
~QWasmTheme()
Definition
qwasmtheme.cpp:92
QWasmTheme::motionPreference
Qt::MotionPreference motionPreference() const override
Definition
qwasmtheme.cpp:129
QWasmTheme::font
const QFont * font(Font type) const override
Definition
qwasmtheme.cpp:145
QT_BEGIN_NAMESPACE::getContrastPreferenceFromMedia
Qt::ContrastPreference getContrastPreferenceFromMedia()
Definition
qwasmtheme.cpp:42
QT_BEGIN_NAMESPACE::getColorSchemeFromMedia
Qt::ColorScheme getColorSchemeFromMedia()
Definition
qwasmtheme.cpp:33
QT_BEGIN_NAMESPACE::getMotionPreferenceFromMedia
Qt::MotionPreference getMotionPreferenceFromMedia()
Definition
qwasmtheme.cpp:51
QT_BEGIN_NAMESPACE::matchMedia
bool matchMedia(std::string mediaQueryString)
Definition
qwasmtheme.cpp:26
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qCDebug
#define qCDebug(category,...)
Definition
qloggingcategory.h:162
Q_STATIC_LOGGING_CATEGORY
#define Q_STATIC_LOGGING_CATEGORY(name,...)
Definition
qloggingcategory.h:154
operator<<
QDebug Q_GUI_EXPORT & operator<<(QDebug &s, const QVectorPath &path)
Definition
qpaintengineex.cpp:100
platform
QT_BEGIN_NAMESPACE Platform platform()
Definition
qwasmplatform.cpp:9
contrastPreferenceMore
constexpr auto contrastPreferenceMore
Definition
qwasmtheme.h:28
colorSchemePreferenceDark
constexpr auto colorSchemePreferenceDark
Definition
qwasmtheme.h:26
qtbase
src
plugins
platforms
wasm
qwasmtheme.cpp
Generated on
for Qt by
1.18.0