• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 #include "node/event_converter.h"
16 
17 #include <cstdint>
18 
19 #include "native_node.h"
20 #include "node/gesture_impl.h"
21 #include "node/native_compatible.h"
22 #include "node/node_model.h"
23 #include "securec.h"
24 
25 #include "base/log/log_wrapper.h"
26 #include "base/error/error_code.h"
27 #include "core/event/touch_event.h"
28 #include "core/interfaces/arkoala/arkoala_api.h"
29 #include "interfaces/native/drag_and_drop.h"
30 
31 namespace OHOS::Ace::NodeModel {
32 namespace {
33 constexpr int32_t ORIGIN_TOUCH_ACTION_DOWN = 0;
34 constexpr int32_t ORIGIN_TOUCH_ACTION_UP = 1;
35 constexpr int32_t ORIGIN_TOUCH_ACTION_MOVE = 2;
36 constexpr int32_t ORIGIN_TOUCH_ACTION_CANCEL = 3;
37 constexpr int32_t ORIGIN_INPUT_EVENT_TOOL_TYPE_FINGER = 1;
38 constexpr int32_t ORIGIN_INPUT_EVENT_TOOL_TYPE_PEN = 2;
39 constexpr int32_t ORIGIN_INPUT_EVENT_TOOL_TYPE_MOUSE = 7;
40 constexpr int32_t ORIGIN_INPUT_EVENT_TOOL_TYPE_TOUCHPAD = 9;
41 constexpr int32_t ORIGIN_INPUT_EVENT_TOOL_TYPE_JOYSTICK = 10;
42 constexpr int32_t ORIGIN_MOUSE_ACTION_PRESS = 1;
43 constexpr int32_t ORIGIN_MOUSE_ACTION_RELEASE = 2;
44 constexpr int32_t ORIGIN_MOUSE_ACTION_MOVE = 3;
45 constexpr int32_t ORIGIN_MOUSE_BUTTON_LEFT = 1;
46 constexpr int32_t ORIGIN_MOUSE_BUTTON_RIGHT = 2;
47 constexpr int32_t ORIGIN_MOUSE_BUTTON_MIDDLE = 4;
48 constexpr int32_t ORIGIN_MOUSE_BUTTON_BACK = 8;
49 constexpr int32_t ORIGIN_MOUSE_BUTTON_FORWARD = 16;
50 constexpr int32_t ORIGIN_AXIS_ACTION_NONE = 0;
51 constexpr int32_t ORIGIN_AXIS_ACTION_BEGIN = 1;
52 constexpr int32_t ORIGIN_AXIS_ACTION_UPDATE = 2;
53 constexpr int32_t ORIGIN_AXIS_ACTION_END = 3;
54 constexpr int32_t ORIGIN_AXIS_ACTION_CANCEL = 4;
55 
ConvertToOriginEvent(const ArkUITouchEvent & origin,ArkUI_NodeTouchEvent & event)56 void ConvertToOriginEvent(const ArkUITouchEvent& origin, ArkUI_NodeTouchEvent& event)
57 {
58     if (origin.sourceType == UI_INPUT_EVENTT_SOURCE_TYPE_TOUCH_SCREEN) {
59         event.sourceType = NODE_SOURCE_TYPE_TOUCH_SCREEN;
60     } else {
61         event.sourceType = NODE_SOURCE_TYPE_UNKNOWN;
62     }
63     switch (origin.action) {
64         case static_cast<int32_t>(TouchType::DOWN):
65             event.action = NODE_ACTION_DOWN;
66             break;
67         // TouchType::UP
68         case static_cast<int32_t>(TouchType::UP):
69             event.action = NODE_ACTION_UP;
70             break;
71             // TouchType::MOVE
72         case static_cast<int32_t>(TouchType::MOVE):
73             event.action = NODE_ACTION_MOVE;
74             break;
75         case static_cast<int32_t>(TouchType::CANCEL):
76             event.action = NODE_ACTION_CANCEL;
77             break;
78         default:
79             event.action = static_cast<ArkUI_NodeTouchEventAction>(-1);
80     }
81 }
82 
ConvertToTouchEvent(const ArkUITouchEvent & origin,ArkUI_NodeTouchEvent & event)83 void ConvertToTouchEvent(const ArkUITouchEvent& origin, ArkUI_NodeTouchEvent& event)
84 {
85     memset_s(&event, sizeof(ArkUI_NodeTouchEvent), 0, sizeof(ArkUI_NodeTouchEvent));
86     event.actionTouch.id = origin.actionTouchPoint.id;
87     event.actionTouch.nodeX = origin.actionTouchPoint.nodeX;
88     event.actionTouch.nodeY = origin.actionTouchPoint.nodeY;
89     event.actionTouch.windowX = origin.actionTouchPoint.windowX;
90     event.actionTouch.windowY = origin.actionTouchPoint.windowY;
91     event.actionTouch.screenX = origin.actionTouchPoint.screenX;
92     event.actionTouch.screenY = origin.actionTouchPoint.screenY;
93     event.actionTouch.contactAreaHeight = origin.actionTouchPoint.contactAreaHeight;
94     event.actionTouch.contactAreaWidth = origin.actionTouchPoint.contactAreaWidth;
95     event.actionTouch.toolHeight = origin.actionTouchPoint.toolHeight;
96     event.actionTouch.toolWidth = origin.actionTouchPoint.toolWidth;
97     event.actionTouch.toolType = static_cast<ArkUI_NodeToolType>(origin.actionTouchPoint.toolType);
98     event.actionTouch.pressure = origin.actionTouchPoint.pressure;
99     event.actionTouch.tiltX = origin.actionTouchPoint.tiltX;
100     event.actionTouch.tiltY = origin.actionTouchPoint.tiltY;
101     event.actionTouch.rawX = origin.actionTouchPoint.rawX;
102     event.actionTouch.rawY = origin.actionTouchPoint.rawY;
103 
104     event.timeStamp = origin.timeStamp;
105     ConvertToOriginEvent(origin, event);
106     static ArkUI_Uint32 touchPointSize = origin.touchPointSize;
107     static ArkUITouchPoint* touchPoints = origin.touchPointes;
108     auto getTouchPoints = [](ArkUI_NodeTouchPoint** points) -> ArkUI_Int32 {
109         *points = new ArkUI_NodeTouchPoint[touchPointSize] {};
110         for (uint32_t index = 0; index < touchPointSize; index++) {
111             (*points)[index].id = touchPoints[index].id;
112             (*points)[index].nodeX = touchPoints[index].nodeX;
113             (*points)[index].nodeY = touchPoints[index].nodeY;
114             (*points)[index].windowX = touchPoints[index].windowX;
115             (*points)[index].windowY = touchPoints[index].windowY;
116             (*points)[index].screenX = touchPoints[index].screenX;
117             (*points)[index].screenY = touchPoints[index].screenY;
118             (*points)[index].contactAreaHeight = touchPoints[index].contactAreaHeight;
119             (*points)[index].contactAreaWidth = touchPoints[index].contactAreaWidth;
120             (*points)[index].toolHeight = touchPoints[index].toolHeight;
121             (*points)[index].toolWidth = touchPoints[index].toolWidth;
122             (*points)[index].toolType = static_cast<ArkUI_NodeToolType>(touchPoints[index].toolType);
123             (*points)[index].pressure = touchPoints[index].pressure;
124             (*points)[index].tiltX = touchPoints[index].tiltX;
125             (*points)[index].tiltY = touchPoints[index].tiltY;
126             (*points)[index].rawX = touchPoints[index].rawX;
127             (*points)[index].rawY = touchPoints[index].rawY;
128         }
129         return touchPointSize;
130     };
131     event.getTouches = getTouchPoints;
132 }
133 
134 } // namespace
ConvertOriginEventType(ArkUI_NodeEventType type,int32_t nodeType)135 ArkUI_Int32 ConvertOriginEventType(ArkUI_NodeEventType type, int32_t nodeType)
136 {
137     auto arkUINodeType = static_cast<ArkUI_NodeType>(nodeType);
138     switch (type) {
139         case NODE_TEXT_INPUT_ON_CHANGE:
140             return ON_TEXT_INPUT_CHANGE;
141         case NODE_SCROLL_EVENT_ON_SCROLL:
142             if (arkUINodeType == ARKUI_NODE_LIST) {
143                 return ON_LIST_SCROLL;
144             }
145             return ON_SCROLL;
146         case NODE_SCROLL_EVENT_ON_SCROLL_FRAME_BEGIN:
147             if (arkUINodeType == ARKUI_NODE_LIST) {
148                 return ON_LIST_SCROLL_FRAME_BEGIN;
149             } else if (arkUINodeType == ARKUI_NODE_WATER_FLOW) {
150                 return ON_WATER_FLOW_SCROLL_FRAME_BEGIN;
151             }
152             return ON_SCROLL_FRAME_BEGIN;
153         case NODE_SCROLL_EVENT_ON_WILL_SCROLL:
154             return ON_SCROLL_WILL_SCROLL;
155         case NODE_SCROLL_EVENT_ON_DID_SCROLL:
156             return ON_SCROLL_DID_SCROLL;
157         case NODE_SCROLL_EVENT_ON_SCROLL_START:
158             if (arkUINodeType == ARKUI_NODE_LIST) {
159                 return ON_LIST_SCROLL_START;
160             } else if (arkUINodeType == ARKUI_NODE_WATER_FLOW) {
161                 return ON_WATER_FLOW_SCROLL_START;
162             }
163             return ON_SCROLL_START;
164         case NODE_SCROLL_EVENT_ON_SCROLL_STOP:
165             if (arkUINodeType == ARKUI_NODE_LIST) {
166                 return ON_LIST_SCROLL_STOP;
167             } else if (arkUINodeType == ARKUI_NODE_WATER_FLOW) {
168                 return ON_WATER_FLOW_SCROLL_STOP;
169             }
170             return ON_SCROLL_STOP;
171         case NODE_EVENT_ON_APPEAR:
172             return ON_APPEAR;
173         case NODE_EVENT_ON_DISAPPEAR:
174             return ON_DISAPPEAR;
175         case NODE_EVENT_ON_AREA_CHANGE:
176             return ON_AREA_CHANGE;
177         case NODE_TEXT_AREA_ON_CHANGE:
178             return ON_TEXTAREA_CHANGE;
179         case NODE_ON_FOCUS:
180             return ON_FOCUS;
181         case NODE_ON_BLUR:
182             return ON_BLUR;
183         case NODE_TEXT_INPUT_ON_SUBMIT:
184             return ON_TEXT_INPUT_SUBMIT;
185         case NODE_REFRESH_STATE_CHANGE:
186             return ON_REFRESH_STATE_CHANGE;
187         case NODE_REFRESH_ON_REFRESH:
188             return ON_REFRESH_REFRESHING;
189         case NODE_SCROLL_EVENT_ON_SCROLL_EDGE:
190             return ON_SCROLL_EDGE;
191         case NODE_TOGGLE_ON_CHANGE:
192             return ON_TOGGLE_CHANGE;
193         case NODE_IMAGE_ON_COMPLETE:
194             return ON_IMAGE_COMPLETE;
195         case NODE_IMAGE_ON_ERROR:
196             return ON_IMAGE_ERROR;
197         case NODE_IMAGE_ON_SVG_PLAY_FINISH:
198             return ON_IMAGE_SVG_PLAY_FINISH;
199         case NODE_IMAGE_ON_DOWNLOAD_PROGRESS:
200             return ON_IMAGE_DOWNLOAD_PROGRESS;
201         case NODE_TEXT_PICKER_EVENT_ON_CHANGE:
202             return ON_TEXT_PICKER_CHANGE;
203         case NODE_TEXT_PICKER_EVENT_ON_SCROLL_STOP:
204             return ON_TEXT_PICKER_SCROLL_STOP;
205         case NODE_DATE_PICKER_EVENT_ON_DATE_CHANGE:
206             return ON_DATE_PICKER_DATE_CHANGE;
207         case NODE_TIME_PICKER_EVENT_ON_CHANGE:
208             return ON_TIME_PICKER_CHANGE;
209         case NODE_CALENDAR_PICKER_EVENT_ON_CHANGE:
210             return ON_CALENDAR_PICKER_CHANGE;
211         case NODE_TOUCH_EVENT:
212             return ON_TOUCH;
213         case NODE_ON_CLICK:
214             return ON_CLICK;
215         case NODE_ON_DRAG_START:
216             return ON_DRAG_START;
217         case NODE_ON_DRAG_ENTER:
218             return ON_DRAG_ENTER;
219         case NODE_ON_DROP:
220             return ON_DRAG_DROP;
221         case NODE_ON_DRAG_MOVE:
222             return ON_DRAG_MOVE;
223         case NODE_ON_DRAG_LEAVE:
224             return ON_DRAG_LEAVE;
225         case NODE_ON_DRAG_END:
226             return ON_DRAG_END;
227         case NODE_ON_PRE_DRAG:
228             return ON_PRE_DRAG;
229         case NODE_ON_KEY_EVENT:
230             return ON_KEY_EVENT;
231         case NODE_ON_KEY_PRE_IME:
232             return ON_KEY_PREIME;
233         case NODE_DISPATCH_KEY_EVENT:
234             return ON_KEY_DISPATCH;
235         case NODE_CHECKBOX_EVENT_ON_CHANGE:
236             return ON_CHECKBOX_CHANGE;
237         case NODE_SLIDER_EVENT_ON_CHANGE:
238             return ON_SLIDER_CHANGE;
239         case NODE_TEXT_INPUT_ON_CUT:
240             return ON_TEXT_INPUT_CUT;
241         case NODE_TEXT_INPUT_ON_PASTE:
242             return ON_TEXT_INPUT_PASTE;
243         case NODE_TEXT_INPUT_ON_TEXT_SELECTION_CHANGE:
244             return ON_TEXT_INPUT_TEXT_SELECTION_CHANGE;
245         case NODE_TEXT_INPUT_ON_EDIT_CHANGE:
246             return ON_TEXT_INPUT_EDIT_CHANGE;
247         case NODE_TEXT_INPUT_ON_CONTENT_SIZE_CHANGE:
248             return ON_TEXT_INPUT_CONTENT_SIZE_CHANGE;
249         case NODE_TEXT_INPUT_ON_INPUT_FILTER_ERROR:
250             return ON_TEXT_INPUT_INPUT_FILTER_ERROR;
251         case NODE_TEXT_INPUT_ON_CONTENT_SCROLL:
252             return ON_TEXT_INPUT_CONTENT_SCROLL;
253         case NODE_TEXT_AREA_ON_INPUT_FILTER_ERROR:
254             return ON_TEXT_AREA_INPUT_FILTER_ERROR;
255         case NODE_TEXT_INPUT_ON_WILL_INSERT:
256             return ON_TEXT_INPUT_WILL_INSERT;
257         case NODE_TEXT_INPUT_ON_DID_INSERT:
258             return ON_TEXT_INPUT_DID_INSERT;
259         case NODE_TEXT_INPUT_ON_WILL_DELETE:
260             return ON_TEXT_INPUT_WILL_DELETE;
261         case NODE_TEXT_INPUT_ON_DID_DELETE:
262             return ON_TEXT_INPUT_DID_DELETE;
263         case NODE_TEXT_AREA_ON_EDIT_CHANGE:
264             return ON_TEXTAREA_EDIT_CHANGE;
265         case NODE_TEXT_AREA_ON_SUBMIT:
266             return ON_TEXTAREA_ON_SUBMIT;
267         case NODE_TEXT_AREA_ON_CONTENT_SIZE_CHANGE:
268             return ON_TEXTAREA_CONTENT_SIZE_CHANGE;
269         case NODE_TEXT_AREA_ON_PASTE:
270             return ON_TEXTAREA_PASTE;
271         case NODE_TEXT_AREA_ON_TEXT_SELECTION_CHANGE:
272             return ON_TEXTAREA_TEXT_SELECTION_CHANGE;
273         case NODE_TEXT_AREA_ON_CONTENT_SCROLL:
274             return ON_TEXT_AREA_CONTENT_SCROLL;
275         case NODE_TEXT_AREA_ON_WILL_INSERT:
276             return ON_TEXT_AREA_WILL_INSERT;
277         case NODE_TEXT_AREA_ON_DID_INSERT:
278             return ON_TEXT_AREA_DID_INSERT;
279         case NODE_TEXT_AREA_ON_WILL_DELETE:
280             return ON_TEXT_AREA_WILL_DELETE;
281         case NODE_TEXT_AREA_ON_DID_DELETE:
282             return ON_TEXT_AREA_DID_DELETE;
283         case NODE_SWIPER_EVENT_ON_CHANGE:
284             return ON_SWIPER_CHANGE;
285         case NODE_SWIPER_EVENT_ON_ANIMATION_START:
286             return ON_SWIPER_ANIMATION_START;
287         case NODE_SWIPER_EVENT_ON_ANIMATION_END:
288             return ON_SWIPER_ANIMATION_END;
289         case NODE_SWIPER_EVENT_ON_GESTURE_SWIPE:
290             return ON_SWIPER_GESTURE_SWIPE;
291         case NODE_ON_WILL_SCROLL:
292             return ON_WATER_FLOW_WILL_SCROLL;
293         case NODE_ON_TOUCH_INTERCEPT:
294             return ON_TOUCH_INTERCEPT;
295         case NODE_EVENT_ON_VISIBLE_AREA_CHANGE:
296             return ON_VISIBLE_AREA_CHANGE;
297         case NODE_ON_HOVER:
298             return ON_HOVER;
299         case NODE_ON_HOVER_MOVE:
300             return ON_HOVER_MOVE;
301         case NODE_ON_MOUSE:
302             return ON_MOUSE;
303         case NODE_SCROLL_EVENT_ON_REACH_START:
304             if (arkUINodeType == ARKUI_NODE_LIST) {
305                 return ON_LIST_REACH_START;
306             } else if (arkUINodeType == ARKUI_NODE_WATER_FLOW) {
307                 return ON_WATER_FLOW_REACH_START;
308             }
309             return ON_SCROLL_REACH_START;
310         case NODE_SCROLL_EVENT_ON_REACH_END:
311             if (arkUINodeType == ARKUI_NODE_LIST) {
312                 return ON_LIST_REACH_END;
313             } else if (arkUINodeType == ARKUI_NODE_WATER_FLOW) {
314                 return ON_WATER_FLOW_REACH_END;
315             }
316             return ON_SCROLL_REACH_END;
317         case NODE_WATER_FLOW_ON_DID_SCROLL:
318             return ON_WATER_FLOW_DID_SCROLL;
319         case NODE_LIST_ON_SCROLL_INDEX:
320             return ON_LIST_SCROLL_INDEX;
321         case NODE_LIST_ON_SCROLL_VISIBLE_CONTENT_CHANGE:
322             return ON_LIST_SCROLL_VISIBLE_CONTENT_CHANGE;
323         case NODE_WATER_FLOW_ON_SCROLL_INDEX:
324             return ON_WATER_FLOW_SCROLL_INDEX;
325         case NODE_TEXT_ON_DETECT_RESULT_UPDATE:
326             return ON_DETECT_RESULT_UPDATE;
327         case NODE_RADIO_EVENT_ON_CHANGE:
328             return ON_RADIO_CHANGE;
329         case NODE_LIST_ON_DID_SCROLL:
330             return ON_LIST_DID_SCROLL;
331         case NODE_EVENT_ON_ATTACH:
332             return ON_ATTACH;
333         case NODE_EVENT_ON_DETACH:
334             return ON_DETACH;
335         case NODE_LIST_ON_WILL_SCROLL:
336             return ON_LIST_WILL_SCROLL;
337         case NODE_SWIPER_EVENT_ON_CONTENT_DID_SCROLL:
338             return ON_SWIPER_DID_CONTENT_SCROLL;
339         case NODE_SWIPER_EVENT_ON_CONTENT_WILL_SCROLL:
340             return ON_SWIPER_CONTENT_WILL_SCROLL;
341         case NODE_ON_ACCESSIBILITY_ACTIONS:
342             return ON_ACCESSIBILITY_ACTIONS;
343         case NODE_REFRESH_ON_OFFSET_CHANGE:
344             return ON_REFRESH_ON_OFFSET_CHANGE;
345         case NODE_IMAGE_ANIMATOR_EVENT_ON_START:
346             return ON_IMAGE_ANIMATOR_ON_START;
347         case NODE_IMAGE_ANIMATOR_EVENT_ON_CANCEL:
348             return ON_IMAGE_ANIMATOR_ON_CANCEL;
349         case NODE_IMAGE_ANIMATOR_EVENT_ON_PAUSE:
350             return ON_IMAGE_ANIMATOR_ON_PAUSE;
351         case NODE_IMAGE_ANIMATOR_EVENT_ON_REPEAT:
352             return ON_IMAGE_ANIMATOR_ON_REPEAT;
353         case NODE_IMAGE_ANIMATOR_EVENT_ON_FINISH:
354             return ON_IMAGE_ANIMATOR_ON_FINISH;
355         case NODE_ON_FOCUS_AXIS:
356             return ON_FOCUS_AXIS;
357         case NODE_TEXT_INPUT_ON_CHANGE_WITH_PREVIEW_TEXT:
358             return ON_TEXT_INPUT_CHANGE_WITH_PREVIEW_TEXT;
359         case NODE_TEXT_AREA_ON_CHANGE_WITH_PREVIEW_TEXT:
360             return ON_TEXT_AREA_CHANGE_WITH_PREVIEW_TEXT;
361         case NODE_CHECKBOX_GROUP_EVENT_ON_CHANGE:
362             return ON_CHECKBOX_GROUP_CHANGE;
363         default:
364             return -1;
365     }
366 }
367 
ConvertToNodeEventType(ArkUIEventSubKind type)368 ArkUI_Int32 ConvertToNodeEventType(ArkUIEventSubKind type)
369 {
370     switch (type) {
371         case ON_TEXT_INPUT_CHANGE:
372             return NODE_TEXT_INPUT_ON_CHANGE;
373         case ON_SCROLL:
374             return NODE_SCROLL_EVENT_ON_SCROLL;
375         case ON_SCROLL_FRAME_BEGIN:
376             return NODE_SCROLL_EVENT_ON_SCROLL_FRAME_BEGIN;
377         case ON_SCROLL_WILL_SCROLL:
378             return NODE_SCROLL_EVENT_ON_WILL_SCROLL;
379         case ON_SCROLL_DID_SCROLL:
380             return NODE_SCROLL_EVENT_ON_DID_SCROLL;
381         case ON_SCROLL_START:
382             return NODE_SCROLL_EVENT_ON_SCROLL_START;
383         case ON_SCROLL_STOP:
384             return NODE_SCROLL_EVENT_ON_SCROLL_STOP;
385         case ON_APPEAR:
386             return NODE_EVENT_ON_APPEAR;
387         case ON_DISAPPEAR:
388             return NODE_EVENT_ON_DISAPPEAR;
389         case ON_AREA_CHANGE:
390             return NODE_EVENT_ON_AREA_CHANGE;
391         case ON_TEXTAREA_CHANGE:
392             return NODE_TEXT_AREA_ON_CHANGE;
393         case ON_FOCUS:
394             return NODE_ON_FOCUS;
395         case ON_BLUR:
396             return NODE_ON_BLUR;
397         case ON_TEXT_INPUT_SUBMIT:
398             return NODE_TEXT_INPUT_ON_SUBMIT;
399         case ON_REFRESH_STATE_CHANGE:
400             return NODE_REFRESH_STATE_CHANGE;
401         case ON_REFRESH_REFRESHING:
402             return NODE_REFRESH_ON_REFRESH;
403         case ON_SCROLL_EDGE:
404             return NODE_SCROLL_EVENT_ON_SCROLL_EDGE;
405         case ON_TOGGLE_CHANGE:
406             return NODE_TOGGLE_ON_CHANGE;
407         case ON_IMAGE_COMPLETE:
408             return NODE_IMAGE_ON_COMPLETE;
409         case ON_IMAGE_ERROR:
410             return NODE_IMAGE_ON_ERROR;
411         case ON_IMAGE_SVG_PLAY_FINISH:
412             return NODE_IMAGE_ON_SVG_PLAY_FINISH;
413         case ON_IMAGE_DOWNLOAD_PROGRESS:
414             return NODE_IMAGE_ON_DOWNLOAD_PROGRESS;
415         case ON_TEXT_PICKER_CHANGE:
416             return NODE_TEXT_PICKER_EVENT_ON_CHANGE;
417         case ON_TEXT_PICKER_SCROLL_STOP:
418             return NODE_TEXT_PICKER_EVENT_ON_SCROLL_STOP;
419         case ON_DATE_PICKER_DATE_CHANGE:
420             return NODE_DATE_PICKER_EVENT_ON_DATE_CHANGE;
421         case ON_TIME_PICKER_CHANGE:
422             return NODE_TIME_PICKER_EVENT_ON_CHANGE;
423         case ON_CALENDAR_PICKER_CHANGE:
424             return NODE_CALENDAR_PICKER_EVENT_ON_CHANGE;
425         case ON_TOUCH:
426             return NODE_TOUCH_EVENT;
427         case ON_CLICK:
428             return NODE_ON_CLICK;
429         case ON_DRAG_START:
430             return NODE_ON_DRAG_START;
431         case ON_DRAG_ENTER:
432             return NODE_ON_DRAG_ENTER;
433         case ON_DRAG_DROP:
434             return NODE_ON_DROP;
435         case ON_DRAG_MOVE:
436             return NODE_ON_DRAG_MOVE;
437         case ON_DRAG_LEAVE:
438             return NODE_ON_DRAG_LEAVE;
439         case ON_DRAG_END:
440             return NODE_ON_DRAG_END;
441         case ON_PRE_DRAG:
442             return NODE_ON_PRE_DRAG;
443         case ON_KEY_EVENT:
444             return NODE_ON_KEY_EVENT;
445         case ON_KEY_PREIME:
446             return NODE_ON_KEY_PRE_IME;
447         case ON_KEY_DISPATCH:
448             return NODE_DISPATCH_KEY_EVENT;
449         case ON_CHECKBOX_CHANGE:
450             return NODE_CHECKBOX_EVENT_ON_CHANGE;
451         case ON_SLIDER_CHANGE:
452             return NODE_SLIDER_EVENT_ON_CHANGE;
453         case ON_TEXT_INPUT_CUT:
454             return NODE_TEXT_INPUT_ON_CUT;
455         case ON_TEXT_INPUT_PASTE:
456             return NODE_TEXT_INPUT_ON_PASTE;
457         case ON_TEXT_INPUT_TEXT_SELECTION_CHANGE:
458             return NODE_TEXT_INPUT_ON_TEXT_SELECTION_CHANGE;
459         case ON_TEXT_INPUT_EDIT_CHANGE:
460             return NODE_TEXT_INPUT_ON_EDIT_CHANGE;
461         case ON_TEXT_INPUT_CONTENT_SIZE_CHANGE:
462             return NODE_TEXT_INPUT_ON_CONTENT_SIZE_CHANGE;
463         case ON_TEXT_INPUT_INPUT_FILTER_ERROR:
464             return NODE_TEXT_INPUT_ON_INPUT_FILTER_ERROR;
465         case ON_TEXT_INPUT_CONTENT_SCROLL:
466             return NODE_TEXT_INPUT_ON_CONTENT_SCROLL;
467         case ON_TEXT_AREA_INPUT_FILTER_ERROR:
468             return NODE_TEXT_AREA_ON_INPUT_FILTER_ERROR;
469         case ON_TEXT_INPUT_WILL_INSERT:
470             return NODE_TEXT_INPUT_ON_WILL_INSERT;
471         case ON_TEXT_INPUT_DID_INSERT:
472             return NODE_TEXT_INPUT_ON_DID_INSERT;
473         case ON_TEXT_INPUT_WILL_DELETE:
474             return NODE_TEXT_INPUT_ON_WILL_DELETE;
475         case ON_TEXT_INPUT_DID_DELETE:
476             return NODE_TEXT_INPUT_ON_DID_DELETE;
477         case ON_TEXTAREA_EDIT_CHANGE:
478             return NODE_TEXT_AREA_ON_EDIT_CHANGE;
479         case ON_TEXTAREA_ON_SUBMIT:
480             return NODE_TEXT_AREA_ON_SUBMIT;
481         case ON_TEXTAREA_CONTENT_SIZE_CHANGE:
482             return NODE_TEXT_AREA_ON_CONTENT_SIZE_CHANGE;
483         case ON_TEXTAREA_PASTE:
484             return NODE_TEXT_AREA_ON_PASTE;
485         case ON_TEXTAREA_TEXT_SELECTION_CHANGE:
486             return NODE_TEXT_AREA_ON_TEXT_SELECTION_CHANGE;
487         case ON_TEXT_AREA_CONTENT_SCROLL:
488             return NODE_TEXT_AREA_ON_CONTENT_SCROLL;
489         case ON_TEXT_AREA_WILL_INSERT:
490             return NODE_TEXT_AREA_ON_WILL_INSERT;
491         case ON_TEXT_AREA_DID_INSERT:
492             return NODE_TEXT_AREA_ON_DID_INSERT;
493         case ON_TEXT_AREA_WILL_DELETE:
494             return NODE_TEXT_AREA_ON_WILL_DELETE;
495         case ON_TEXT_AREA_DID_DELETE:
496             return NODE_TEXT_AREA_ON_DID_DELETE;
497         case ON_SWIPER_CHANGE:
498             return NODE_SWIPER_EVENT_ON_CHANGE;
499         case ON_SWIPER_ANIMATION_START:
500             return NODE_SWIPER_EVENT_ON_ANIMATION_START;
501         case ON_SWIPER_ANIMATION_END:
502             return NODE_SWIPER_EVENT_ON_ANIMATION_END;
503         case ON_SWIPER_GESTURE_SWIPE:
504             return NODE_SWIPER_EVENT_ON_GESTURE_SWIPE;
505         case ON_LIST_SCROLL:
506             return NODE_SCROLL_EVENT_ON_SCROLL;
507         case ON_LIST_SCROLL_FRAME_BEGIN:
508             return NODE_SCROLL_EVENT_ON_SCROLL_FRAME_BEGIN;
509         case ON_LIST_SCROLL_START:
510             return NODE_SCROLL_EVENT_ON_SCROLL_START;
511         case ON_LIST_WILL_SCROLL:
512             return NODE_LIST_ON_WILL_SCROLL;
513         case ON_LIST_SCROLL_STOP:
514             return NODE_SCROLL_EVENT_ON_SCROLL_STOP;
515         case ON_WATER_FLOW_WILL_SCROLL:
516             return NODE_ON_WILL_SCROLL;
517         case ON_TOUCH_INTERCEPT:
518             return NODE_ON_TOUCH_INTERCEPT;
519         case ON_VISIBLE_AREA_CHANGE:
520             return NODE_EVENT_ON_VISIBLE_AREA_CHANGE;
521         case ON_HOVER:
522             return NODE_ON_HOVER;
523         case ON_HOVER_MOVE:
524             return NODE_ON_HOVER_MOVE;
525         case ON_MOUSE:
526             return NODE_ON_MOUSE;
527         case ON_LIST_REACH_END:
528             return NODE_SCROLL_EVENT_ON_REACH_END;
529         case ON_LIST_SCROLL_VISIBLE_CONTENT_CHANGE:
530             return NODE_LIST_ON_SCROLL_VISIBLE_CONTENT_CHANGE;
531         case ON_WATER_FLOW_REACH_END:
532             return NODE_SCROLL_EVENT_ON_REACH_END;
533         case ON_SCROLL_REACH_END:
534             return NODE_SCROLL_EVENT_ON_REACH_END;
535         case ON_WATER_FLOW_DID_SCROLL:
536             return NODE_WATER_FLOW_ON_DID_SCROLL;
537         case ON_WATER_FLOW_SCROLL_FRAME_BEGIN:
538             return NODE_SCROLL_EVENT_ON_SCROLL_FRAME_BEGIN;
539         case ON_WATER_FLOW_SCROLL_START:
540             return NODE_SCROLL_EVENT_ON_SCROLL_START;
541         case ON_WATER_FLOW_SCROLL_STOP:
542             return NODE_SCROLL_EVENT_ON_SCROLL_STOP;
543         case ON_LIST_SCROLL_INDEX:
544             return NODE_LIST_ON_SCROLL_INDEX;
545         case ON_LIST_DID_SCROLL:
546             return NODE_LIST_ON_DID_SCROLL;
547         case ON_WATER_FLOW_SCROLL_INDEX:
548             return NODE_WATER_FLOW_ON_SCROLL_INDEX;
549         case ON_WATER_FLOW_REACH_START:
550             return NODE_SCROLL_EVENT_ON_REACH_START;
551         case ON_SCROLL_REACH_START:
552             return NODE_SCROLL_EVENT_ON_REACH_START;
553         case ON_LIST_REACH_START:
554             return NODE_SCROLL_EVENT_ON_REACH_START;
555         case ON_DETECT_RESULT_UPDATE:
556             return NODE_TEXT_ON_DETECT_RESULT_UPDATE;
557         case ON_ATTACH:
558             return NODE_EVENT_ON_ATTACH;
559         case ON_DETACH:
560             return NODE_EVENT_ON_DETACH;
561         case ON_RADIO_CHANGE:
562             return NODE_RADIO_EVENT_ON_CHANGE;
563         case ON_SWIPER_DID_CONTENT_SCROLL:
564             return NODE_SWIPER_EVENT_ON_CONTENT_DID_SCROLL;
565         case ON_SWIPER_CONTENT_WILL_SCROLL:
566             return NODE_SWIPER_EVENT_ON_CONTENT_WILL_SCROLL;
567         case ON_ACCESSIBILITY_ACTIONS:
568             return NODE_ON_ACCESSIBILITY_ACTIONS;
569         case ON_REFRESH_ON_OFFSET_CHANGE:
570             return NODE_REFRESH_ON_OFFSET_CHANGE;
571         case ON_IMAGE_ANIMATOR_ON_START:
572             return NODE_IMAGE_ANIMATOR_EVENT_ON_START;
573         case ON_IMAGE_ANIMATOR_ON_PAUSE:
574             return NODE_IMAGE_ANIMATOR_EVENT_ON_PAUSE;
575         case ON_IMAGE_ANIMATOR_ON_REPEAT:
576             return NODE_IMAGE_ANIMATOR_EVENT_ON_REPEAT;
577         case ON_IMAGE_ANIMATOR_ON_CANCEL:
578             return NODE_IMAGE_ANIMATOR_EVENT_ON_CANCEL;
579         case ON_IMAGE_ANIMATOR_ON_FINISH:
580             return NODE_IMAGE_ANIMATOR_EVENT_ON_FINISH;
581         case ON_FOCUS_AXIS:
582             return NODE_ON_FOCUS_AXIS;
583         case ON_TEXT_INPUT_CHANGE_WITH_PREVIEW_TEXT:
584             return NODE_TEXT_INPUT_ON_CHANGE_WITH_PREVIEW_TEXT;
585         case ON_TEXT_AREA_CHANGE_WITH_PREVIEW_TEXT:
586             return NODE_TEXT_AREA_ON_CHANGE_WITH_PREVIEW_TEXT;
587         case ON_CHECKBOX_GROUP_CHANGE:
588             return NODE_CHECKBOX_GROUP_EVENT_ON_CHANGE;
589         default:
590             return -1;
591     }
592 }
593 
IsStringEvent(ArkUI_Int32 type)594 bool IsStringEvent(ArkUI_Int32 type)
595 {
596     switch (type) {
597         case NODE_TEXT_INPUT_ON_CHANGE:
598         case NODE_TEXT_INPUT_ON_CUT:
599         case NODE_TEXT_INPUT_ON_PASTE:
600         case NODE_TEXT_AREA_ON_CHANGE:
601         case NODE_TEXT_AREA_ON_PASTE:
602             return true;
603         default:
604             return false;
605     }
606 }
607 
IsTouchEvent(ArkUI_Int32 type)608 bool IsTouchEvent(ArkUI_Int32 type)
609 {
610     switch (type) {
611         case NODE_TOUCH_EVENT:
612         case NODE_ON_TOUCH_INTERCEPT:
613             return true;
614         default:
615             return false;
616     }
617 }
618 
ConvertEvent(ArkUINodeEvent * origin,ArkUI_NodeEvent * event)619 bool ConvertEvent(ArkUINodeEvent* origin, ArkUI_NodeEvent* event)
620 {
621     ArkUIEventCategory eventCategory = static_cast<ArkUIEventCategory>(origin->kind);
622     switch (eventCategory) {
623         case COMPONENT_ASYNC_EVENT: {
624             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_COMPONENT_EVENT);
625             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->componentAsyncEvent.subKind);
626             event->kind = ConvertToNodeEventType(subKind);
627             return true;
628         }
629         case TEXT_INPUT: {
630             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_STRING_ASYNC_EVENT);
631             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->textInputEvent.subKind);
632             event->kind = ConvertToNodeEventType(subKind);
633             return true;
634         }
635         case TOUCH_EVENT: {
636             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_INPUT_EVENT);
637             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->touchEvent.subKind);
638             event->kind = ConvertToNodeEventType(subKind);
639             return true;
640         }
641         case MOUSE_INPUT_EVENT: {
642             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_INPUT_EVENT);
643             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->mouseEvent.subKind);
644             event->kind = ConvertToNodeEventType(subKind);
645             return true;
646         }
647         case MIXED_EVENT: {
648             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_MIXED_EVENT);
649             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->mixedEvent.subKind);
650             event->kind = ConvertToNodeEventType(subKind);
651             return true;
652         }
653         case DRAG_EVENT: {
654             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_COMPONENT_EVENT);
655             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->dragEvent.subKind);
656             event->kind = ConvertToNodeEventType(subKind);
657             return true;
658         }
659         case KEY_INPUT_EVENT: {
660             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_INPUT_EVENT);
661             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->keyEvent.subKind);
662             event->kind = ConvertToNodeEventType(subKind);
663             return true;
664         }
665         case TEXT_INPUT_CHANGE: {
666             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_STRING_ASYNC_EVENT);
667             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->textChangeEvent.subKind);
668             event->kind = ConvertToNodeEventType(subKind);
669             return true;
670         }
671         case FOCUS_AXIS_EVENT: {
672             event->category = static_cast<int32_t>(NODE_EVENT_CATEGORY_INPUT_EVENT);
673             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->focusAxisEvent.subKind);
674             event->kind = ConvertToNodeEventType(subKind);
675             return true;
676         }
677         default:
678             TAG_LOGE(AceLogTag::ACE_NATIVE_NODE, "failed to convert origin event data");
679             break;
680     }
681     return false;
682 }
683 
HandleInnerEvent(ArkUINodeEvent * innerEvent)684 void HandleInnerEvent(ArkUINodeEvent* innerEvent)
685 {
686     switch (innerEvent->kind) {
687         case ArkUIEventCategory::GESTURE_ASYNC_EVENT: {
688             // handle gesture event.
689             OHOS::Ace::GestureModel::HandleGestureEvent(innerEvent);
690             break;
691         }
692         default: {
693             OHOS::Ace::NodeModel::HandleInnerNodeEvent(innerEvent);
694             break;
695         }
696     }
697 }
698 
ConvertToCTouchActionType(int32_t originActionType)699 int32_t ConvertToCTouchActionType(int32_t originActionType)
700 {
701     switch (originActionType) {
702         case ORIGIN_TOUCH_ACTION_DOWN:
703             return static_cast<int32_t>(UI_TOUCH_EVENT_ACTION_DOWN);
704         case ORIGIN_TOUCH_ACTION_UP:
705             return static_cast<int32_t>(UI_TOUCH_EVENT_ACTION_UP);
706         case ORIGIN_TOUCH_ACTION_MOVE:
707             return static_cast<int32_t>(UI_TOUCH_EVENT_ACTION_MOVE);
708         case ORIGIN_TOUCH_ACTION_CANCEL:
709             return static_cast<int32_t>(UI_TOUCH_EVENT_ACTION_CANCEL);
710         default:
711             break;
712     }
713     return -1;
714 }
715 
ConvertToOriginTouchActionType(int32_t actionType)716 int32_t ConvertToOriginTouchActionType(int32_t actionType)
717 {
718     switch (actionType) {
719         case UI_TOUCH_EVENT_ACTION_DOWN:
720             return static_cast<int32_t>(ORIGIN_TOUCH_ACTION_DOWN);
721         case UI_TOUCH_EVENT_ACTION_UP:
722             return static_cast<int32_t>(ORIGIN_TOUCH_ACTION_UP);
723         case UI_TOUCH_EVENT_ACTION_MOVE:
724             return static_cast<int32_t>(ORIGIN_TOUCH_ACTION_MOVE);
725         case UI_TOUCH_EVENT_ACTION_CANCEL:
726             return static_cast<int32_t>(ORIGIN_TOUCH_ACTION_CANCEL);
727         default:
728             break;
729     }
730     return -1;
731 }
732 
ConvertToCInputEventToolType(int32_t originSourceToolType)733 int32_t ConvertToCInputEventToolType(int32_t originSourceToolType)
734 {
735     switch (originSourceToolType) {
736         case ORIGIN_INPUT_EVENT_TOOL_TYPE_FINGER:
737             return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_FINGER);
738         case ORIGIN_INPUT_EVENT_TOOL_TYPE_PEN:
739             return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_PEN);
740         case ORIGIN_INPUT_EVENT_TOOL_TYPE_MOUSE:
741             return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_MOUSE);
742         case ORIGIN_INPUT_EVENT_TOOL_TYPE_TOUCHPAD:
743             return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_TOUCHPAD);
744         case ORIGIN_INPUT_EVENT_TOOL_TYPE_JOYSTICK:
745             return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_JOYSTICK);
746         default:
747             break;
748     }
749     return static_cast<int32_t>(UI_INPUT_EVENT_TOOL_TYPE_UNKNOWN);
750 }
751 
ConvertToCMouseActionType(int32_t originActionType)752 int32_t ConvertToCMouseActionType(int32_t originActionType)
753 {
754     switch (originActionType) {
755         case ORIGIN_MOUSE_ACTION_PRESS:
756             return static_cast<int32_t>(UI_MOUSE_EVENT_ACTION_PRESS);
757         case ORIGIN_MOUSE_ACTION_RELEASE:
758             return static_cast<int32_t>(UI_MOUSE_EVENT_ACTION_RELEASE);
759         case ORIGIN_MOUSE_ACTION_MOVE:
760             return static_cast<int32_t>(UI_MOUSE_EVENT_ACTION_MOVE);
761         default:
762             break;
763     }
764     return static_cast<int32_t>(UI_MOUSE_EVENT_ACTION_UNKNOWN);
765 }
766 
ConvertToCMouseEventButtonType(int32_t originButtonType)767 int32_t ConvertToCMouseEventButtonType(int32_t originButtonType)
768 {
769     switch (originButtonType) {
770         case ORIGIN_MOUSE_BUTTON_LEFT:
771             return static_cast<int32_t>(UI_MOUSE_EVENT_BUTTON_LEFT);
772         case ORIGIN_MOUSE_BUTTON_RIGHT:
773             return static_cast<int32_t>(UI_MOUSE_EVENT_BUTTON_RIGHT);
774         case ORIGIN_MOUSE_BUTTON_MIDDLE:
775             return static_cast<int32_t>(UI_MOUSE_EVENT_BUTTON_MIDDLE);
776         case ORIGIN_MOUSE_BUTTON_BACK:
777             return static_cast<int32_t>(UI_MOUSE_EVENT_BUTTON_BACK);
778         case ORIGIN_MOUSE_BUTTON_FORWARD:
779             return static_cast<int32_t>(UI_MOUSE_EVENT_BUTTON_FORWARD);
780         default:
781             break;
782     }
783     return static_cast<int32_t>(UI_MOUSE_EVENT_BUTTON_NONE);
784 }
785 
ConvertToCAxisActionType(int32_t originActionType)786 int32_t ConvertToCAxisActionType(int32_t originActionType)
787 {
788     switch (originActionType) {
789         case ORIGIN_AXIS_ACTION_NONE:
790             return static_cast<int32_t>(UI_AXIS_EVENT_ACTION_NONE);
791         case ORIGIN_AXIS_ACTION_BEGIN:
792             return static_cast<int32_t>(UI_AXIS_EVENT_ACTION_BEGIN);
793         case ORIGIN_AXIS_ACTION_UPDATE:
794             return static_cast<int32_t>(UI_AXIS_EVENT_ACTION_UPDATE);
795         case ORIGIN_AXIS_ACTION_END:
796             return static_cast<int32_t>(UI_AXIS_EVENT_ACTION_END);
797         case ORIGIN_AXIS_ACTION_CANCEL:
798             return static_cast<int32_t>(UI_AXIS_EVENT_ACTION_CANCEL);
799         default:
800             break;
801     }
802     return static_cast<int32_t>(UI_AXIS_EVENT_ACTION_NONE);
803 }
804 
ConvertEvent(ArkUINodeEvent * origin,ArkUI_CompatibleNodeEvent * event)805 bool ConvertEvent(ArkUINodeEvent* origin, ArkUI_CompatibleNodeEvent* event)
806 {
807     ArkUIEventCategory eventCategory = static_cast<ArkUIEventCategory>(origin->kind);
808     switch (eventCategory) {
809         case COMPONENT_ASYNC_EVENT: {
810             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->componentAsyncEvent.subKind);
811             event->kind = ConvertToNodeEventType(subKind);
812             if (memcpy_sp(event->componentEvent.data, MAX_COMPONENT_EVENT_ARG_NUM * sizeof(ArkUI_NumberValue),
813                 origin->componentAsyncEvent.data, MAX_COMPONENT_EVENT_ARG_NUM * sizeof(ArkUI_NumberValue)) != 0) {
814                 TAG_LOGE(AceLogTag::ACE_NATIVE_NODE, "fail to convert origin event data");
815                 return false;
816             }
817             return true;
818         }
819         case TEXT_INPUT: {
820             ArkUIEventSubKind subKind = static_cast<ArkUIEventSubKind>(origin->textInputEvent.subKind);
821             event->kind = ConvertToNodeEventType(subKind);
822             event->stringEvent.pStr = reinterpret_cast<ArkUI_CharPtr>(origin->textInputEvent.nativeStringPtr);
823             return true;
824         }
825         case TOUCH_EVENT:
826             event->kind = ConvertToNodeEventType(ON_TOUCH);
827             ConvertToTouchEvent(origin->touchEvent, event->touchEvent);
828             return true;
829         default:
830             TAG_LOGE(AceLogTag::ACE_NATIVE_NODE, "failed to convert origin event data");
831             return false;
832     }
833 
834     return true;
835 }
836 
ConvertEventResult(ArkUI_CompatibleNodeEvent * event,ArkUINodeEvent * origin)837 bool ConvertEventResult(ArkUI_CompatibleNodeEvent* event, ArkUINodeEvent* origin)
838 {
839     if (IsTouchEvent(event->kind)) {
840         origin->touchEvent.preventDefault = event->touchEvent.preventDefault;
841         origin->touchEvent.stopPropagation = event->touchEvent.stopPropagation;
842         return true;
843     }
844     if (!IsStringEvent(event->kind)) {
845         if (memcpy_sp(origin->componentAsyncEvent.data, MAX_COMPONENT_EVENT_ARG_NUM * sizeof(ArkUI_NumberValue),
846             event->componentEvent.data, MAX_COMPONENT_EVENT_ARG_NUM * sizeof(ArkUI_NumberValue)) != 0) {
847             TAG_LOGE(AceLogTag::ACE_NATIVE_NODE, "fail to convert event result data");
848             return false;
849         }
850     }
851     return true;
852 }
853 
854 }; // namespace OHOS::Ace::NodeModel
855 
856 #ifdef __cplusplus
857 extern "C" {
858 #endif
859 
OH_ArkUI_NodeEvent_GetEventType(ArkUI_NodeEvent * event)860 ArkUI_NodeEventType OH_ArkUI_NodeEvent_GetEventType(ArkUI_NodeEvent* event)
861 {
862     if (!event || event->kind < 0) {
863         return ArkUI_NodeEventType::NODE_TOUCH_EVENT;
864     }
865     return static_cast<ArkUI_NodeEventType>(event->kind);
866 }
867 
OH_ArkUI_NodeEvent_GetTargetId(ArkUI_NodeEvent * event)868 int32_t OH_ArkUI_NodeEvent_GetTargetId(ArkUI_NodeEvent* event)
869 {
870     if (!event) {
871         return -1;
872     }
873     return event->eventId;
874 }
875 
OH_ArkUI_NodeEvent_GetNodeHandle(ArkUI_NodeEvent * event)876 ArkUI_NodeHandle OH_ArkUI_NodeEvent_GetNodeHandle(ArkUI_NodeEvent* event)
877 {
878     if (!event) {
879         return nullptr;
880     }
881     return reinterpret_cast<ArkUI_NodeHandle>(event->node);
882 }
883 
OH_ArkUI_NodeEvent_GetInputEvent(ArkUI_NodeEvent * event)884 ArkUI_UIInputEvent* OH_ArkUI_NodeEvent_GetInputEvent(ArkUI_NodeEvent* event)
885 {
886     if (!event || event->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_INPUT_EVENT)) {
887         return nullptr;
888     }
889     return reinterpret_cast<ArkUI_UIInputEvent*>(event->origin);
890 }
891 
OH_ArkUI_NodeEvent_GetNodeComponentEvent(ArkUI_NodeEvent * event)892 ArkUI_NodeComponentEvent* OH_ArkUI_NodeEvent_GetNodeComponentEvent(ArkUI_NodeEvent* event)
893 {
894     if (!event || event->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_COMPONENT_EVENT)) {
895         return nullptr;
896     }
897     const auto* originNodeEvent = reinterpret_cast<ArkUINodeEvent*>(event->origin);
898     if (!originNodeEvent) {
899         return nullptr;
900     }
901     return const_cast<ArkUI_NodeComponentEvent*>(
902         reinterpret_cast<const ArkUI_NodeComponentEvent*>(&(originNodeEvent->componentAsyncEvent)));
903 }
904 
OH_ArkUI_NodeEvent_GetStringAsyncEvent(ArkUI_NodeEvent * event)905 ArkUI_StringAsyncEvent* OH_ArkUI_NodeEvent_GetStringAsyncEvent(ArkUI_NodeEvent* event)
906 {
907     if (!event || event->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_STRING_ASYNC_EVENT)) {
908         return nullptr;
909     }
910     const auto* originNodeEvent = reinterpret_cast<ArkUINodeEvent*>(event->origin);
911     if (!originNodeEvent) {
912         return nullptr;
913     }
914     return const_cast<ArkUI_StringAsyncEvent*>(
915         reinterpret_cast<const ArkUI_StringAsyncEvent*>(&(originNodeEvent->textInputEvent)));
916 }
917 
OH_ArkUI_NodeEvent_GetTextChangeEvent(ArkUI_NodeEvent * event)918 ArkUI_TextChangeEvent* OH_ArkUI_NodeEvent_GetTextChangeEvent(ArkUI_NodeEvent* event)
919 {
920     if (!event || event->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_STRING_ASYNC_EVENT)) {
921         return nullptr;
922     }
923     const auto* originNodeEvent = reinterpret_cast<ArkUINodeEvent*>(event->origin);
924     if (!originNodeEvent) {
925         return nullptr;
926     }
927     return const_cast<ArkUI_TextChangeEvent*>(
928         reinterpret_cast<const ArkUI_TextChangeEvent*>(&(originNodeEvent->textChangeEvent)));
929 }
930 
OH_ArkUI_NodeEvent_GetUserData(ArkUI_NodeEvent * event)931 void* OH_ArkUI_NodeEvent_GetUserData(ArkUI_NodeEvent* event)
932 {
933     if (!event) {
934         return nullptr;
935     }
936     return event->userData;
937 }
938 
OH_ArkUI_NodeEvent_GetNumberValue(ArkUI_NodeEvent * event,int32_t index,ArkUI_NumberValue * value)939 int32_t OH_ArkUI_NodeEvent_GetNumberValue(ArkUI_NodeEvent* event, int32_t index, ArkUI_NumberValue* value)
940 {
941     if (!event || event->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_MIXED_EVENT)) {
942         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
943     }
944     const auto* originNodeEvent = reinterpret_cast<ArkUINodeEvent*>(event->origin);
945     if (!originNodeEvent) {
946         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
947     }
948     auto mixedData = reinterpret_cast<const ArkUIMixedEvent*>(&(originNodeEvent->mixedEvent));
949     if (index > mixedData->numberDataLength || index < 0) {
950         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INDEX_OUT_OF_RANGE;
951     }
952     if (index > 1) {
953         value[index].i32 = mixedData->numberData[index].i32;
954     } else {
955         value[index].f32 = mixedData->numberData[index].f32;
956     }
957     return OHOS::Ace::ERROR_CODE_NO_ERROR;
958 }
959 
OH_ArkUI_NodeEvent_GetStringValue(ArkUI_NodeEvent * event,int32_t index,char ** string,int32_t * stringSize)960 int32_t OH_ArkUI_NodeEvent_GetStringValue(
961     ArkUI_NodeEvent* event, int32_t index, char** string, int32_t* stringSize)
962 {
963     if (!event || event->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_MIXED_EVENT)) {
964         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
965     }
966     const auto* originNodeEvent = reinterpret_cast<ArkUINodeEvent*>(event->origin);
967     if (!originNodeEvent) {
968         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
969     }
970     auto mixedData = reinterpret_cast<const ArkUIMixedEvent*>(&(originNodeEvent->mixedEvent));
971     if (index > mixedData->stringPtrDataLength) {
972         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INDEX_OUT_OF_RANGE;
973     }
974     const char* str = reinterpret_cast<char*>(mixedData->stringPtrData[index]);
975     if (!str) {
976         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
977     }
978     int32_t strLen = static_cast<int32_t>(strlen(str));
979     int32_t size = stringSize[index];
980     if (size <= 0) {
981         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
982     }
983     bool copyResult = false;
984     if (strLen >= size) {
985         copyResult = strncpy_s(string[index], size, str, size - 1);
986         string[index][size - 1] = '\0';
987     } else {
988         copyResult = strcpy_s(string[index], size, str);
989     }
990     if (!copyResult) {
991         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
992     }
993     return OHOS::Ace::ERROR_CODE_NO_ERROR;
994 }
995 
OH_ArkUI_NodeEvent_SetReturnNumberValue(ArkUI_NodeEvent * event,ArkUI_NumberValue * value,int32_t size)996 int32_t OH_ArkUI_NodeEvent_SetReturnNumberValue(ArkUI_NodeEvent* event, ArkUI_NumberValue* value, int32_t size)
997 {
998     if (!event || event->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_MIXED_EVENT)) {
999         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
1000     }
1001     auto* originNodeEvent = reinterpret_cast<ArkUINodeEvent*>(event->origin);
1002     if (!originNodeEvent) {
1003         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_NODE_EVENT_PARAM_INVALID;
1004     }
1005     auto* mixedData = reinterpret_cast<ArkUIMixedEvent*>(&(originNodeEvent->mixedEvent));
1006     for (int i = 0; i < size; i++) {
1007         mixedData->numberReturnData[i].i32 = value[i].i32;
1008     }
1009     return OHOS::Ace::ERROR_CODE_NO_ERROR;
1010 }
1011 
OH_ArkUI_NodeEvent_GetDragEvent(ArkUI_NodeEvent * nodeEvent)1012 ArkUI_DragEvent* OH_ArkUI_NodeEvent_GetDragEvent(ArkUI_NodeEvent* nodeEvent)
1013 {
1014     if (!nodeEvent || nodeEvent->category != static_cast<int32_t>(NODE_EVENT_CATEGORY_COMPONENT_EVENT)) {
1015         return nullptr;
1016     }
1017     const auto* originNodeEvent = reinterpret_cast<ArkUINodeEvent*>(nodeEvent->origin);
1018     if (!originNodeEvent) {
1019         return nullptr;
1020     }
1021     return const_cast<ArkUI_DragEvent*>(reinterpret_cast<const ArkUI_DragEvent*>(&(originNodeEvent->dragEvent)));
1022 }
1023 
1024 #ifdef __cplusplus
1025 };
1026 #endif
1027