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