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