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