1 /*
2 * Copyright (c) 2024 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
16
17 #include "node_model.h"
18 #include "gesture_impl.h"
19
20 #include "core/gestures/gesture_event.h"
21 #include "interfaces/native/event/ui_input_event_impl.h"
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 struct ArkUI_GestureRecognizer {
28 int32_t type = -1;
29 ArkUIGesture* gesture = nullptr;
30 void* extraData = nullptr;
31 void* attachNode = nullptr;
32 bool capi = true;
33 void* recognizer = nullptr;
34 ArkUIGestureEventTargetInfo targetInfo = {};
35 };
36
37 struct ArkUI_GestureEventTargetInfo {
38 void* uiNode = nullptr;
39 };
40
41 #ifdef __cplusplus
42 };
43
44 // the ArkUI_GestureEvent struct actually same as ArkUIAPIEventGestureAsyncEvent;
45 struct ArkUI_GestureEvent {
46 ArkUIAPIEventGestureAsyncEvent eventData;
47 void* attachNode;
48 };
49
50 struct ArkUI_GestureInterruptInfo {
51 ArkUIGestureInterruptInfo interruptData;
52 };
53
54 struct ArkUI_ParallelInnerGestureEvent {
55 ArkUIGestureRecognizer* current = nullptr;
56 ArkUIGestureRecognizer** responseLinkRecognizer = nullptr;
57 void* userData = nullptr;
58 int32_t count;
59 };
60
61 #endif
62
63
OH_ArkUI_GestureEvent_GetActionType(const ArkUI_GestureEvent * event)64 ArkUI_GestureEventActionType OH_ArkUI_GestureEvent_GetActionType(const ArkUI_GestureEvent* event)
65 {
66 ArkUI_GestureEventActionType ret;
67 switch (event->eventData.subKind) {
68 case ON_ACTION:
69 case ON_ACTION_START:
70 ret = GESTURE_EVENT_ACTION_ACCEPT;
71 break;
72 case ON_ACTION_UPDATE:
73 ret = GESTURE_EVENT_ACTION_UPDATE;
74 break;
75 case ON_ACTION_END:
76 ret = GESTURE_EVENT_ACTION_END;
77 break;
78 case ON_ACTION_CANCEL:
79 ret = GESTURE_EVENT_ACTION_CANCEL;
80 break;
81 default:
82 ret = GESTURE_EVENT_ACTION_ACCEPT;
83 break;
84 }
85 return ret;
86 }
87
OH_ArkUI_GestureEvent_GetRawInputEvent(const ArkUI_GestureEvent * event)88 const ArkUI_UIInputEvent* OH_ArkUI_GestureEvent_GetRawInputEvent(const ArkUI_GestureEvent* event)
89 {
90 if (!event) {
91 return nullptr;
92 }
93 return reinterpret_cast<ArkUI_UIInputEvent*>(event->eventData.rawPointerEvent);
94 }
95
OH_ArkUI_LongPress_GetRepeatCount(const ArkUI_GestureEvent * event)96 int32_t OH_ArkUI_LongPress_GetRepeatCount(const ArkUI_GestureEvent* event)
97 {
98 return event->eventData.repeat;
99 }
100
OH_ArkUI_PanGesture_GetVelocity(const ArkUI_GestureEvent * event)101 float OH_ArkUI_PanGesture_GetVelocity(const ArkUI_GestureEvent* event)
102 {
103 return event->eventData.velocity;
104 }
105
OH_ArkUI_PanGesture_GetVelocityX(const ArkUI_GestureEvent * event)106 float OH_ArkUI_PanGesture_GetVelocityX(const ArkUI_GestureEvent* event)
107 {
108 return event->eventData.velocityX;
109 }
110
OH_ArkUI_PanGesture_GetVelocityY(const ArkUI_GestureEvent * event)111 float OH_ArkUI_PanGesture_GetVelocityY(const ArkUI_GestureEvent* event)
112 {
113 return event->eventData.velocityY;
114 }
115
OH_ArkUI_PanGesture_GetOffsetX(const ArkUI_GestureEvent * event)116 float OH_ArkUI_PanGesture_GetOffsetX(const ArkUI_GestureEvent* event)
117 {
118 return event->eventData.x;
119 }
120
OH_ArkUI_PanGesture_GetOffsetY(const ArkUI_GestureEvent * event)121 float OH_ArkUI_PanGesture_GetOffsetY(const ArkUI_GestureEvent* event)
122 {
123 return event->eventData.y;
124 }
125
OH_ArkUI_SwipeGesture_GetAngle(const ArkUI_GestureEvent * event)126 float OH_ArkUI_SwipeGesture_GetAngle(const ArkUI_GestureEvent* event)
127 {
128 return event->eventData.angle;
129 }
130
OH_ArkUI_SwipeGesture_GetVelocity(const ArkUI_GestureEvent * event)131 float OH_ArkUI_SwipeGesture_GetVelocity(const ArkUI_GestureEvent* event)
132 {
133 return event->eventData.speed;
134 }
135
OH_ArkUI_RotationGesture_GetAngle(const ArkUI_GestureEvent * event)136 float OH_ArkUI_RotationGesture_GetAngle(const ArkUI_GestureEvent* event)
137 {
138 return event->eventData.angle;
139 }
140
OH_ArkUI_PinchGesture_GetScale(const ArkUI_GestureEvent * event)141 float OH_ArkUI_PinchGesture_GetScale(const ArkUI_GestureEvent* event)
142 {
143 return event->eventData.scale;
144 }
145
OH_ArkUI_PinchGesture_GetCenterX(const ArkUI_GestureEvent * event)146 float OH_ArkUI_PinchGesture_GetCenterX(const ArkUI_GestureEvent* event)
147 {
148 return event->eventData.pinchCenterX;
149 }
150
OH_ArkUI_PinchGesture_GetCenterY(const ArkUI_GestureEvent * event)151 float OH_ArkUI_PinchGesture_GetCenterY(const ArkUI_GestureEvent* event)
152 {
153 return event->eventData.pinchCenterY;
154 }
155
OH_ArkUI_GestureEvent_GetNode(const ArkUI_GestureEvent * event)156 ArkUI_NodeHandle OH_ArkUI_GestureEvent_GetNode(const ArkUI_GestureEvent* event)
157 {
158 if (!event) {
159 return nullptr;
160 }
161 return reinterpret_cast<ArkUI_NodeHandle>(event->attachNode);
162 }
163
OH_ArkUI_GestureInterruptInfo_GetSystemFlag(const ArkUI_GestureInterruptInfo * event)164 bool OH_ArkUI_GestureInterruptInfo_GetSystemFlag(const ArkUI_GestureInterruptInfo* event)
165 {
166 return event->interruptData.isSystemGesture;
167 }
168
OH_ArkUI_GestureInterruptInfo_GetRecognizer(const ArkUI_GestureInterruptInfo * event)169 ArkUI_GestureRecognizer* OH_ArkUI_GestureInterruptInfo_GetRecognizer(const ArkUI_GestureInterruptInfo* event)
170 {
171 return reinterpret_cast<ArkUI_GestureRecognizer *>(event->interruptData.userData);
172 }
173
OH_ArkUI_GestureInterruptInfo_GetGestureEvent(const ArkUI_GestureInterruptInfo * event)174 ArkUI_GestureEvent* OH_ArkUI_GestureInterruptInfo_GetGestureEvent(const ArkUI_GestureInterruptInfo* event)
175 {
176 CHECK_NULL_RETURN(event, nullptr);
177 ArkUI_GestureEvent* gestureEvent = reinterpret_cast<ArkUI_GestureEvent*>(event->interruptData.gestureEvent);
178 CHECK_NULL_RETURN(gestureEvent, nullptr);
179
180 ArkUI_UIInputEvent* uiEvent = reinterpret_cast<ArkUI_UIInputEvent*>(event->interruptData.inputEvent);
181 gestureEvent->eventData.rawPointerEvent = uiEvent;
182
183 auto* gestureRecognizer = reinterpret_cast<ArkUI_GestureRecognizer*>(event->interruptData.userData);
184 CHECK_NULL_RETURN(gestureRecognizer, nullptr);
185 gestureEvent->attachNode = gestureRecognizer->attachNode;
186 return gestureEvent;
187 }
188
OH_ArkUI_GestureInterruptInfo_GetSystemRecognizerType(const ArkUI_GestureInterruptInfo * event)189 int32_t OH_ArkUI_GestureInterruptInfo_GetSystemRecognizerType(const ArkUI_GestureInterruptInfo* event)
190 {
191 if (event->interruptData.isSystemGesture) {
192 return event->interruptData.systemRecognizerType;
193 }
194 return -1;
195 }
196
OH_ArkUI_GestureInterruptInfo_GetTouchRecognizers(const ArkUI_GestureInterruptInfo * info,ArkUI_TouchRecognizerHandleArray * recognizers,int32_t * size)197 int32_t OH_ArkUI_GestureInterruptInfo_GetTouchRecognizers(
198 const ArkUI_GestureInterruptInfo* info, ArkUI_TouchRecognizerHandleArray* recognizers, int32_t* size)
199 {
200 CHECK_NULL_RETURN(info, ARKUI_ERROR_CODE_PARAM_INVALID);
201 CHECK_NULL_RETURN(recognizers, ARKUI_ERROR_CODE_PARAM_INVALID);
202 CHECK_NULL_RETURN(size, ARKUI_ERROR_CODE_PARAM_INVALID);
203 *recognizers = reinterpret_cast<ArkUI_TouchRecognizerHandleArray>(info->interruptData.touchRecognizers);
204 *size = info->interruptData.touchRecognizerCnt;
205 return ARKUI_ERROR_CODE_NO_ERROR;
206 }
207
OH_ArkUI_TouchRecognizer_GetNodeHandle(const ArkUI_TouchRecognizerHandle recognizer)208 ArkUI_NodeHandle OH_ArkUI_TouchRecognizer_GetNodeHandle(const ArkUI_TouchRecognizerHandle recognizer)
209 {
210 CHECK_NULL_RETURN(recognizer, nullptr);
211 auto node =
212 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->touchRecognizerGetNodeHandle(
213 static_cast<void*>(recognizer));
214
215 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
216 ArkUI_Node* arkUINode = new ArkUI_Node({ -1, node, false });
217 impl->getExtendedAPI()->setAttachNodePtr((arkUINode)->uiNodeHandle, reinterpret_cast<void*>(arkUINode));
218 return reinterpret_cast<ArkUI_NodeHandle>(arkUINode);
219 }
220
OH_ArkUI_TouchRecognizer_CancelTouch(ArkUI_TouchRecognizerHandle recognizer,ArkUI_GestureInterruptInfo * info)221 int32_t OH_ArkUI_TouchRecognizer_CancelTouch(ArkUI_TouchRecognizerHandle recognizer, ArkUI_GestureInterruptInfo* info)
222 {
223 CHECK_NULL_RETURN(recognizer, ARKUI_ERROR_CODE_PARAM_INVALID);
224 CHECK_NULL_RETURN(info, ARKUI_ERROR_CODE_PARAM_INVALID);
225 bool ret =
226 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->touchRecognizerCancelTouch(
227 static_cast<void*>(recognizer));
228 return ret ? ARKUI_ERROR_CODE_NO_ERROR : ARKUI_ERROR_CODE_PARAM_INVALID;
229 }
230
OH_ArkUI_GetResponseRecognizersFromInterruptInfo(const ArkUI_GestureInterruptInfo * event,ArkUI_GestureRecognizerHandleArray * responseChain,int32_t * count)231 int32_t OH_ArkUI_GetResponseRecognizersFromInterruptInfo(
232 const ArkUI_GestureInterruptInfo* event, ArkUI_GestureRecognizerHandleArray* responseChain, int32_t* count)
233 {
234 CHECK_NULL_RETURN(responseChain, ARKUI_ERROR_CODE_PARAM_INVALID);
235 CHECK_NULL_RETURN(count, ARKUI_ERROR_CODE_PARAM_INVALID);
236 *responseChain = reinterpret_cast<ArkUI_GestureRecognizer**>(event->interruptData.responseLinkRecognizer);
237 *count = event->interruptData.count;
238 return 0;
239 }
240
OH_ArkUI_SetGestureRecognizerEnabled(ArkUI_GestureRecognizer * recognizer,bool enabled)241 int32_t OH_ArkUI_SetGestureRecognizerEnabled(ArkUI_GestureRecognizer* recognizer, bool enabled)
242 {
243 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
244 if (!gestureRecognizer) {
245 return ARKUI_ERROR_CODE_PARAM_INVALID;
246 }
247 return OHOS::Ace::NodeModel::GetFullImpl()
248 ->getNodeModifiers()
249 ->getGestureModifier()
250 ->setGestureRecognizerEnabled(gestureRecognizer, enabled);
251 }
252
OH_ArkUI_SetGestureRecognizerLimitFingerCount(ArkUI_GestureRecognizer * recognizer,bool limitFingerCount)253 int32_t OH_ArkUI_SetGestureRecognizerLimitFingerCount(ArkUI_GestureRecognizer* recognizer, bool limitFingerCount)
254 {
255 auto* gesture = reinterpret_cast<ArkUIGesture*>(recognizer->gesture);
256 if (!gesture) {
257 return ARKUI_ERROR_CODE_PARAM_INVALID;
258 }
259 return OHOS::Ace::NodeModel::GetFullImpl()
260 ->getNodeModifiers()
261 ->getGestureModifier()
262 ->setGestureRecognizerLimitFingerCount(gesture, limitFingerCount);
263 }
264
OH_ArkUI_GetGestureRecognizerEnabled(ArkUI_GestureRecognizer * recognizer)265 bool OH_ArkUI_GetGestureRecognizerEnabled(ArkUI_GestureRecognizer* recognizer)
266 {
267 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
268 if (!gestureRecognizer) {
269 return false;
270 }
271 return OHOS::Ace::NodeModel::GetFullImpl()
272 ->getNodeModifiers()
273 ->getGestureModifier()
274 ->getGestureRecognizerEnabled(gestureRecognizer);
275 }
276
OH_ArkUI_GetGestureRecognizerState(ArkUI_GestureRecognizer * recognizer,ArkUI_GestureRecognizerState * state)277 int32_t OH_ArkUI_GetGestureRecognizerState(ArkUI_GestureRecognizer* recognizer, ArkUI_GestureRecognizerState* state)
278 {
279 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
280 if (!gestureRecognizer) {
281 return ARKUI_ERROR_CODE_PARAM_INVALID;
282 }
283 ArkUIGestureRecognizerState recognizerState;
284 auto result =
285 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getGestureRecognizerState(
286 gestureRecognizer, &recognizerState);
287 *state = static_cast<ArkUI_GestureRecognizerState>(recognizerState);
288 return result;
289 }
290
OH_ArkUI_GetGestureEventTargetInfo(ArkUI_GestureRecognizer * recognizer,ArkUI_GestureEventTargetInfo ** info)291 int32_t OH_ArkUI_GetGestureEventTargetInfo(ArkUI_GestureRecognizer* recognizer, ArkUI_GestureEventTargetInfo** info)
292 {
293 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
294 if (!gestureRecognizer) {
295 return ARKUI_ERROR_CODE_PARAM_INVALID;
296 }
297 *info = reinterpret_cast<ArkUI_GestureEventTargetInfo*>(&gestureRecognizer->targetInfo);
298 return 0;
299 }
300
OH_ArkUI_GestureEventTargetInfo_IsScrollBegin(ArkUI_GestureEventTargetInfo * info,bool * ret)301 int32_t OH_ArkUI_GestureEventTargetInfo_IsScrollBegin(ArkUI_GestureEventTargetInfo* info, bool* ret)
302 {
303 auto* targetInfo = reinterpret_cast<ArkUIGestureEventTargetInfo*>(info);
304 if (!targetInfo) {
305 return ARKUI_ERROR_CODE_PARAM_INVALID;
306 }
307 return OHOS::Ace::NodeModel::GetFullImpl()
308 ->getNodeModifiers()
309 ->getGestureModifier()
310 ->gestureEventTargetInfoIsScrollBegin(targetInfo, ret);
311 }
312
OH_ArkUI_GestureEventTargetInfo_IsScrollEnd(ArkUI_GestureEventTargetInfo * info,bool * ret)313 int32_t OH_ArkUI_GestureEventTargetInfo_IsScrollEnd(ArkUI_GestureEventTargetInfo* info, bool* ret)
314 {
315 auto* targetInfo = reinterpret_cast<ArkUIGestureEventTargetInfo*>(info);
316 if (!targetInfo) {
317 return ARKUI_ERROR_CODE_PARAM_INVALID;
318 }
319 return OHOS::Ace::NodeModel::GetFullImpl()
320 ->getNodeModifiers()
321 ->getGestureModifier()
322 ->gestureEventTargetInfoIsScrollEnd(targetInfo, ret);
323 }
324
OH_ArkUI_GetPanGestureDirectionMask(ArkUI_GestureRecognizer * recognizer,ArkUI_GestureDirectionMask * directionMask)325 int32_t OH_ArkUI_GetPanGestureDirectionMask(
326 ArkUI_GestureRecognizer* recognizer, ArkUI_GestureDirectionMask* directionMask)
327 {
328 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
329 if (!gestureRecognizer) {
330 return ARKUI_ERROR_CODE_PARAM_INVALID;
331 }
332 ArkUIGestureDirection direction = ArkUIGestureDirection::ArkUI_GESTURE_DIRECTION_ALL;
333 auto result =
334 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getPanGestureDirectionMask(
335 gestureRecognizer, &direction);
336 *directionMask = static_cast<ArkUI_GestureDirectionMask>(direction);
337 return result;
338 }
339
OH_ArkUI_IsBuiltInGesture(ArkUI_GestureRecognizer * recognizer)340 bool OH_ArkUI_IsBuiltInGesture(ArkUI_GestureRecognizer* recognizer)
341 {
342 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
343 if (!gestureRecognizer) {
344 return false;
345 }
346 return OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->isBuiltInGesture(
347 gestureRecognizer);
348 }
349
OH_ArkUI_GetGestureTag(ArkUI_GestureRecognizer * recognizer,char * buffer,int32_t bufferSize,int32_t * result)350 int32_t OH_ArkUI_GetGestureTag(ArkUI_GestureRecognizer* recognizer, char* buffer, int32_t bufferSize, int32_t* result)
351 {
352 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
353 if (!gestureRecognizer) {
354 return ARKUI_ERROR_CODE_PARAM_INVALID;
355 }
356 return OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getGestureTag(
357 gestureRecognizer, buffer, bufferSize, result);
358 }
359
OH_ArkUI_GetGestureBindNodeId(ArkUI_GestureRecognizer * recognizer,char * nodeId,int32_t size,int32_t * result)360 int32_t OH_ArkUI_GetGestureBindNodeId(ArkUI_GestureRecognizer* recognizer, char* nodeId, int32_t size, int32_t* result)
361 {
362 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
363 if (!gestureRecognizer) {
364 return ARKUI_ERROR_CODE_PARAM_INVALID;
365 }
366 return OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getGestureBindNodeId(
367 gestureRecognizer, nodeId, size, result);
368 }
369
OH_ArkUI_IsGestureRecognizerValid(ArkUI_GestureRecognizer * recognizer)370 bool OH_ArkUI_IsGestureRecognizerValid(ArkUI_GestureRecognizer* recognizer)
371 {
372 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
373 if (!gestureRecognizer) {
374 return false;
375 }
376 return OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->isGestureRecognizerValid(
377 gestureRecognizer);
378 }
379
OH_ArkUI_ParallelInnerGestureEvent_GetUserData(ArkUI_ParallelInnerGestureEvent * event)380 void* OH_ArkUI_ParallelInnerGestureEvent_GetUserData(ArkUI_ParallelInnerGestureEvent* event)
381 {
382 return event->userData;
383 }
384
OH_ArkUI_GestureInterrupter_GetUserData(ArkUI_GestureInterruptInfo * event)385 void* OH_ArkUI_GestureInterrupter_GetUserData(ArkUI_GestureInterruptInfo* event)
386 {
387 if (!event) {
388 return nullptr;
389 }
390 return event->interruptData.customUserData;
391 }
392
OH_ArkUI_ParallelInnerGestureEvent_GetCurrentRecognizer(ArkUI_ParallelInnerGestureEvent * event)393 ArkUI_GestureRecognizer* OH_ArkUI_ParallelInnerGestureEvent_GetCurrentRecognizer(ArkUI_ParallelInnerGestureEvent* event)
394 {
395 return reinterpret_cast<ArkUI_GestureRecognizer*>(event->current);
396 }
397
OH_ArkUI_ParallelInnerGestureEvent_GetConflictRecognizers(ArkUI_ParallelInnerGestureEvent * event,ArkUI_GestureRecognizerHandleArray * array,int32_t * size)398 int32_t OH_ArkUI_ParallelInnerGestureEvent_GetConflictRecognizers(
399 ArkUI_ParallelInnerGestureEvent* event, ArkUI_GestureRecognizerHandleArray* array, int32_t* size)
400 {
401 CHECK_NULL_RETURN(array, ARKUI_ERROR_CODE_PARAM_INVALID);
402 CHECK_NULL_RETURN(size, ARKUI_ERROR_CODE_PARAM_INVALID);
403 *array = reinterpret_cast<ArkUI_GestureRecognizer**>(event->responseLinkRecognizer);
404 *size = event->count;
405 return 0;
406 }
407
OH_ArkUI_SetArkUIGestureRecognizerDisposeNotify(ArkUI_GestureRecognizer * recognizer,ArkUI_GestureRecognizerDisposeNotifyCallback callback,void * userData)408 int32_t OH_ArkUI_SetArkUIGestureRecognizerDisposeNotify(
409 ArkUI_GestureRecognizer* recognizer, ArkUI_GestureRecognizerDisposeNotifyCallback callback, void* userData)
410 {
411 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
412 if (!gestureRecognizer || gestureRecognizer->capi) {
413 return ARKUI_ERROR_CODE_PARAM_INVALID;
414 }
415 auto disposeCallback = reinterpret_cast<void (*)(ArkUIGestureRecognizer * recognizer, void* userData)>(callback);
416 OHOS::Ace::NodeModel::GetFullImpl()
417 ->getNodeModifiers()
418 ->getGestureModifier()
419 ->setArkUIGestureRecognizerDisposeNotify(gestureRecognizer, userData, disposeCallback);
420 return 0;
421 }
422
OH_ArkUI_GetGestureParam_DirectMask(ArkUI_GestureRecognizer * recognizer,ArkUI_GestureDirectionMask * directMask)423 int32_t OH_ArkUI_GetGestureParam_DirectMask(ArkUI_GestureRecognizer* recognizer, ArkUI_GestureDirectionMask* directMask)
424 {
425 if (!recognizer || !directMask) {
426 return ARKUI_ERROR_CODE_PARAM_INVALID;
427 }
428 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
429 if (!gestureRecognizer) {
430 return ARKUI_ERROR_CODE_PARAM_INVALID;
431 }
432 switch (recognizer->type) {
433 case SWIPE_GESTURE: {
434 ArkUISwipeGestureDirection direction = ArkUISwipeGestureDirection::ArkUI_SWIPE_GESTURE_DIRECTION_ALL;
435 auto result = OHOS::Ace::NodeModel::GetFullImpl()
436 ->getNodeModifiers()
437 ->getGestureModifier()
438 ->getSwipeGestureDirectionMask(gestureRecognizer, &direction);
439 *directMask = static_cast<ArkUI_GestureDirectionMask>(direction);
440 return result;
441 }
442 case PAN_GESTURE: {
443 ArkUIGestureDirection direction = ArkUIGestureDirection::ArkUI_GESTURE_DIRECTION_ALL;
444 auto result = OHOS::Ace::NodeModel::GetFullImpl()
445 ->getNodeModifiers()
446 ->getGestureModifier()
447 ->getPanGestureDirectionMask(gestureRecognizer, &direction);
448 *directMask = static_cast<ArkUI_GestureDirectionMask>(direction);
449 return result;
450 }
451 default:
452 break;
453 }
454 return ARKUI_ERROR_CODE_PARAM_INVALID;
455 }
456
OH_ArkUI_GetGestureParam_FingerCount(ArkUI_GestureRecognizer * recognizer,int * finger)457 int32_t OH_ArkUI_GetGestureParam_FingerCount(ArkUI_GestureRecognizer* recognizer, int* finger)
458 {
459 if (!recognizer || !finger) {
460 return ARKUI_ERROR_CODE_PARAM_INVALID;
461 }
462 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
463 if (!gestureRecognizer) {
464 return ARKUI_ERROR_CODE_PARAM_INVALID;
465 }
466 switch (recognizer->type) {
467 case TAP_GESTURE:
468 case LONG_PRESS_GESTURE:
469 case PINCH_GESTURE:
470 case ROTATION_GESTURE:
471 case SWIPE_GESTURE:
472 case PAN_GESTURE: {
473 auto result =
474 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getGestureFingerCount(
475 gestureRecognizer, finger);
476 return result;
477 }
478 default:
479 break;
480 }
481 return ARKUI_ERROR_CODE_PARAM_INVALID;
482 }
483
OH_ArkUI_GetGestureParam_limitFingerCount(ArkUI_GestureRecognizer * recognizer,bool * isLimited)484 int32_t OH_ArkUI_GetGestureParam_limitFingerCount(ArkUI_GestureRecognizer* recognizer, bool* isLimited)
485 {
486 if (!recognizer || !isLimited) {
487 return ARKUI_ERROR_CODE_PARAM_INVALID;
488 }
489 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
490 if (!gestureRecognizer) {
491 return ARKUI_ERROR_CODE_PARAM_INVALID;
492 }
493 switch (recognizer->type) {
494 case TAP_GESTURE:
495 case LONG_PRESS_GESTURE:
496 case PINCH_GESTURE:
497 case ROTATION_GESTURE:
498 case SWIPE_GESTURE:
499 case PAN_GESTURE: {
500 auto result = OHOS::Ace::NodeModel::GetFullImpl()
501 ->getNodeModifiers()
502 ->getGestureModifier()
503 ->getGestureLimitFingerCount(gestureRecognizer, isLimited);
504 return result;
505 }
506 default:
507 break;
508 }
509 return ARKUI_ERROR_CODE_PARAM_INVALID;
510 }
511
OH_ArkUI_GetGestureParam_repeat(ArkUI_GestureRecognizer * recognizer,bool * isRepeat)512 int32_t OH_ArkUI_GetGestureParam_repeat(ArkUI_GestureRecognizer* recognizer, bool* isRepeat)
513 {
514 if (!recognizer || !isRepeat) {
515 return ARKUI_ERROR_CODE_PARAM_INVALID;
516 }
517 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
518 if (!gestureRecognizer) {
519 return ARKUI_ERROR_CODE_PARAM_INVALID;
520 }
521 switch (recognizer->type) {
522 case LONG_PRESS_GESTURE: {
523 auto result = OHOS::Ace::NodeModel::GetFullImpl()
524 ->getNodeModifiers()
525 ->getGestureModifier()
526 ->getLongPressGestureRepeat(gestureRecognizer, isRepeat);
527 return result;
528 }
529 default:
530 break;
531 }
532 return ARKUI_ERROR_CODE_RECOGNIZER_TYPE_NOT_SUPPORTED;
533 }
534
OH_ArkUI_GetGestureParam_distance(ArkUI_GestureRecognizer * recognizer,double * distance)535 int32_t OH_ArkUI_GetGestureParam_distance(ArkUI_GestureRecognizer* recognizer, double* distance)
536 {
537 if (!recognizer || !distance) {
538 return ARKUI_ERROR_CODE_PARAM_INVALID;
539 }
540 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
541 if (!gestureRecognizer) {
542 return ARKUI_ERROR_CODE_PARAM_INVALID;
543 }
544 switch (recognizer->type) {
545 case PINCH_GESTURE: {
546 auto result =
547 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getPinchGestureDistance(
548 gestureRecognizer, distance);
549 return result;
550 }
551 case PAN_GESTURE: {
552 auto result =
553 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getPanGestureDistance(
554 gestureRecognizer, distance);
555 return result;
556 }
557 default:
558 break;
559 }
560 return ARKUI_ERROR_CODE_RECOGNIZER_TYPE_NOT_SUPPORTED;
561 }
562
OH_ArkUI_GetGestureParam_speed(ArkUI_GestureRecognizer * recognizer,double * speed)563 int32_t OH_ArkUI_GetGestureParam_speed(ArkUI_GestureRecognizer* recognizer, double* speed)
564 {
565 if (!recognizer || !speed) {
566 return ARKUI_ERROR_CODE_PARAM_INVALID;
567 }
568 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
569 if (!gestureRecognizer) {
570 return ARKUI_ERROR_CODE_PARAM_INVALID;
571 }
572 switch (recognizer->type) {
573 case SWIPE_GESTURE: {
574 auto result =
575 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getSwipeGestureSpeed(
576 gestureRecognizer, speed);
577 return result;
578 }
579 default:
580 break;
581 }
582 return ARKUI_ERROR_CODE_RECOGNIZER_TYPE_NOT_SUPPORTED;
583 }
584
OH_ArkUI_GetGestureParam_duration(ArkUI_GestureRecognizer * recognizer,int * duration)585 int32_t OH_ArkUI_GetGestureParam_duration(ArkUI_GestureRecognizer* recognizer, int* duration)
586 {
587 if (!recognizer || !duration) {
588 return ARKUI_ERROR_CODE_PARAM_INVALID;
589 }
590 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
591 if (!gestureRecognizer) {
592 return ARKUI_ERROR_CODE_PARAM_INVALID;
593 }
594 switch (recognizer->type) {
595 case LONG_PRESS_GESTURE: {
596 auto result = OHOS::Ace::NodeModel::GetFullImpl()
597 ->getNodeModifiers()
598 ->getGestureModifier()
599 ->getLongPressGestureDuration(gestureRecognizer, duration);
600 return result;
601 }
602 default:
603 break;
604 }
605 return ARKUI_ERROR_CODE_RECOGNIZER_TYPE_NOT_SUPPORTED;
606 }
607
OH_ArkUI_GetGestureParam_angle(ArkUI_GestureRecognizer * recognizer,double * angle)608 int32_t OH_ArkUI_GetGestureParam_angle(ArkUI_GestureRecognizer* recognizer, double* angle)
609 {
610 if (!recognizer || !angle) {
611 return ARKUI_ERROR_CODE_PARAM_INVALID;
612 }
613 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
614 if (!gestureRecognizer) {
615 return ARKUI_ERROR_CODE_PARAM_INVALID;
616 }
617 switch (recognizer->type) {
618 case ROTATION_GESTURE: {
619 auto result =
620 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->getRotationGestureAngle(
621 gestureRecognizer, angle);
622 return result;
623 }
624 default:
625 break;
626 }
627 return ARKUI_ERROR_CODE_RECOGNIZER_TYPE_NOT_SUPPORTED;
628 }
629
OH_ArkUI_GetGestureParam_distanceThreshold(ArkUI_GestureRecognizer * recognizer,double * distanceThreshold)630 int32_t OH_ArkUI_GetGestureParam_distanceThreshold(ArkUI_GestureRecognizer* recognizer, double* distanceThreshold)
631 {
632 if (!recognizer || !distanceThreshold) {
633 return ARKUI_ERROR_CODE_PARAM_INVALID;
634 }
635 auto* gestureRecognizer = reinterpret_cast<ArkUIGestureRecognizer*>(recognizer);
636 if (!gestureRecognizer) {
637 return ARKUI_ERROR_CODE_PARAM_INVALID;
638 }
639 switch (recognizer->type) {
640 case TAP_GESTURE: {
641 auto result = OHOS::Ace::NodeModel::GetFullImpl()
642 ->getNodeModifiers()
643 ->getGestureModifier()
644 ->getTapGestureDistanceThreshold(gestureRecognizer, distanceThreshold);
645 return result;
646 }
647 default:
648 break;
649 }
650 return ARKUI_ERROR_CODE_RECOGNIZER_TYPE_NOT_SUPPORTED;
651 }
652
653 namespace OHOS::Ace::GestureModel {
654
655 constexpr int32_t DEFAULT_PAN_FINGERS = 1;
656 constexpr int32_t MAX_PAN_FINGERS = 10;
657 constexpr double DEFAULT_PINCH_DISTANCE = 5.0f;
658 constexpr double DEFAULT_SWIPE_SPEED = 100.0f;
659 constexpr int32_t DEFAULT_TAP_COUNT = 1;
660 constexpr int32_t DEFAULT_TAP_FINGERS = 1;
661 constexpr int32_t MAX_TAP_FINGERS = 10;
662
663 struct GestureInnerData {
664 void (*targetReceiver)(ArkUI_GestureEvent* event, void* extraParam);
665 void* extraParam;
666 void* gesture;
667 };
668
CreateTapGesture(int32_t count,int32_t fingers)669 ArkUI_GestureRecognizer* CreateTapGesture(int32_t count, int32_t fingers)
670 {
671 count = std::max(count, DEFAULT_TAP_COUNT);
672 fingers = std::clamp(fingers, DEFAULT_TAP_FINGERS, MAX_TAP_FINGERS);
673 auto* ndkGesture = new ArkUI_GestureRecognizer{ TAP_GESTURE, nullptr, nullptr, nullptr };
674 auto* gesture = OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->createTapGesture(
675 count, fingers, false, ndkGesture);
676 ndkGesture->gesture = gesture;
677 return ndkGesture;
678 }
679
CreateTapGestureWithDistanceThreshold(int32_t count,int32_t fingers,double distanceThreshold)680 ArkUI_GestureRecognizer* CreateTapGestureWithDistanceThreshold(
681 int32_t count, int32_t fingers, double distanceThreshold)
682 {
683 count = std::max(count, DEFAULT_TAP_COUNT);
684 fingers = std::clamp(fingers, DEFAULT_TAP_FINGERS, MAX_TAP_FINGERS);
685 auto* ndkGesture = new ArkUI_GestureRecognizer{ TAP_GESTURE, nullptr, nullptr, nullptr };
686 auto* gesture = OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->
687 createTapGestureWithDistanceThreshold(count, fingers, distanceThreshold, false, ndkGesture);
688 ndkGesture->gesture = gesture;
689 return ndkGesture;
690 }
691
CreateLongPressGesture(int32_t fingers,bool repeatResult,int32_t duration)692 ArkUI_GestureRecognizer* CreateLongPressGesture(int32_t fingers, bool repeatResult, int32_t duration)
693 {
694 auto* ndkGesture = new ArkUI_GestureRecognizer{ LONG_PRESS_GESTURE, nullptr, nullptr, nullptr };
695 auto* gesture =
696 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->createLongPressGesture(fingers,
697 repeatResult, duration, false, ndkGesture);
698 ndkGesture->gesture = gesture;
699 return ndkGesture;
700 }
701
CreatePinchGesture(int32_t fingers,double distance)702 ArkUI_GestureRecognizer* CreatePinchGesture(int32_t fingers, double distance)
703 {
704 if (LessOrEqual(distance, 0.0f)) {
705 distance = DEFAULT_PINCH_DISTANCE;
706 }
707 double distanceNum = OHOS::Ace::NodeModel::GetFullImpl()->getBasicAPI()->convertLengthMetricsUnit(
708 distance, static_cast<int32_t>(ARKUI_LENGTH_METRIC_UNIT_PX), static_cast<int32_t>(ARKUI_LENGTH_METRIC_UNIT_VP));
709 auto* ndkGesture = new ArkUI_GestureRecognizer{ PINCH_GESTURE, nullptr, nullptr, nullptr };
710 auto* gesture =
711 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->createPinchGesture(fingers,
712 distanceNum, false, ndkGesture);
713 ndkGesture->gesture = gesture;
714 return ndkGesture;
715 }
716
CreateRotationGesture(int32_t fingers,double angle)717 ArkUI_GestureRecognizer* CreateRotationGesture(int32_t fingers, double angle)
718 {
719 auto* ndkGesture = new ArkUI_GestureRecognizer{ ROTATION_GESTURE, nullptr, nullptr, nullptr };
720 auto* gesture =
721 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->createRotationGesture(fingers,
722 angle, false, ndkGesture);
723 ndkGesture->gesture = gesture;
724 return ndkGesture;
725 }
726
CreateSwipeGesture(int32_t fingers,ArkUI_GestureDirectionMask directions,double speed)727 ArkUI_GestureRecognizer* CreateSwipeGesture(
728 int32_t fingers, ArkUI_GestureDirectionMask directions, double speed)
729 {
730 if (LessOrEqual(speed, 0.0f)) {
731 speed = DEFAULT_SWIPE_SPEED;
732 }
733 double speedNum = OHOS::Ace::NodeModel::GetFullImpl()->getBasicAPI()->convertLengthMetricsUnit(
734 speed, static_cast<int32_t>(ARKUI_LENGTH_METRIC_UNIT_PX), static_cast<int32_t>(ARKUI_LENGTH_METRIC_UNIT_VP));
735 auto* ndkGesture = new ArkUI_GestureRecognizer{ SWIPE_GESTURE, nullptr, nullptr, nullptr };
736 auto* gesture =
737 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->createSwipeGesture(fingers,
738 directions, speedNum, false, ndkGesture);
739 ndkGesture->gesture = gesture;
740 return ndkGesture;
741 }
742
CreatePanGesture(int32_t fingersNum,ArkUI_GestureDirectionMask mask,double distanceNum)743 ArkUI_GestureRecognizer* CreatePanGesture(int32_t fingersNum, ArkUI_GestureDirectionMask mask, double distanceNum)
744 {
745 int32_t fingers = DEFAULT_PAN_FINGERS;
746 if (fingersNum < DEFAULT_PAN_FINGERS || fingersNum > MAX_PAN_FINGERS) {
747 fingers = DEFAULT_PAN_FINGERS;
748 } else {
749 fingers = fingersNum;
750 }
751 auto* ndkGesture = new ArkUI_GestureRecognizer{ PAN_GESTURE, nullptr, nullptr, nullptr };
752 auto* gesture = OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->createPanGesture(
753 fingers, mask, distanceNum, false, ndkGesture);
754 ndkGesture->gesture = gesture;
755 return ndkGesture;
756 }
757
DisposeGesture(ArkUI_GestureRecognizer * recognizer)758 void DisposeGesture(ArkUI_GestureRecognizer* recognizer)
759 {
760 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->dispose(recognizer->gesture);
761 delete reinterpret_cast<GestureInnerData*>(recognizer->extraData);
762 recognizer->extraData = nullptr;
763 delete recognizer;
764 recognizer = nullptr;
765 }
766
SetGestureEventTarget(ArkUI_GestureRecognizer * recognizer,ArkUI_GestureEventActionTypeMask mask,void * extraParam,void (* targetReceiver)(ArkUI_GestureEvent * event,void * extraParam))767 int32_t SetGestureEventTarget(ArkUI_GestureRecognizer* recognizer, ArkUI_GestureEventActionTypeMask mask,
768 void* extraParam, void (*targetReceiver)(ArkUI_GestureEvent* event, void* extraParam))
769 {
770 // 手势事件通过通用的异步事件接口进行处理。(HandleGestureEvent)
771 // 把回调函数和上下文都封装到内部结构体中。
772 if (recognizer->extraData) {
773 delete reinterpret_cast<GestureInnerData*>(recognizer->extraData);
774 recognizer->extraData = nullptr;
775 }
776 recognizer->extraData = new GestureInnerData { targetReceiver, extraParam, recognizer };
777 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->registerGestureEvent(
778 recognizer->gesture, mask, recognizer->extraData);
779 return 0;
780 }
781
AddGestureToNode(ArkUI_NodeHandle node,ArkUI_GestureRecognizer * recognizer,ArkUI_GesturePriority priorityNum,ArkUI_GestureMask mask)782 int32_t AddGestureToNode(ArkUI_NodeHandle node, ArkUI_GestureRecognizer* recognizer, ArkUI_GesturePriority priorityNum,
783 ArkUI_GestureMask mask)
784 {
785 recognizer->attachNode = node;
786 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->addGestureToNode(
787 node->uiNodeHandle, recognizer->gesture, priorityNum, mask);
788 recognizer->targetInfo.uiNode = reinterpret_cast<void*>(node->uiNodeHandle);
789 return 0;
790 }
791
RemoveGestureFromNode(ArkUI_NodeHandle node,ArkUI_GestureRecognizer * recognizer)792 int32_t RemoveGestureFromNode(ArkUI_NodeHandle node, ArkUI_GestureRecognizer* recognizer)
793 {
794 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->removeGestureFromNode(
795 node->uiNodeHandle, recognizer->gesture);
796 recognizer->targetInfo.uiNode = nullptr;
797 return 0;
798 }
799
GetGestureType(ArkUI_GestureRecognizer * recognizer)800 ArkUI_GestureRecognizerType GetGestureType(ArkUI_GestureRecognizer* recognizer)
801 {
802 return static_cast<ArkUI_GestureRecognizerType>(recognizer->type);
803 }
804
CreateGroupGesture(ArkUI_GroupGestureMode gestureMode)805 ArkUI_GestureRecognizer* CreateGroupGesture(ArkUI_GroupGestureMode gestureMode)
806 {
807 auto* gesture =
808 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->createGestureGroup(gestureMode);
809 return new ArkUI_GestureRecognizer { GROUP_GESTURE, gesture, nullptr };
810 }
811
AddChildGesture(ArkUI_GestureRecognizer * group,ArkUI_GestureRecognizer * child)812 int32_t AddChildGesture(ArkUI_GestureRecognizer* group, ArkUI_GestureRecognizer* child)
813 {
814 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->addGestureToGestureGroup(
815 group->gesture, child->gesture);
816 return 0;
817 }
818
RemoveChildGesture(ArkUI_GestureRecognizer * group,ArkUI_GestureRecognizer * child)819 int32_t RemoveChildGesture(ArkUI_GestureRecognizer* group, ArkUI_GestureRecognizer* child)
820 {
821 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->removeGestureFromGestureGroup(
822 group->gesture, child->gesture);
823 return 0;
824 }
825
HandleGestureEvent(ArkUINodeEvent * event)826 void HandleGestureEvent(ArkUINodeEvent* event)
827 {
828 if (event == nullptr) {
829 return;
830 }
831 auto* extraData = reinterpret_cast<GestureInnerData*>(event->extraParam);
832 if (extraData == nullptr) {
833 return;
834 }
835 ArkUI_GestureEvent* gestureEvent = reinterpret_cast<ArkUI_GestureEvent *>(&event->gestureAsyncEvent);
836 if (gestureEvent == nullptr || extraData->targetReceiver == nullptr) {
837 return;
838 }
839 ArkUI_UIInputEvent uiEvent;
840 if (gestureEvent->eventData.inputEventType == static_cast<int32_t>(ARKUI_UIINPUTEVENT_TYPE_MOUSE)) {
841 uiEvent.eventTypeId = C_MOUSE_EVENT_ID;
842 uiEvent.inputType = ARKUI_UIINPUTEVENT_TYPE_MOUSE;
843 } else if (gestureEvent->eventData.inputEventType == static_cast<int32_t>(ARKUI_UIINPUTEVENT_TYPE_AXIS)) {
844 uiEvent.eventTypeId = C_AXIS_EVENT_ID;
845 uiEvent.inputType = ARKUI_UIINPUTEVENT_TYPE_AXIS;
846 } else {
847 uiEvent.eventTypeId = C_TOUCH_EVENT_ID;
848 uiEvent.inputType = ARKUI_UIINPUTEVENT_TYPE_TOUCH;
849 }
850 uiEvent.inputEvent = gestureEvent->eventData.rawPointerEvent;
851 gestureEvent->eventData.rawPointerEvent = &uiEvent;
852 if (extraData->gesture) {
853 ArkUI_GestureRecognizer* recognizer = reinterpret_cast<ArkUI_GestureRecognizer*>(extraData->gesture);
854 gestureEvent->attachNode = recognizer->attachNode;
855 }
856 extraData->targetReceiver(gestureEvent, extraData->extraParam);
857 }
858
SetGestureInterrupterToNode(ArkUI_NodeHandle node,ArkUI_GestureInterruptResult (* interrupter)(ArkUI_GestureInterruptInfo * info))859 int32_t SetGestureInterrupterToNode(
860 ArkUI_NodeHandle node, ArkUI_GestureInterruptResult (*interrupter)(ArkUI_GestureInterruptInfo* info))
861 {
862 auto callback = reinterpret_cast<int32_t (*)(ArkUIGestureInterruptInfo*)>(interrupter);
863 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->setGestureInterrupterToNode(
864 node->uiNodeHandle, callback);
865 return 0;
866 }
867
SetGestureInterrupterToNodeWithUserData(ArkUI_NodeHandle node,void * userData,ArkUI_GestureInterruptResult (* interrupter)(ArkUI_GestureInterruptInfo * info))868 int32_t SetGestureInterrupterToNodeWithUserData(ArkUI_NodeHandle node, void* userData,
869 ArkUI_GestureInterruptResult (*interrupter)(ArkUI_GestureInterruptInfo* info))
870 {
871 auto callback = reinterpret_cast<int32_t (*)(ArkUIGestureInterruptInfo*)>(interrupter);
872 auto nodeModel = OHOS::Ace::NodeModel::GetFullImpl();
873 if (nodeModel) {
874 nodeModel->getNodeModifiers()->getGestureModifier()->setGestureInterrupterToNodeWithUserData(
875 node->uiNodeHandle, userData, callback);
876 }
877 return 0;
878 }
879
SetInnerGestureParallelTo(ArkUI_NodeHandle node,void * userData,ArkUI_GestureRecognizer * (* parallelInnerGesture)(ArkUI_ParallelInnerGestureEvent * event))880 int32_t SetInnerGestureParallelTo(ArkUI_NodeHandle node, void* userData,
881 ArkUI_GestureRecognizer* (*parallelInnerGesture)(ArkUI_ParallelInnerGestureEvent* event))
882 {
883 auto callback =
884 reinterpret_cast<ArkUIGestureRecognizer* (*)(ArkUIParallelInnerGestureEvent * current)>(parallelInnerGesture);
885 OHOS::Ace::NodeModel::GetFullImpl()->getNodeModifiers()->getGestureModifier()->setInnerGestureParallelTo(
886 node->uiNodeHandle, userData, callback);
887 return 0;
888 }
889
890 }; // namespace OHOS::Ace::GestureModel