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
qohoskeymodifiers.cpp
Go to the documentation of this file.
1
// Copyright (C) 2025 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
<
QtCore
/
private
/
qohoscommon_p
.
h
>
5
#
include
<
array
>
6
#
include
<
cstdint
>
7
#
include
<
optional
>
8
#
include
<
qarkui
/
qarkuiutils
.
h
>
9
#
include
<
qohoskeymodifiers
.
h
>
10
11
QT_BEGIN_NAMESPACE
12
13
namespace
{
14
15
std
::optional<
std
::
uint64_t
>
tryGetUiInputEventModifierKeyStates
(::ArkUI_UIInputEvent *uiInputEvent)
16
{
17
std
::uint64_t keys;
18
QArkUi
::callArkUiOrFailOnErrorResult(
19
Q_OHOS_NAMED_FUNC(::OH_ArkUI_UIInputEvent_GetModifierKeyStates),
20
uiInputEvent, &keys);
21
return
keys;
22
}
23
24
QFlags
<
OhosKeyboardModifier
>
mapArkUiModifierKeyStatesToOhosKeyboardModifiers
(
std
::uint64_t modifierKeyStates)
25
{
26
static
const
std
::pair<
std
::uint64_t,
OhosKeyboardModifier
> arkUiToQtModifiersMap[] = {
27
{::ArkUI_ModifierKeyName::ARKUI_MODIFIER_KEY_CTRL, OhosKeyboardModifier::CTRL},
28
{::ArkUI_ModifierKeyName::ARKUI_MODIFIER_KEY_SHIFT, OhosKeyboardModifier::SHIFT},
29
{::ArkUI_ModifierKeyName::ARKUI_MODIFIER_KEY_ALT, OhosKeyboardModifier::ALT},
30
};
31
32
QFlags<OhosKeyboardModifier> modifiers;
33
for
(
const
auto
&arkUiToQtModifier : arkUiToQtModifiersMap)
34
modifiers.setFlag(arkUiToQtModifier.second, (modifierKeyStates & arkUiToQtModifier.first) != 0);
35
36
return
modifiers;
37
}
38
39
QFlags
<
OhosKeyboardModifier
>
readKeyStandardModifiersFromKeyState
()
40
{
41
constexpr
int
ohosKeyboardModifierCount = 3;
42
static
const
std
::array<
OhosKeyToModifier
, ohosKeyboardModifierCount> keysToStandardModifiers = {{
43
{
44
OhosKeyboardModifier::CTRL,
45
{::Input_KeyCode::KEYCODE_CTRL_LEFT, ::Input_KeyCode::KEYCODE_CTRL_RIGHT},
46
&::OH_Input_GetKeyPressed,
47
::Input_KeyStateAction::KEY_PRESSED
48
},
49
{
50
OhosKeyboardModifier::ALT,
51
{::Input_KeyCode::KEYCODE_ALT_LEFT, ::Input_KeyCode::KEYCODE_ALT_RIGHT},
52
&::OH_Input_GetKeyPressed,
53
::Input_KeyStateAction::KEY_PRESSED
54
},
55
{
56
OhosKeyboardModifier::SHIFT,
57
{::Input_KeyCode::KEYCODE_SHIFT_LEFT, ::Input_KeyCode::KEYCODE_SHIFT_RIGHT},
58
&::OH_Input_GetKeyPressed,
59
::Input_KeyStateAction::KEY_PRESSED
60
},
61
}};
62
63
return
readKeyModifiersFromKeyState(
64
QSpan(keysToStandardModifiers.data(), keysToStandardModifiers.size()));
65
}
66
67
QFlags
<
OhosKeyboardModifier
>
readKeyStandardModifiers
(::ArkUI_UIInputEvent *uiInputEvent)
68
{
69
const
auto
uiInputEventModifierKeyStats = tryGetUiInputEventModifierKeyStates(uiInputEvent);
70
return
uiInputEventModifierKeyStats.has_value()
71
? mapArkUiModifierKeyStatesToOhosKeyboardModifiers(uiInputEventModifierKeyStats.value())
72
: readKeyStandardModifiersFromKeyState();
73
}
74
75
QFlags
<
OhosKeyboardModifier
>
readKeyExtendedModifiers
()
76
{
77
constexpr
int
ohosKeyboardModifierCount = 3;
78
static
const
std
::array<
OhosKeyToModifier
, ohosKeyboardModifierCount> keysToExtendedModifiers = {{
79
{
80
OhosKeyboardModifier::LOGO,
81
{::Input_KeyCode::KEYCODE_META_LEFT, ::Input_KeyCode::KEYCODE_META_RIGHT},
82
&::OH_Input_GetKeyPressed,
83
::Input_KeyStateAction::KEY_PRESSED
84
},
85
{
86
OhosKeyboardModifier::CAPS_LOCK,
87
{::Input_KeyCode::KEYCODE_CAPS_LOCK},
88
&::OH_Input_GetKeySwitch,
89
::Input_KeyStateAction::KEY_SWITCH_ON
90
},
91
{
92
OhosKeyboardModifier::NUM_LOCK,
93
{::Input_KeyCode::KEYCODE_NUM_LOCK},
94
&::OH_Input_GetKeySwitch,
95
::Input_KeyStateAction::KEY_SWITCH_ON
96
},
97
}};
98
99
return
readKeyModifiersFromKeyState(
100
QSpan(keysToExtendedModifiers.data(), keysToExtendedModifiers.size()));
101
}
102
103
}
104
105
QFlags
<
OhosKeyboardModifier
>
readKeyModifiersFromKeyState
(QSpan<
const
OhosKeyToModifier> keysToModifiers)
106
{
107
auto
keyStatusDeleter = [](::Input_KeyState *ptr) { ::OH_Input_DestroyKeyState(&ptr); };
108
std::unique_ptr<::Input_KeyState,
decltype
(keyStatusDeleter)> keyState(::OH_Input_CreateKeyState(), keyStatusDeleter);
109
if
(keyState ==
nullptr
) {
110
qOhosReportFatalErrorAndAbort(
111
"Acquisition of Input_KeyState object failed. Cannot read modifiers keys state."
);
112
}
113
114
QFlags<OhosKeyboardModifier> keyModifiers = {};
115
for
(
const
auto
&entry : keysToModifiers) {
116
keyModifiers.setFlag(
117
entry.modifier,
118
std::any_of(
119
entry.keysToCheck.begin(), entry.keysToCheck.end(),
120
[&](::Input_KeyCode keyCode) {
121
::OH_Input_SetKeyCode(keyState.get(), keyCode);
122
if
(::OH_Input_GetKeyState(keyState.get()) != ::INPUT_SUCCESS) {
123
qOhosWarning(QtForOhos) <<
"Cannot get key state for key: "
<< keyCode;
124
return
false
;
125
}
126
return
entry.getKeyStateActionFunc(keyState.get()) == entry.keyStateActionKeyActive;
127
}));
128
}
129
130
return
keyModifiers;
131
}
132
133
QFlags
<
OhosKeyboardModifier
>
readKeyModifiersFromOhosUiInputEvent
(::ArkUI_UIInputEvent *uiInputEvent)
134
{
135
return
readKeyStandardModifiers(uiInputEvent) | readKeyExtendedModifiers();
136
}
137
138
Qt
::
KeyboardModifiers
convertOhosToQtKeyboardModifiers
(QFlags<OhosKeyboardModifier> ohosKeysModifiers)
139
{
140
Qt::KeyboardModifiers keyboardModifiers = Qt::NoModifier;
141
keyboardModifiers.setFlag(
142
Qt::ShiftModifier, ohosKeysModifiers.testFlag(
OhosKeyboardModifier
::
SHIFT
));
143
keyboardModifiers.setFlag(
144
Qt::AltModifier, ohosKeysModifiers.testFlag(
OhosKeyboardModifier
::
ALT
));
145
keyboardModifiers.setFlag(
146
Qt::ControlModifier, ohosKeysModifiers.testFlag(
OhosKeyboardModifier
::
CTRL
));
147
keyboardModifiers.setFlag(
148
Qt::MetaModifier, ohosKeysModifiers.testFlag(
OhosKeyboardModifier
::
LOGO
));
149
150
return
keyboardModifiers;
151
}
152
153
QT_END_NAMESPACE
QArkUi
Definition
displaymanager.cpp:17
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QT_BEGIN_NAMESPACE::tryGetUiInputEventModifierKeyStates
std::optional< std::uint64_t > tryGetUiInputEventModifierKeyStates(::ArkUI_UIInputEvent *uiInputEvent)
Definition
qohoskeymodifiers.cpp:15
QT_BEGIN_NAMESPACE::readKeyStandardModifiers
QFlags< OhosKeyboardModifier > readKeyStandardModifiers(::ArkUI_UIInputEvent *uiInputEvent)
Definition
qohoskeymodifiers.cpp:67
QT_BEGIN_NAMESPACE::mapArkUiModifierKeyStatesToOhosKeyboardModifiers
QFlags< OhosKeyboardModifier > mapArkUiModifierKeyStatesToOhosKeyboardModifiers(std::uint64_t modifierKeyStates)
Definition
qohoskeymodifiers.cpp:24
QT_BEGIN_NAMESPACE::readKeyStandardModifiersFromKeyState
QFlags< OhosKeyboardModifier > readKeyStandardModifiersFromKeyState()
Definition
qohoskeymodifiers.cpp:39
QT_BEGIN_NAMESPACE::readKeyExtendedModifiers
QFlags< OhosKeyboardModifier > readKeyExtendedModifiers()
Definition
qohoskeymodifiers.cpp:75
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
convertOhosToQtKeyboardModifiers
Qt::KeyboardModifiers convertOhosToQtKeyboardModifiers(QFlags< OhosKeyboardModifier > ohosKeysModifiers)
Definition
qohoskeymodifiers.cpp:138
readKeyModifiersFromKeyState
QFlags< OhosKeyboardModifier > readKeyModifiersFromKeyState(QSpan< const OhosKeyToModifier > keysToModifiers)
Definition
qohoskeymodifiers.cpp:105
readKeyModifiersFromOhosUiInputEvent
QFlags< OhosKeyboardModifier > readKeyModifiersFromOhosUiInputEvent(::ArkUI_UIInputEvent *uiInputEvent)
Definition
qohoskeymodifiers.cpp:133
OhosKeyboardModifier
OhosKeyboardModifier
Definition
qohoskeymodifiers.h:18
OhosKeyboardModifier::CTRL
@ CTRL
Definition
qohoskeymodifiers.h:19
OhosKeyboardModifier::SHIFT
@ SHIFT
Definition
qohoskeymodifiers.h:21
OhosKeyboardModifier::LOGO
@ LOGO
Definition
qohoskeymodifiers.h:22
OhosKeyboardModifier::ALT
@ ALT
Definition
qohoskeymodifiers.h:20
OhosKeyToModifier
Definition
qohoskeymodifiers.h:28
qtbase
src
plugins
platforms
ohos
qohoskeymodifiers.cpp
Generated on
for Qt by
1.18.0