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