1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "interfaces/native/event/ui_input_event_impl.h"
17 
18 #include "base/utils/type_definition.h"
19 #include "core/event/touch_event.h"
20 #include "core/event/axis_event.h"
21 #include "core/interfaces/arkoala/arkoala_api.h"
22 #include "interfaces/native/node/event_converter.h"
23 #include "base/error/error_code.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
isCurrentCTouchEventParamValid(const ArkUITouchEvent * touchEvent,uint32_t pointerIndex)28 bool isCurrentCTouchEventParamValid(const ArkUITouchEvent* touchEvent, uint32_t pointerIndex)
29 {
30     if (!touchEvent) {
31         return false;
32     }
33     if ((pointerIndex < 0 || pointerIndex >= touchEvent->touchPointSize) ||
34         !(touchEvent->touchPointes)) {
35         return false;
36     }
37     return true;
38 }
39 
isHistoryCTouchEventParamValid(const ArkUITouchEvent * touchEvent,uint32_t historyIndex,uint32_t pointerIndex)40 bool isHistoryCTouchEventParamValid(const ArkUITouchEvent* touchEvent, uint32_t historyIndex, uint32_t pointerIndex)
41 {
42     if (!touchEvent) {
43         return false;
44     }
45     if ((historyIndex < 0 || historyIndex >= touchEvent->historySize) ||
46         !touchEvent->historyEvents) {
47         return false;
48     }
49     if ((pointerIndex < 0 || pointerIndex >= touchEvent->historyEvents[historyIndex].touchPointSize) ||
50         !(touchEvent->historyEvents[historyIndex].touchPointes)) {
51         return false;
52     }
53     return true;
54 }
55 
OH_ArkUI_UIInputEvent_GetType(const ArkUI_UIInputEvent * event)56 int32_t OH_ArkUI_UIInputEvent_GetType(const ArkUI_UIInputEvent* event)
57 {
58     if (!event) {
59         return 0;
60     }
61     return event->inputType;
62 }
63 
OH_ArkUI_UIInputEvent_GetAction(const ArkUI_UIInputEvent * event)64 int32_t OH_ArkUI_UIInputEvent_GetAction(const ArkUI_UIInputEvent* event)
65 {
66     if (!event) {
67         return -1;
68     }
69     switch (event->eventTypeId) {
70         case C_TOUCH_EVENT_ID: {
71             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
72             if (!touchEvent) {
73                 return -1;
74             }
75             return OHOS::Ace::NodeModel::ConvertToCTouchActionType(touchEvent->action);
76         }
77         case C_MOUSE_EVENT_ID: {
78             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
79             if (!mouseEvent) {
80                 return -1;
81             }
82             return OHOS::Ace::NodeModel::ConvertToCMouseActionType(mouseEvent->action);
83         }
84         default:
85             break;
86     }
87     return -1;
88 }
89 
OH_ArkUI_UIInputEvent_GetSourceType(const ArkUI_UIInputEvent * event)90 int32_t OH_ArkUI_UIInputEvent_GetSourceType(const ArkUI_UIInputEvent* event)
91 {
92     if (!event) {
93         return static_cast<int32_t>(UI_INPUT_EVENT_SOURCE_TYPE_UNKNOWN);
94     }
95     switch (event->eventTypeId) {
96         case C_TOUCH_EVENT_ID: {
97             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
98             if (!touchEvent) {
99                 return static_cast<int32_t>(UI_INPUT_EVENT_SOURCE_TYPE_UNKNOWN);
100             }
101             return touchEvent->sourceType;
102         }
103         case C_MOUSE_EVENT_ID: {
104             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
105             if (!mouseEvent) {
106                 return static_cast<int32_t>(UI_INPUT_EVENT_SOURCE_TYPE_UNKNOWN);
107             }
108             return mouseEvent->sourceType;
109         }
110         case C_AXIS_EVENT_ID: {
111             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
112             if (!axisEvent) {
113                 return static_cast<int32_t>(UI_INPUT_EVENT_SOURCE_TYPE_UNKNOWN);
114             }
115             return axisEvent->sourceType;
116         }
117         default:
118             break;
119     }
120     return static_cast<int32_t>(UI_INPUT_EVENT_SOURCE_TYPE_UNKNOWN);
121 }
122 
OH_ArkUI_UIInputEvent_GetToolType(const ArkUI_UIInputEvent * event)123 int32_t OH_ArkUI_UIInputEvent_GetToolType(const ArkUI_UIInputEvent* event)
124 {
125     if (!event) {
126         return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_UNKNOWN);
127     }
128     switch (event->eventTypeId) {
129         case C_TOUCH_EVENT_ID: {
130             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
131             if (!touchEvent) {
132                 return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_UNKNOWN);
133             }
134             return OHOS::Ace::NodeModel::ConvertToCInputEventToolType(touchEvent->actionTouchPoint.toolType);
135         }
136         case C_MOUSE_EVENT_ID: {
137             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
138             if (!mouseEvent) {
139                 return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_UNKNOWN);
140             }
141             return OHOS::Ace::NodeModel::ConvertToCInputEventToolType(mouseEvent->actionTouchPoint.toolType);
142         }
143         case C_AXIS_EVENT_ID: {
144             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
145             if (!axisEvent) {
146                 return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_UNKNOWN);
147             }
148             return OHOS::Ace::NodeModel::ConvertToCInputEventToolType(axisEvent->actionTouchPoint.toolType);
149         }
150         default:
151             break;
152     }
153     return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_UNKNOWN);
154 }
155 
HandleCTouchEvent(ArkUI_UIInputEvent * event)156 int64_t HandleCTouchEvent(ArkUI_UIInputEvent* event)
157 {
158     const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
159     if (!touchEvent) {
160         return 0;
161     }
162     return touchEvent->timeStamp;
163 }
164 
HandleTouchEvent(ArkUI_UIInputEvent * event)165 int64_t HandleTouchEvent(ArkUI_UIInputEvent* event)
166 {
167     const auto* uiEvent = reinterpret_cast<const OHOS::Ace::UIInputEvent*>(event->inputEvent);
168     if (!uiEvent) {
169         LOGE("The parameter of OH_ArkUI_UIInputEvent_GetEventTime is invalid");
170         return 0;
171     }
172     return uiEvent->time.time_since_epoch().count();
173 }
174 
HandleAxisEvent(ArkUI_UIInputEvent * event)175 int64_t HandleAxisEvent(ArkUI_UIInputEvent* event)
176 {
177     const auto* uiEvent = reinterpret_cast<const OHOS::Ace::UIInputEvent*>(event->inputEvent);
178     if (!uiEvent) {
179         LOGE("The parameter of OH_ArkUI_UIInputEvent_GetEventTime is invalid");
180         return 0;
181     }
182     return uiEvent->time.time_since_epoch().count();
183 }
184 
HandleCMouseEvent(ArkUI_UIInputEvent * event)185 int64_t HandleCMouseEvent(ArkUI_UIInputEvent* event)
186 {
187     const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
188     if (!mouseEvent) {
189         return 0;
190     }
191     return mouseEvent->timeStamp;
192 }
193 
HandleCAxisEvent(ArkUI_UIInputEvent * event)194 int64_t HandleCAxisEvent(ArkUI_UIInputEvent* event)
195 {
196     const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
197     if (!axisEvent) {
198         return 0;
199     }
200     return axisEvent->timeStamp;
201 }
202 
HandleCKeyEvent(ArkUI_UIInputEvent * event)203 int64_t HandleCKeyEvent(ArkUI_UIInputEvent* event)
204 {
205     const auto* keyEvent = reinterpret_cast<ArkUIKeyEvent*>(event->inputEvent);
206     if (!keyEvent) {
207         return 0;
208     }
209     return keyEvent->timestamp;
210 }
211 
OH_ArkUI_UIInputEvent_GetEventTime(const ArkUI_UIInputEvent * event)212 int64_t OH_ArkUI_UIInputEvent_GetEventTime(const ArkUI_UIInputEvent* event)
213 {
214     if (!event) {
215         return 0;
216     }
217     std::map<ArkUIEventTypeId, std::function<int64_t(ArkUI_UIInputEvent*)>> eventHandlers = {
218         {C_TOUCH_EVENT_ID, HandleCTouchEvent},
219         {TOUCH_EVENT_ID, HandleTouchEvent},
220         {AXIS_EVENT_ID, HandleAxisEvent},
221         {C_MOUSE_EVENT_ID, HandleCMouseEvent},
222         {C_AXIS_EVENT_ID, HandleCAxisEvent},
223         {C_KEY_EVENT_ID, HandleCKeyEvent}
224     };
225     auto it = eventHandlers.find(event->eventTypeId);
226     if (it != eventHandlers.end()) {
227         ArkUI_UIInputEvent* inputEvent = const_cast<ArkUI_UIInputEvent*>(event);
228         return it->second(inputEvent);
229     }
230     return 0;
231 }
232 
OH_ArkUI_UIInputEvent_GetDeviceId(const ArkUI_UIInputEvent * event)233 int32_t OH_ArkUI_UIInputEvent_GetDeviceId(const ArkUI_UIInputEvent *event)
234 {
235     if (!event) {
236         return -1;
237     }
238     const auto* keyEvent = reinterpret_cast<ArkUIKeyEvent*>(event->inputEvent);
239     if (!keyEvent) {
240         return -1;
241     }
242     auto result = static_cast<int32_t>(keyEvent->deviceId);
243     return result;
244 }
245 
OH_ArkUI_UIInputEvent_GetPressedKeys(const ArkUI_UIInputEvent * event,int32_t * pressedKeyCodes,int32_t * length)246 int32_t OH_ArkUI_UIInputEvent_GetPressedKeys(
247     const ArkUI_UIInputEvent* event, int32_t* pressedKeyCodes, int32_t* length)
248 {
249     if (!event || !pressedKeyCodes || !length) {
250         return ARKUI_ERROR_CODE_PARAM_INVALID;
251     }
252     const auto* keyEvent = reinterpret_cast<ArkUIKeyEvent*>(event->inputEvent);
253     if (!keyEvent) {
254         return ARKUI_ERROR_CODE_PARAM_INVALID;
255     }
256     auto inputLength = *length;
257     *length = keyEvent->keyCodesLength;
258     if (keyEvent->keyCodesLength > inputLength) {
259         return ARKUI_ERROR_CODE_BUFFER_SIZE_NOT_ENOUGH;
260     }
261     for (int i = 0; i < keyEvent->keyCodesLength; i++) {
262         pressedKeyCodes[i] = keyEvent->pressedKeyCodes[i];
263     }
264     return ARKUI_ERROR_CODE_NO_ERROR;
265 }
266 
OH_ArkUI_PointerEvent_GetPointerCount(const ArkUI_UIInputEvent * event)267 uint32_t OH_ArkUI_PointerEvent_GetPointerCount(const ArkUI_UIInputEvent* event)
268 {
269     if (!event) {
270         return 0;
271     }
272     switch (event->eventTypeId) {
273         case C_TOUCH_EVENT_ID: {
274             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
275             if (!touchEvent) {
276                 return 0;
277             }
278             return touchEvent->touchPointSize;
279         }
280         case C_MOUSE_EVENT_ID: {
281             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
282             if (!mouseEvent) {
283                 return 0;
284             }
285             return 1;
286         }
287         case C_AXIS_EVENT_ID: {
288             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
289             if (!axisEvent) {
290                 return 0;
291             }
292             return 1;
293         }
294         default:
295             break;
296     }
297     return 0;
298 }
299 
OH_ArkUI_PointerEvent_GetPointerId(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)300 int32_t OH_ArkUI_PointerEvent_GetPointerId(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
301 {
302     if (!event) {
303         return 0;
304     }
305     switch (event->eventTypeId) {
306         case C_TOUCH_EVENT_ID: {
307             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
308             if (!isCurrentCTouchEventParamValid(touchEvent, pointerIndex)) {
309                 return 0;
310             }
311             return touchEvent->touchPointes[pointerIndex].id;
312         }
313         case C_MOUSE_EVENT_ID: {
314             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
315             if (!mouseEvent || pointerIndex != 0) {
316                 return 0;
317             }
318             return mouseEvent->actionTouchPoint.id;
319         }
320         case C_AXIS_EVENT_ID: {
321             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
322             if (!axisEvent || pointerIndex != 0) {
323                 return 0;
324             }
325             return axisEvent->actionTouchPoint.id;
326         }
327         default:
328             break;
329     }
330     return 0;
331 }
332 
OH_ArkUI_PointerEvent_GetX(const ArkUI_UIInputEvent * event)333 float OH_ArkUI_PointerEvent_GetX(const ArkUI_UIInputEvent* event)
334 {
335     if (!event) {
336         return 0.0f;
337     }
338     switch (event->eventTypeId) {
339         case C_TOUCH_EVENT_ID: {
340             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
341             if (!touchEvent) {
342                 return 0.0f;
343             }
344             return touchEvent->actionTouchPoint.nodeX;
345         }
346         case TOUCH_EVENT_ID: {
347             const auto* touchEvent = reinterpret_cast<const OHOS::Ace::TouchEvent*>(event->inputEvent);
348             if (touchEvent) {
349                 return touchEvent->localX;
350             }
351             break;
352         }
353         case AXIS_EVENT_ID: {
354             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
355             if (axisEvent) {
356                 return axisEvent->localX;
357             }
358             break;
359         }
360         case C_MOUSE_EVENT_ID: {
361             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
362             if (!mouseEvent) {
363                 return 0.0f;
364             }
365             return mouseEvent->actionTouchPoint.nodeX;
366         }
367         case C_AXIS_EVENT_ID: {
368             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
369             if (!axisEvent) {
370                 return 0.0f;
371             }
372             return axisEvent->actionTouchPoint.nodeX;
373         }
374         default:
375             break;
376     }
377     return 0.0f;
378 }
379 
OH_ArkUI_PointerEvent_GetXByIndex(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)380 float OH_ArkUI_PointerEvent_GetXByIndex(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
381 {
382     if (!event) {
383         return 0.0f;
384     }
385     switch (event->eventTypeId) {
386         case C_TOUCH_EVENT_ID: {
387             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
388             if (!isCurrentCTouchEventParamValid(touchEvent, pointerIndex)) {
389                 return 0.0f;
390             }
391             return touchEvent->touchPointes[pointerIndex].nodeX;
392         }
393         case C_MOUSE_EVENT_ID: {
394             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
395             if (!mouseEvent || pointerIndex != 0) {
396                 return 0.0f;
397             }
398             return mouseEvent->actionTouchPoint.nodeX;
399         }
400         case C_AXIS_EVENT_ID: {
401             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
402             if (!axisEvent || pointerIndex != 0) {
403                 return 0.0f;
404             }
405             return axisEvent->actionTouchPoint.nodeX;
406         }
407         default:
408             break;
409     }
410     return 0.0f;
411 }
412 
OH_ArkUI_PointerEvent_GetY(const ArkUI_UIInputEvent * event)413 float OH_ArkUI_PointerEvent_GetY(const ArkUI_UIInputEvent* event)
414 {
415     if (!event) {
416         return 0.0f;
417     }
418     switch (event->eventTypeId) {
419         case C_TOUCH_EVENT_ID: {
420             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
421             if (!touchEvent) {
422                 return 0.0f;
423             }
424             return touchEvent->actionTouchPoint.nodeY;
425         }
426         case TOUCH_EVENT_ID: {
427             const auto* touchEvent = reinterpret_cast<const OHOS::Ace::TouchEvent*>(event->inputEvent);
428             if (touchEvent) {
429                 return touchEvent->localY;
430             }
431             break;
432         }
433         case AXIS_EVENT_ID: {
434             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
435             if (axisEvent) {
436                 return axisEvent->localY;
437             }
438             break;
439         }
440         case C_MOUSE_EVENT_ID: {
441             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
442             if (!mouseEvent) {
443                 return 0.0f;
444             }
445             return mouseEvent->actionTouchPoint.nodeY;
446         }
447         case C_AXIS_EVENT_ID: {
448             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
449             if (!axisEvent) {
450                 return 0.0f;
451             }
452             return axisEvent->actionTouchPoint.nodeY;
453         }
454         default:
455             break;
456     }
457     LOGE("The parameter of OH_ArkUI_PointerEvent_GetY is invalid");
458     return 0.0f;
459 }
460 
OH_ArkUI_PointerEvent_GetYByIndex(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)461 float OH_ArkUI_PointerEvent_GetYByIndex(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
462 {
463     if (!event) {
464         return 0.0f;
465     }
466     switch (event->eventTypeId) {
467         case C_TOUCH_EVENT_ID: {
468             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
469             if (!isCurrentCTouchEventParamValid(touchEvent, pointerIndex)) {
470                 return 0.0f;
471             }
472             return touchEvent->touchPointes[pointerIndex].nodeY;
473         }
474         case C_MOUSE_EVENT_ID: {
475             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
476             if (!mouseEvent || pointerIndex != 0) {
477                 return 0.0f;
478             }
479             return mouseEvent->actionTouchPoint.nodeY;
480         }
481         case C_AXIS_EVENT_ID: {
482             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
483             if (!axisEvent || pointerIndex != 0) {
484                 return 0.0f;
485             }
486             return axisEvent->actionTouchPoint.nodeY;
487         }
488         default:
489             break;
490     }
491     return 0.0f;
492 }
493 
OH_ArkUI_PointerEvent_GetWindowX(const ArkUI_UIInputEvent * event)494 float OH_ArkUI_PointerEvent_GetWindowX(const ArkUI_UIInputEvent* event)
495 {
496     if (!event) {
497         return 0.0f;
498     }
499     switch (event->eventTypeId) {
500         case C_TOUCH_EVENT_ID: {
501             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
502             if (!touchEvent) {
503                 return 0.0f;
504             }
505             return touchEvent->actionTouchPoint.windowX;
506         }
507         case TOUCH_EVENT_ID: {
508             const auto* touchEvent = reinterpret_cast<const OHOS::Ace::TouchEvent*>(event->inputEvent);
509             if (touchEvent) {
510                 return touchEvent->x;
511             }
512             break;
513         }
514         case AXIS_EVENT_ID: {
515             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
516             if (axisEvent) {
517                 return axisEvent->x;
518             }
519             break;
520         }
521         case C_MOUSE_EVENT_ID: {
522             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
523             if (!mouseEvent) {
524                 return 0.0f;
525             }
526             return mouseEvent->actionTouchPoint.windowX;
527         }
528         case C_AXIS_EVENT_ID: {
529             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
530             if (!axisEvent) {
531                 return 0.0f;
532             }
533             return axisEvent->actionTouchPoint.windowX;
534         }
535         default:
536             break;
537     }
538     LOGE("The parameter of OH_ArkUI_PointerEvent_GetWindowX is invalid");
539     return 0.0f;
540 }
541 
OH_ArkUI_PointerEvent_GetWindowXByIndex(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)542 float OH_ArkUI_PointerEvent_GetWindowXByIndex(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
543 {
544     if (!event) {
545         return 0.0f;
546     }
547     switch (event->eventTypeId) {
548         case C_TOUCH_EVENT_ID: {
549             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
550             if (!isCurrentCTouchEventParamValid(touchEvent, pointerIndex)) {
551                 return 0.0f;
552             }
553             return touchEvent->touchPointes[pointerIndex].windowX;
554         }
555         case C_MOUSE_EVENT_ID: {
556             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
557             if (!mouseEvent || pointerIndex != 0) {
558                 return 0.0f;
559             }
560             return mouseEvent->actionTouchPoint.windowX;
561         }
562         case C_AXIS_EVENT_ID: {
563             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
564             if (!axisEvent || pointerIndex != 0) {
565                 return 0.0f;
566             }
567             return axisEvent->actionTouchPoint.windowX;
568         }
569         default:
570             break;
571     }
572     return 0.0f;
573 }
574 
OH_ArkUI_PointerEvent_GetWindowY(const ArkUI_UIInputEvent * event)575 float OH_ArkUI_PointerEvent_GetWindowY(const ArkUI_UIInputEvent* event)
576 {
577     if (!event) {
578         return 0.0f;
579     }
580     switch (event->eventTypeId) {
581         case C_TOUCH_EVENT_ID: {
582             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
583             if (!touchEvent) {
584                 return 0.0f;
585             }
586             return touchEvent->actionTouchPoint.windowY;
587         }
588         case TOUCH_EVENT_ID: {
589             const auto* touchEvent = reinterpret_cast<const OHOS::Ace::TouchEvent*>(event->inputEvent);
590             if (touchEvent) {
591                 return touchEvent->y;
592             }
593             break;
594         }
595         case AXIS_EVENT_ID: {
596             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
597             if (axisEvent) {
598                 return axisEvent->y;
599             }
600             break;
601         }
602         case C_MOUSE_EVENT_ID: {
603             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
604             if (!mouseEvent) {
605                 return 0.0f;
606             }
607             return mouseEvent->actionTouchPoint.windowY;
608         }
609         case C_AXIS_EVENT_ID: {
610             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
611             if (!axisEvent) {
612                 return 0.0f;
613             }
614             return axisEvent->actionTouchPoint.windowY;
615         }
616         default:
617             break;
618     }
619     LOGE("The parameter of OH_ArkUI_PointerEvent_GetWindowY is invalid");
620     return 0.0f;
621 }
622 
OH_ArkUI_PointerEvent_GetWindowYByIndex(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)623 float OH_ArkUI_PointerEvent_GetWindowYByIndex(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
624 {
625     if (!event) {
626         return 0.0f;
627     }
628     switch (event->eventTypeId) {
629         case C_TOUCH_EVENT_ID: {
630             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
631             if (!isCurrentCTouchEventParamValid(touchEvent, pointerIndex)) {
632                 return 0.0f;
633             }
634             return touchEvent->touchPointes[pointerIndex].windowY;
635         }
636         case C_MOUSE_EVENT_ID: {
637             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
638             if (!mouseEvent || pointerIndex != 0) {
639                 return 0.0f;
640             }
641             return mouseEvent->actionTouchPoint.windowY;
642         }
643         case C_AXIS_EVENT_ID: {
644             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
645             if (!axisEvent || pointerIndex != 0) {
646                 return 0.0f;
647             }
648             return axisEvent->actionTouchPoint.windowY;
649         }
650         default:
651             break;
652     }
653     return 0.0f;
654 }
655 
OH_ArkUI_PointerEvent_GetDisplayX(const ArkUI_UIInputEvent * event)656 float OH_ArkUI_PointerEvent_GetDisplayX(const ArkUI_UIInputEvent* event)
657 {
658     if (!event) {
659         return 0.0f;
660     }
661     switch (event->eventTypeId) {
662         case C_TOUCH_EVENT_ID: {
663             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
664             if (!touchEvent) {
665                 return 0.0f;
666             }
667             return touchEvent->actionTouchPoint.screenX;
668         }
669         case TOUCH_EVENT_ID: {
670             const auto* touchEvent = reinterpret_cast<const OHOS::Ace::TouchEvent*>(event->inputEvent);
671             if (touchEvent) {
672                 return touchEvent->screenX;
673             }
674             break;
675         }
676         case AXIS_EVENT_ID: {
677             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
678             if (axisEvent) {
679                 return axisEvent->screenX;
680             }
681             break;
682         }
683         case C_MOUSE_EVENT_ID: {
684             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
685             if (!mouseEvent) {
686                 return 0.0f;
687             }
688             return mouseEvent->actionTouchPoint.screenX;
689         }
690         case C_AXIS_EVENT_ID: {
691             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
692             if (!axisEvent) {
693                 return 0.0f;
694             }
695             return axisEvent->actionTouchPoint.screenX;
696         }
697         default:
698             break;
699     }
700     LOGE("The parameter of OH_ArkUI_PointerEvent_GetDisplayX is invalid");
701     return 0.0f;
702 }
703 
OH_ArkUI_PointerEvent_GetDisplayXByIndex(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)704 float OH_ArkUI_PointerEvent_GetDisplayXByIndex(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
705 {
706     if (!event) {
707         return 0.0f;
708     }
709     switch (event->eventTypeId) {
710         case C_TOUCH_EVENT_ID: {
711             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
712             if (!isCurrentCTouchEventParamValid(touchEvent, pointerIndex)) {
713                 return 0.0f;
714             }
715             return touchEvent->touchPointes[pointerIndex].screenX;
716         }
717         case C_MOUSE_EVENT_ID: {
718             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
719             if (!mouseEvent || pointerIndex != 0) {
720                 return 0.0f;
721             }
722             return mouseEvent->actionTouchPoint.screenX;
723         }
724         case C_AXIS_EVENT_ID: {
725             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
726             if (!axisEvent || pointerIndex != 0) {
727                 return 0.0f;
728             }
729             return axisEvent->actionTouchPoint.screenX;
730         }
731         default:
732             break;
733     }
734     return 0.0f;
735 }
736 
OH_ArkUI_PointerEvent_GetDisplayY(const ArkUI_UIInputEvent * event)737 float OH_ArkUI_PointerEvent_GetDisplayY(const ArkUI_UIInputEvent* event)
738 {
739     if (!event) {
740         return 0.0f;
741     }
742     switch (event->eventTypeId) {
743         case C_TOUCH_EVENT_ID: {
744             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
745             if (!touchEvent) {
746                 return 0.0f;
747             }
748             return touchEvent->actionTouchPoint.screenY;
749         }
750         case TOUCH_EVENT_ID: {
751             const auto* touchEvent = reinterpret_cast<const OHOS::Ace::TouchEvent*>(event->inputEvent);
752             if (touchEvent) {
753                 return touchEvent->screenY;
754             }
755             break;
756         }
757         case AXIS_EVENT_ID: {
758             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
759             if (axisEvent) {
760                 return axisEvent->screenY;
761             }
762             break;
763         }
764         case C_MOUSE_EVENT_ID: {
765             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
766             if (!mouseEvent) {
767                 return 0.0f;
768             }
769             return mouseEvent->actionTouchPoint.screenY;
770         }
771         case C_AXIS_EVENT_ID: {
772             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
773             if (!axisEvent) {
774                 return 0.0f;
775             }
776             return axisEvent->actionTouchPoint.screenY;
777         }
778         default:
779             break;
780     }
781     LOGE("The parameter of OH_ArkUI_PointerEvent_GetDisplayY is invalid");
782     return 0.0f;
783 }
784 
OH_ArkUI_PointerEvent_GetDisplayYByIndex(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)785 float OH_ArkUI_PointerEvent_GetDisplayYByIndex(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
786 {
787     if (!event) {
788         return 0.0f;
789     }
790     switch (event->eventTypeId) {
791         case C_TOUCH_EVENT_ID: {
792             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
793             if (!isCurrentCTouchEventParamValid(touchEvent, pointerIndex)) {
794                 return 0.0f;
795             }
796             return touchEvent->touchPointes[pointerIndex].screenY;
797         }
798         case C_MOUSE_EVENT_ID: {
799             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
800             if (!mouseEvent || pointerIndex != 0) {
801                 return 0.0f;
802             }
803             return mouseEvent->actionTouchPoint.screenY;
804         }
805         case C_AXIS_EVENT_ID: {
806             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
807             if (!axisEvent || pointerIndex != 0) {
808                 return 0.0f;
809             }
810             return axisEvent->actionTouchPoint.screenY;
811         }
812         default:
813             break;
814     }
815     return 0.0f;
816 }
817 
OH_ArkUI_PointerEvent_GetPressure(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)818 float OH_ArkUI_PointerEvent_GetPressure(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
819 {
820     if (!event) {
821         return 0.0f;
822     }
823     switch (event->eventTypeId) {
824         case C_TOUCH_EVENT_ID: {
825             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
826             if (!touchEvent || touchEvent->touchPointSize <= 0) {
827                 return 0.0f;
828             }
829             return touchEvent->touchPointes[touchEvent->touchPointSize-1].pressure;
830         }
831         default:
832             break;
833     }
834     return 0.0f;
835 }
836 
OH_ArkUI_PointerEvent_GetTiltX(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)837 float OH_ArkUI_PointerEvent_GetTiltX(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
838 {
839     if (!event) {
840         return 0.0f;
841     }
842     switch (event->eventTypeId) {
843         case C_TOUCH_EVENT_ID: {
844             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
845             if (!touchEvent || touchEvent->touchPointSize <= 0) {
846                 return 0.0f;
847             }
848             return touchEvent->touchPointes[touchEvent->touchPointSize-1].tiltX;
849         }
850         default:
851             break;
852     }
853     return 0.0f;
854 }
855 
OH_ArkUI_PointerEvent_GetTiltY(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)856 float OH_ArkUI_PointerEvent_GetTiltY(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
857 {
858     if (!event) {
859         return 0.0f;
860     }
861     switch (event->eventTypeId) {
862         case C_TOUCH_EVENT_ID: {
863             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
864             if (!touchEvent || touchEvent->touchPointSize <= 0) {
865                 return 0.0f;
866             }
867             return touchEvent->touchPointes[touchEvent->touchPointSize-1].tiltY;
868         }
869         default:
870             break;
871     }
872     return 0.0f;
873 }
874 
OH_ArkUI_PointerEvent_GetTouchAreaWidth(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)875 float OH_ArkUI_PointerEvent_GetTouchAreaWidth(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
876 {
877     if (!event) {
878         return 0.0f;
879     }
880     switch (event->eventTypeId) {
881         case C_TOUCH_EVENT_ID: {
882             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
883             if (!touchEvent || touchEvent->touchPointSize <= 0) {
884                 return 0.0f;
885             }
886             return touchEvent->touchPointes[touchEvent->touchPointSize-1].contactAreaWidth;
887         }
888         default:
889             break;
890     }
891     return 0.0f;
892 }
893 
OH_ArkUI_PointerEvent_GetTouchAreaHeight(const ArkUI_UIInputEvent * event,uint32_t pointerIndex)894 float OH_ArkUI_PointerEvent_GetTouchAreaHeight(const ArkUI_UIInputEvent* event, uint32_t pointerIndex)
895 {
896     if (!event) {
897         return 0.0f;
898     }
899     switch (event->eventTypeId) {
900         case C_TOUCH_EVENT_ID: {
901             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
902             if (!touchEvent || touchEvent->touchPointSize <= 0) {
903                 return 0.0f;
904             }
905             return touchEvent->touchPointes[touchEvent->touchPointSize-1].contactAreaHeight;
906         }
907         default:
908             break;
909     }
910     return 0.0f;
911 }
912 
OH_ArkUI_PointerEvent_GetHistorySize(const ArkUI_UIInputEvent * event)913 uint32_t OH_ArkUI_PointerEvent_GetHistorySize(const ArkUI_UIInputEvent* event)
914 {
915     if (!event) {
916         return 0;
917     }
918     switch (event->eventTypeId) {
919         case C_TOUCH_EVENT_ID: {
920             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
921             if (!touchEvent || !touchEvent->historyEvents) {
922                 return 0;
923             }
924             return touchEvent->historySize;
925         }
926         default:
927             break;
928     }
929     return 0;
930 }
931 
OH_ArkUI_PointerEvent_GetHistoryEventTime(const ArkUI_UIInputEvent * event,uint32_t historyIndex)932 int64_t OH_ArkUI_PointerEvent_GetHistoryEventTime(const ArkUI_UIInputEvent* event, uint32_t historyIndex)
933 {
934     if (!event) {
935         return 0;
936     }
937     switch (event->eventTypeId) {
938         case C_TOUCH_EVENT_ID: {
939             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
940             if (!touchEvent || !touchEvent->historyEvents || touchEvent->historySize <= historyIndex ||
941                 historyIndex < 0) {
942                 return 0;
943             }
944             return touchEvent->historyEvents[historyIndex].timeStamp;
945         }
946         default:
947             break;
948     }
949     return 0;
950 }
951 
OH_ArkUI_PointerEvent_GetHistoryPointerCount(const ArkUI_UIInputEvent * event,uint32_t historyIndex)952 uint32_t OH_ArkUI_PointerEvent_GetHistoryPointerCount(const ArkUI_UIInputEvent* event, uint32_t historyIndex)
953 {
954     if (!event) {
955         return 0;
956     }
957     switch (event->eventTypeId) {
958         case C_TOUCH_EVENT_ID: {
959             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
960             if (!touchEvent || !touchEvent->historyEvents || touchEvent->historySize <= historyIndex ||
961                 historyIndex < 0) {
962                 return 0;
963             }
964             return touchEvent->historyEvents[historyIndex].touchPointSize;
965         }
966         default:
967             break;
968     }
969     return 0;
970 }
971 
OH_ArkUI_PointerEvent_GetHistoryPointerId(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)972 int32_t OH_ArkUI_PointerEvent_GetHistoryPointerId(
973     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
974 {
975     if (!event) {
976         return 0;
977     }
978     switch (event->eventTypeId) {
979         case C_TOUCH_EVENT_ID: {
980             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
981             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
982                 return 0;
983             }
984             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].id;
985         }
986         default:
987             break;
988     }
989     return 0;
990 }
991 
OH_ArkUI_PointerEvent_GetHistoryX(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)992 float OH_ArkUI_PointerEvent_GetHistoryX(const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
993 {
994     if (!event) {
995         return 0.0f;
996     }
997     switch (event->eventTypeId) {
998         case C_TOUCH_EVENT_ID: {
999             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1000             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1001                 return 0.0f;
1002             }
1003             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].nodeX;
1004         }
1005         default:
1006             break;
1007     }
1008     return 0.0f;
1009 }
1010 
OH_ArkUI_PointerEvent_GetHistoryY(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1011 float OH_ArkUI_PointerEvent_GetHistoryY(const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1012 {
1013     if (!event) {
1014         return 0.0f;
1015     }
1016     switch (event->eventTypeId) {
1017         case C_TOUCH_EVENT_ID: {
1018             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1019             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1020                 return 0.0f;
1021             }
1022             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].nodeY;
1023         }
1024         default:
1025             break;
1026     }
1027     return 0.0f;
1028 }
1029 
OH_ArkUI_PointerEvent_GetHistoryWindowX(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1030 float OH_ArkUI_PointerEvent_GetHistoryWindowX(
1031     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1032 {
1033     if (!event) {
1034         return 0.0f;
1035     }
1036     switch (event->eventTypeId) {
1037         case C_TOUCH_EVENT_ID: {
1038             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1039             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1040                 return 0.0f;
1041             }
1042             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].windowX;
1043         }
1044         default:
1045             break;
1046     }
1047     return 0.0f;
1048 }
1049 
OH_ArkUI_PointerEvent_GetHistoryWindowY(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1050 float OH_ArkUI_PointerEvent_GetHistoryWindowY(
1051     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1052 {
1053     if (!event) {
1054         return 0.0f;
1055     }
1056     switch (event->eventTypeId) {
1057         case C_TOUCH_EVENT_ID: {
1058             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1059             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1060                 return 0.0f;
1061             }
1062             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].windowY;
1063         }
1064         default:
1065             break;
1066     }
1067     return 0.0f;
1068 }
1069 
OH_ArkUI_PointerEvent_GetHistoryDisplayX(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1070 float OH_ArkUI_PointerEvent_GetHistoryDisplayX(
1071     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1072 {
1073     if (!event) {
1074         return 0.0f;
1075     }
1076     switch (event->eventTypeId) {
1077         case C_TOUCH_EVENT_ID: {
1078             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1079             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1080                 return 0.0f;
1081             }
1082             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].screenX;
1083         }
1084         default:
1085             break;
1086     }
1087     return 0.0f;
1088 }
1089 
OH_ArkUI_PointerEvent_GetHistoryDisplayY(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1090 float OH_ArkUI_PointerEvent_GetHistoryDisplayY(
1091     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1092 {
1093     if (!event) {
1094         return 0.0f;
1095     }
1096     switch (event->eventTypeId) {
1097         case C_TOUCH_EVENT_ID: {
1098             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1099             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1100                 return 0.0f;
1101             }
1102             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].screenY;
1103         }
1104         default:
1105             break;
1106     }
1107     return 0.0f;
1108 }
1109 
OH_ArkUI_PointerEvent_GetHistoryPressure(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1110 float OH_ArkUI_PointerEvent_GetHistoryPressure(
1111     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1112 {
1113     if (!event) {
1114         return 0.0f;
1115     }
1116     switch (event->eventTypeId) {
1117         case C_TOUCH_EVENT_ID: {
1118             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1119             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1120                 return 0.0f;
1121             }
1122             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].pressure;
1123         }
1124         default:
1125             break;
1126     }
1127     return 0.0f;
1128 }
1129 
OH_ArkUI_PointerEvent_GetHistoryTiltX(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1130 float OH_ArkUI_PointerEvent_GetHistoryTiltX(
1131     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1132 {
1133     if (!event) {
1134         return 0.0f;
1135     }
1136     switch (event->eventTypeId) {
1137         case C_TOUCH_EVENT_ID: {
1138             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1139             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1140                 return 0.0f;
1141             }
1142             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].tiltX;
1143         }
1144         default:
1145             break;
1146     }
1147     return 0.0f;
1148 }
1149 
OH_ArkUI_PointerEvent_GetHistoryTiltY(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1150 float OH_ArkUI_PointerEvent_GetHistoryTiltY(
1151     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1152 {
1153     if (!event) {
1154         return 0.0f;
1155     }
1156     switch (event->eventTypeId) {
1157         case C_TOUCH_EVENT_ID: {
1158             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1159             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1160                 return 0.0f;
1161             }
1162             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].tiltY;
1163         }
1164         default:
1165             break;
1166     }
1167     return 0.0f;
1168 }
1169 
OH_ArkUI_PointerEvent_GetHistoryTouchAreaWidth(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1170 float OH_ArkUI_PointerEvent_GetHistoryTouchAreaWidth(
1171     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1172 {
1173     if (!event) {
1174         return 0.0f;
1175     }
1176     switch (event->eventTypeId) {
1177         case C_TOUCH_EVENT_ID: {
1178             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1179             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1180                 return 0.0f;
1181             }
1182             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].contactAreaWidth;
1183         }
1184         default:
1185             break;
1186     }
1187     return 0.0f;
1188 }
1189 
OH_ArkUI_PointerEvent_GetHistoryTouchAreaHeight(const ArkUI_UIInputEvent * event,uint32_t pointerIndex,uint32_t historyIndex)1190 float OH_ArkUI_PointerEvent_GetHistoryTouchAreaHeight(
1191     const ArkUI_UIInputEvent* event, uint32_t pointerIndex, uint32_t historyIndex)
1192 {
1193     if (!event) {
1194         return 0.0f;
1195     }
1196     switch (event->eventTypeId) {
1197         case C_TOUCH_EVENT_ID: {
1198             const auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1199             if (!isHistoryCTouchEventParamValid(touchEvent, historyIndex, pointerIndex)) {
1200                 return 0.0f;
1201             }
1202             return touchEvent->historyEvents[historyIndex].touchPointes[pointerIndex].contactAreaHeight;
1203         }
1204         default:
1205             break;
1206     }
1207     return 0.0f;
1208 }
1209 
OH_ArkUI_AxisEvent_GetVerticalAxisValue(const ArkUI_UIInputEvent * event)1210 double OH_ArkUI_AxisEvent_GetVerticalAxisValue(const ArkUI_UIInputEvent* event)
1211 {
1212     if (!event) {
1213         return 0.0;
1214     }
1215     switch (event->eventTypeId) {
1216         case AXIS_EVENT_ID: {
1217             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
1218             if (axisEvent) {
1219                 return axisEvent->verticalAxis;
1220             }
1221             break;
1222         }
1223         case C_AXIS_EVENT_ID: {
1224             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
1225             if (!axisEvent) {
1226                 return 0.0;
1227             }
1228             return axisEvent->verticalAxis;
1229         }
1230         default:
1231             break;
1232     }
1233     return 0.0;
1234 }
1235 
OH_ArkUI_AxisEvent_GetHorizontalAxisValue(const ArkUI_UIInputEvent * event)1236 double OH_ArkUI_AxisEvent_GetHorizontalAxisValue(const ArkUI_UIInputEvent* event)
1237 {
1238     if (!event) {
1239         return 0.0;
1240     }
1241     switch (event->eventTypeId) {
1242         case AXIS_EVENT_ID: {
1243             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
1244             if (axisEvent) {
1245                 return axisEvent->horizontalAxis;
1246             }
1247             break;
1248         }
1249         case C_AXIS_EVENT_ID: {
1250             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
1251             if (!axisEvent) {
1252                 return 0.0;
1253             }
1254             return axisEvent->horizontalAxis;
1255         }
1256         default:
1257             break;
1258     }
1259     return 0.0;
1260 }
1261 
OH_ArkUI_AxisEvent_GetPinchAxisScaleValue(const ArkUI_UIInputEvent * event)1262 double OH_ArkUI_AxisEvent_GetPinchAxisScaleValue(const ArkUI_UIInputEvent* event)
1263 {
1264     if (!event) {
1265         return 0.0;
1266     }
1267     switch (event->eventTypeId) {
1268         case AXIS_EVENT_ID: {
1269             const auto* axisEvent = reinterpret_cast<const OHOS::Ace::AxisEvent*>(event->inputEvent);
1270             if (axisEvent) {
1271                 return axisEvent->pinchAxisScale;
1272             }
1273             break;
1274         }
1275         case C_AXIS_EVENT_ID: {
1276             const auto* axisEvent = reinterpret_cast<ArkUIAxisEvent*>(event->inputEvent);
1277             if (!axisEvent) {
1278                 return 0.0;
1279             }
1280             return axisEvent->pinchAxisScale;
1281         }
1282         default:
1283             break;
1284     }
1285     return 0.0;
1286 }
1287 
OH_ArkUI_PointerEvent_SetInterceptHitTestMode(const ArkUI_UIInputEvent * event,HitTestMode mode)1288 int32_t OH_ArkUI_PointerEvent_SetInterceptHitTestMode(const ArkUI_UIInputEvent* event, HitTestMode mode)
1289 {
1290     if (!event) {
1291         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
1292     }
1293     switch (event->eventTypeId) {
1294         case C_TOUCH_EVENT_ID: {
1295             auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1296             touchEvent->interceptResult = static_cast<int32_t>(mode);
1297             break;
1298         }
1299         case C_MOUSE_EVENT_ID: {
1300             auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
1301             if (!mouseEvent) {
1302                 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
1303             }
1304             return mouseEvent->interceptResult = static_cast<int32_t>(mode);
1305         }
1306         default:
1307             return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
1308     }
1309     return OHOS::Ace::ERROR_CODE_NO_ERROR;
1310 }
1311 
OH_ArkUI_PointerEvent_SetStopPropagation(const ArkUI_UIInputEvent * event,bool stopPropagation)1312 int32_t OH_ArkUI_PointerEvent_SetStopPropagation(const ArkUI_UIInputEvent* event, bool stopPropagation)
1313 {
1314     if (!event) {
1315         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
1316     }
1317     switch (event->eventTypeId) {
1318         case C_TOUCH_EVENT_ID: {
1319             auto* touchEvent = reinterpret_cast<ArkUITouchEvent*>(event->inputEvent);
1320             touchEvent->stopPropagation = stopPropagation;
1321             break;
1322         }
1323         default:
1324             return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
1325     }
1326     return OHOS::Ace::ERROR_CODE_NO_ERROR;
1327 }
1328 
OH_ArkUI_MouseEvent_GetMouseButton(const ArkUI_UIInputEvent * event)1329 int32_t OH_ArkUI_MouseEvent_GetMouseButton(const ArkUI_UIInputEvent* event)
1330 {
1331     if (!event) {
1332         return -1;
1333     }
1334     switch (event->eventTypeId) {
1335         case C_MOUSE_EVENT_ID: {
1336             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
1337             if (!mouseEvent) {
1338                 return -1;
1339             }
1340             return OHOS::Ace::NodeModel::ConvertToCMouseEventButtonType(mouseEvent->button);
1341         }
1342         default:
1343             break;
1344     }
1345     return -1;
1346 }
1347 
OH_ArkUI_MouseEvent_GetMouseAction(const ArkUI_UIInputEvent * event)1348 int32_t OH_ArkUI_MouseEvent_GetMouseAction(const ArkUI_UIInputEvent* event)
1349 {
1350     if (!event) {
1351         return -1;
1352     }
1353     switch (event->eventTypeId) {
1354         case C_MOUSE_EVENT_ID: {
1355             const auto* mouseEvent = reinterpret_cast<ArkUIMouseEvent*>(event->inputEvent);
1356             if (!mouseEvent) {
1357                 return -1;
1358             }
1359             return OHOS::Ace::NodeModel::ConvertToCMouseActionType(mouseEvent->action);
1360         }
1361         default:
1362             break;
1363     }
1364     return -1;
1365 }
1366 
1367 #ifdef __cplusplus
1368 };
1369 #endif
1370