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
input.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 <qarkui/input.h>
5
7
8namespace QArkUi {
9
10using JsDisplayId = QOhosDisplayInfo::JsDisplayId;
11
13{
14 switch (actionValue) {
15 case ::MOUSE_ACTION_CANCEL:
16 case ::MOUSE_ACTION_MOVE:
17 case ::MOUSE_ACTION_BUTTON_DOWN:
18 case ::MOUSE_ACTION_BUTTON_UP:
19 case ::MOUSE_ACTION_AXIS_BEGIN:
20 case ::MOUSE_ACTION_AXIS_UPDATE:
21 case ::MOUSE_ACTION_AXIS_END:
22 return makeQOhosOptional(static_cast<::Input_MouseEventAction>(actionValue));
23 }
25}
26
28{
29 switch (buttonValue) {
30 case ::MOUSE_BUTTON_NONE:
31 case ::MOUSE_BUTTON_LEFT:
32 case ::MOUSE_BUTTON_MIDDLE:
33 case ::MOUSE_BUTTON_RIGHT:
34 case ::MOUSE_BUTTON_FORWARD:
35 case ::MOUSE_BUTTON_BACK:
36 return makeQOhosOptional(static_cast<::Input_MouseEventButton>(buttonValue));
37 }
39}
40
42{
43 switch (actionValue) {
44 case ::TOUCH_ACTION_CANCEL:
45 case ::TOUCH_ACTION_DOWN:
46 case ::TOUCH_ACTION_MOVE:
47 case ::TOUCH_ACTION_UP:
48 return makeQOhosOptional(static_cast<::Input_TouchEventAction>(actionValue));
49 }
51}
52
54{
55 switch (actionValue) {
56 case ::KEY_ACTION_CANCEL:
57 case ::KEY_ACTION_DOWN:
58 case ::KEY_ACTION_UP:
59 return makeQOhosOptional(static_cast<::Input_KeyEventAction>(actionValue));
60 }
62}
63
64QOhosOptional<MouseEvent> MouseEvent::createFromNativeEvent(const ::Input_MouseEvent *event)
65{
66 auto jsWindowId = JsWindowId(::OH_Input_GetMouseEventWindowId(event));
67
68 auto actionValue = ::OH_Input_GetMouseEventAction(event);
69 auto optMappedAction = tryMapMouseEventAction(actionValue);
70 if (!optMappedAction.hasValue()) {
71 qOhosPrintfError(
72 "%s: Filter for jsWindowId: %f, received unrecognized mouse event action: %d, event will be ignored",
73 Q_FUNC_INFO, jsWindowId.value(), actionValue);
75 }
76
77 auto buttonValue = ::OH_Input_GetMouseEventButton(event);
78 auto optMappedButton = tryMapMouseEventButton(buttonValue);
79 if (!optMappedButton.hasValue()) {
80 qOhosPrintfError(
81 "%s: Filter for jsWindowId: %f, received unrecognized mouse event action: %d, event will be ignored",
82 Q_FUNC_INFO, jsWindowId.value(), actionValue);
84 }
85
86 MouseEvent mouseEvent = {
87 .jsWindowId = jsWindowId,
88 .jsDisplayId = QOhosDisplayInfo::JsDisplayId(::OH_Input_GetMouseEventDisplayId(event)),
89 .button = optMappedButton.value(),
90 .action = optMappedAction.value(),
91 .displayPosition = QPoint(
92 ::OH_Input_GetMouseEventDisplayX(event),
93 ::OH_Input_GetMouseEventDisplayY(event)),
94 .actionTime = std::chrono::microseconds(::OH_Input_GetMouseEventActionTime(event)),
95 };
96
97 return makeQOhosOptional(mouseEvent);
98}
99
100QOhosOptional<TouchEvent> TouchEvent::createFromNativeEvent(const ::Input_TouchEvent *event)
101{
102 auto jsWindowId = JsWindowId(::OH_Input_GetTouchEventWindowId(event));
103
104 auto actionValue = ::OH_Input_GetTouchEventAction(event);
105 auto optMappedAction = tryMapTouchEventAction(actionValue);
106 if (!optMappedAction.hasValue()) {
107 qOhosPrintfError(
108 "%s: Filter for jsWindowId: %f, received unrecognized touch event action: %d, event will be ignored",
109 Q_FUNC_INFO, jsWindowId.value(), actionValue);
111 }
112
113 TouchEvent keyEvent = {
114 .jsWindowId = jsWindowId,
115 .jsDisplayId = JsDisplayId(::OH_Input_GetTouchEventDisplayId(event)),
116 .displayPosition = QPoint(
117 ::OH_Input_GetTouchEventDisplayX(event),
118 ::OH_Input_GetTouchEventDisplayY(event)),
119 .action = optMappedAction.value(),
120 .fingerId = ::OH_Input_GetTouchEventFingerId(event),
121 .actionTime = std::chrono::microseconds(::OH_Input_GetTouchEventActionTime(event)),
122 };
123
124 return makeQOhosOptional(keyEvent);
125}
126
127QOhosOptional<KeyEvent> KeyEvent::createFromNativeEvent(const ::Input_KeyEvent *event)
128{
129 auto jsWindowId = JsWindowId(::OH_Input_GetKeyEventWindowId(event));
130
131 auto actionValue = ::OH_Input_GetKeyEventAction(event);
132 auto optMappedAction = tryMapKeyEventAction(actionValue);
133 if (!optMappedAction.hasValue()) {
134 qOhosPrintfError(
135 "%s: Filter for jsWindowId: %f, received unrecognized key event action: %d, event will be ignored",
136 Q_FUNC_INFO, jsWindowId.value(), actionValue);
138 }
139
140 KeyEvent keyEvent = {
141 .jsWindowId = jsWindowId,
142 .actionTime = std::chrono::microseconds(::OH_Input_GetKeyEventActionTime(event)),
143 .action = optMappedAction.value(),
144 .keyCode = ::OH_Input_GetKeyEventKeyCode(event),
145 };
146
147 return makeQOhosOptional(keyEvent);
148}
149
150QInputDevice::DeviceType getTouchDeviceType(const ::ArkUI_UIInputEvent *inputEvent)
151{
152 const auto sourceType = ::OH_ArkUI_UIInputEvent_GetSourceType(inputEvent);
153 if (sourceType == ::UI_INPUT_EVENT_SOURCE_TYPE_UNKNOWN)
154 qOhosWarning(QtForOhos) << "Obtained ArkUI unknown source type for input event";
155 return sourceType == ::UI_INPUT_EVENT_SOURCE_TYPE_TOUCH_SCREEN
156 ? QInputDevice::DeviceType::TouchScreen
157 : QInputDevice::DeviceType::TouchPad;
158}
159
160}
161
162QT_END_NAMESPACE
std::enable_if_t< qohosplugincore_h_detail::isQOhosOptional< QOhosInvokeResult< Func, T > >, QOhosInvokeResult< Func, T > > andThen(Func &&func) const
QOhosOptional<::Input_MouseEventButton > tryMapMouseEventButton(std::int32_t buttonValue)
Definition input.cpp:27
QOhosOptional<::Input_KeyEventAction > tryMapKeyEventAction(std::int32_t actionValue)
Definition input.cpp:53
QOhosOptional<::Input_TouchEventAction > tryMapTouchEventAction(std::int32_t actionValue)
Definition input.cpp:41
QOhosDisplayInfo::JsDisplayId JsDisplayId
Definition input.cpp:10
QInputDevice::DeviceType getTouchDeviceType(const ::ArkUI_UIInputEvent *inputEvent)
Definition input.cpp:150
QOhosOptional<::Input_MouseEventAction > tryMapMouseEventAction(std::int32_t actionValue)
Definition input.cpp:12
Combined button and popup list for selecting options.
QOhosOptional< void > makeEmptyQOhosOptional()