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},
32 QFlags<OhosKeyboardModifier> modifiers;
33 for (
const auto &arkUiToQtModifier : arkUiToQtModifiersMap)
34 modifiers.setFlag(arkUiToQtModifier.second, (modifierKeyStates & arkUiToQtModifier.first) != 0);
41 constexpr int ohosKeyboardModifierCount = 3;
42 static const std::array<
OhosKeyToModifier, ohosKeyboardModifierCount> keysToStandardModifiers = {{
44 OhosKeyboardModifier::CTRL,
45 {::Input_KeyCode::KEYCODE_CTRL_LEFT, ::Input_KeyCode::KEYCODE_CTRL_RIGHT},
46 &::OH_Input_GetKeyPressed,
47 ::Input_KeyStateAction::KEY_PRESSED
50 OhosKeyboardModifier::ALT,
51 {::Input_KeyCode::KEYCODE_ALT_LEFT, ::Input_KeyCode::KEYCODE_ALT_RIGHT},
52 &::OH_Input_GetKeyPressed,
53 ::Input_KeyStateAction::KEY_PRESSED
56 OhosKeyboardModifier::SHIFT,
57 {::Input_KeyCode::KEYCODE_SHIFT_LEFT, ::Input_KeyCode::KEYCODE_SHIFT_RIGHT},
58 &::OH_Input_GetKeyPressed,
59 ::Input_KeyStateAction::KEY_PRESSED
63 return readKeyModifiersFromKeyState(
64 QSpan(keysToStandardModifiers.data(), keysToStandardModifiers.size()));
77 constexpr int ohosKeyboardModifierCount = 3;
78 static const std::array<
OhosKeyToModifier, ohosKeyboardModifierCount> keysToExtendedModifiers = {{
80 OhosKeyboardModifier::LOGO,
81 {::Input_KeyCode::KEYCODE_META_LEFT, ::Input_KeyCode::KEYCODE_META_RIGHT},
82 &::OH_Input_GetKeyPressed,
83 ::Input_KeyStateAction::KEY_PRESSED
86 OhosKeyboardModifier::CAPS_LOCK,
87 {::Input_KeyCode::KEYCODE_CAPS_LOCK},
88 &::OH_Input_GetKeySwitch,
89 ::Input_KeyStateAction::KEY_SWITCH_ON
92 OhosKeyboardModifier::NUM_LOCK,
93 {::Input_KeyCode::KEYCODE_NUM_LOCK},
94 &::OH_Input_GetKeySwitch,
95 ::Input_KeyStateAction::KEY_SWITCH_ON
99 return readKeyModifiersFromKeyState(
100 QSpan(keysToExtendedModifiers.data(), keysToExtendedModifiers.size()));
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.");
114 QFlags<OhosKeyboardModifier> keyModifiers = {};
115 for (
const auto &entry : keysToModifiers) {
116 keyModifiers.setFlag(
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;
126 return entry.getKeyStateActionFunc(keyState.get()) == entry.keyStateActionKeyActive;
140 Qt::KeyboardModifiers keyboardModifiers = Qt::NoModifier;
141 keyboardModifiers.setFlag(
143 keyboardModifiers.setFlag(
145 keyboardModifiers.setFlag(
147 keyboardModifiers.setFlag(
150 return keyboardModifiers;