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