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