• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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