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