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  * @addtogroup ArkUI_NativeModule
18  * @{
19  *
20  * @brief Defines APIs for ArkUI to register gesture callbacks on the native side.
21  *
22  * @since 12
23  */
24 
25 /**
26  * @file native_gesture.h
27  *
28  * @brief Provides type definitions for <b>NativeGesture</b> APIs.
29  *
30  * @library libace_ndk.z.so
31  * @syscap SystemCapability.ArkUI.ArkUI.Full
32  * @kit ArkUI
33  * @since 12
34  */
35 
36 #ifndef ARKUI_NATIVE_GESTTURE_H
37 #define ARKUI_NATIVE_GESTTURE_H
38 
39 #include "ui_input_event.h"
40 #include "native_type.h"
41 #include <stdbool.h>
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 /**
48  * @brief Defines a gesture recognizer.
49  *
50  * @since 12
51  */
52 typedef struct ArkUI_GestureRecognizer ArkUI_GestureRecognizer;
53 
54 /**
55  * @brief Defines the gesture interruption information.
56  *
57  * @since 12
58  */
59 typedef struct ArkUI_GestureInterruptInfo ArkUI_GestureInterruptInfo;
60 
61 /**
62  * @brief Defines the gesture event.
63  *
64  * @since 12
65  */
66 typedef struct ArkUI_GestureEvent ArkUI_GestureEvent;
67 
68 /**
69  * @brief Enumerates gesture event types.
70  *
71  * @since 12
72  */
73 typedef enum {
74     /** Triggered. */
75     GESTURE_EVENT_ACTION_ACCEPT = 0x01,
76 
77     /** Updated. */
78     GESTURE_EVENT_ACTION_UPDATE = 0x02,
79 
80     /** Ended. */
81     GESTURE_EVENT_ACTION_END = 0x04,
82 
83     /** Canceled. */
84     GESTURE_EVENT_ACTION_CANCEL = 0x08,
85 } ArkUI_GestureEventActionType;
86 
87 /**
88  * @brief Defines a set of gesture event types.
89  *
90  * Example: ArkUI_GestureEventActionTypeMask actions = GESTURE_EVENT_ACTION_ACCEPT | GESTURE_EVENT_ACTION_UPDATE;\n
91  *
92  * @since 12
93  */
94 typedef uint32_t ArkUI_GestureEventActionTypeMask;
95 
96 /**
97  * @brief Enumerates gesture event modes.
98  *
99  * @since 12
100  */
101 typedef enum {
102     /** Normal. */
103     NORMAL = 0,
104 
105     /** High-priority. */
106     PRIORITY = 1,
107 
108     /** Parallel. */
109     PARALLEL = 2,
110 } ArkUI_GesturePriority;
111 
112 /**
113  * @brief Enumerates gesture group modes.
114  *
115  * @since 12
116  */
117 typedef enum {
118     /* Sequential recognition. Gestures are recognized in the registration sequence until all gestures are recognized
119      * successfully. Once one gesture fails to be recognized, all subsequent gestures fail to be recognized.
120      * Only the last gesture in the gesture group can respond to the end event. */
121     SEQUENTIAL_GROUP = 0,
122 
123     /** Parallel recognition. Registered gestures are recognized concurrently until all gestures are recognized.
124       * The recognition result of each gesture does not affect each other. */
125     PARALLEL_GROUP = 1,
126 
127     /** Exclusive recognition. Registered gestures are identified concurrently.
128       * If one gesture is successfully recognized, gesture recognition ends. */
129     EXCLUSIVE_GROUP = 2,
130 } ArkUI_GroupGestureMode;
131 
132 /**
133  * @brief Enumerates gesture directions.
134  *
135  * @since 12
136  */
137 typedef enum {
138     /** All directions. */
139     GESTURE_DIRECTION_ALL = 0b1111,
140 
141     /** Horizontal direction. */
142     GESTURE_DIRECTION_HORIZONTAL = 0b0011,
143 
144     /** Vertical direction. */
145     GESTURE_DIRECTION_VERTICAL = 0b1100,
146 
147     /** Leftward. */
148     GESTURE_DIRECTION_LEFT = 0b0001,
149 
150     /** Rightward. */
151     GESTURE_DIRECTION_RIGHT = 0b0010,
152 
153     /** Upward. */
154     GESTURE_DIRECTION_UP = 0b0100,
155 
156     /** Downward. */
157     GESTURE_DIRECTION_DOWN = 0b1000,
158 
159     /** None. */
160     GESTURE_DIRECTION_NONE = 0,
161 } ArkUI_GestureDirection;
162 
163 /**
164  * @brief Defines a set of gesture directions.
165  *
166  * Example: ArkUI_GestureDirectionMask directions = GESTURE_DIRECTION_LEFT | GESTURE_DIRECTION_RIGHT \n
167  * This example indicates that the leftward and rightward directions are supported. \n
168  *
169  * @since 12
170  */
171 typedef uint32_t ArkUI_GestureDirectionMask;
172 
173 /**
174  * @brief Enumerates gesture masking modes.
175  *
176  * @since 12
177  */
178 typedef enum {
179     /** The gestures of child components are enabled and recognized based on the default gesture recognition sequence.*/
180     NORMAL_GESTURE_MASK = 0,
181 
182     /** The gestures of child components are disabled, including the built-in gestures. */
183     IGNORE_INTERNAL_GESTURE_MASK,
184 } ArkUI_GestureMask;
185 
186 /**
187  * @brief Enumerates gesture types.
188  *
189  * @since 12
190  */
191 typedef enum {
192     /** Tap. */
193     TAP_GESTURE = 0,
194 
195     /** Long press. */
196     LONG_PRESS_GESTURE,
197 
198     /** Pan. */
199     PAN_GESTURE,
200 
201     /** Pinch. */
202     PINCH_GESTURE,
203 
204     /** Rotate. */
205     ROTATION_GESTURE,
206 
207     /** Swipe. */
208     SWIPE_GESTURE,
209 
210     /** A group of gestures. */
211     GROUP_GESTURE,
212 } ArkUI_GestureRecognizerType;
213 
214 /**
215  * @brief Enumerates gesture interruption results.
216  *
217  * @since 12
218  */
219 typedef enum {
220     /** The gesture recognition process continues. */
221     GESTURE_INTERRUPT_RESULT_CONTINUE = 0,
222 
223     /** The gesture recognition process is paused. */
224     GESTURE_INTERRUPT_RESULT_REJECT,
225 } ArkUI_GestureInterruptResult;
226 
227 /**
228  * @brief Enumerates the gesture recognizer states.
229  *
230  * @since 12
231  */
232 typedef enum {
233     /** Ready. */
234     ARKUI_GESTURE_RECOGNIZER_STATE_READY = 0,
235 
236     /** Detecting. */
237     ARKUI_GESTURE_RECOGNIZER_STATE_DETECTING = 1,
238 
239     /** Pending. */
240     ARKUI_GESTURE_RECOGNIZER_STATE_PENDING = 2,
241 
242     /** Blocked. */
243     ARKUI_GESTURE_RECOGNIZER_STATE_BLOCKED = 3,
244 
245     /** Successful. */
246     ARKUI_GESTURE_RECOGNIZER_STATE_SUCCESSFUL = 4,
247 
248     /** Failed. */
249     ARKUI_GESTURE_RECOGNIZER_STATE_FAILED = 5,
250 } ArkUI_GestureRecognizerState;
251 
252 /**
253  * @brief Defines the gesture recognizer handle.
254  *
255  * @since 12
256  */
257 typedef ArkUI_GestureRecognizer* ArkUI_GestureRecognizerHandle;
258 
259 /**
260  * @brief Defines the gesture recognizer handle array.
261  *
262  * @since 12
263  */
264 typedef ArkUI_GestureRecognizerHandle* ArkUI_GestureRecognizerHandleArray;
265 
266 /**
267  * @brief Defines a <b>GestureEventTargetInfo</b> object that provides information about a gesture event target.
268  *
269  * @since 12
270  */
271 typedef struct ArkUI_GestureEventTargetInfo ArkUI_GestureEventTargetInfo;
272 
273 /**
274  * @brief Defines a parallel internal gesture event.
275  *
276  * @since 12
277  */
278 typedef struct ArkUI_ParallelInnerGestureEvent ArkUI_ParallelInnerGestureEvent;
279 
280 /**
281  * @brief Defines a callback function for notifying gesture recognizer destruction.
282  * @since 12
283  */
284 typedef void (*ArkUI_GestureRecognizerDisposeNotifyCallback)(ArkUI_GestureRecognizer* recognizer, void* userData);
285 
286 /**
287 * @brief Checks whether a gesture is a built-in gesture of the component.
288 *
289 * @param event Indicates the pointer to the gesture interruption information.
290 * @return Returns <b>true</b> if the gesture is a built-in gesture; returns <b>false</b> otherwise.
291 
292 * @since 12
293 */
294 bool OH_ArkUI_GestureInterruptInfo_GetSystemFlag(const ArkUI_GestureInterruptInfo* event);
295 
296 /**
297 * @brief Obtains the pointer to interrupted gesture recognizer.
298 *
299 * @param event Indicates the pointer to the gesture interruption information.
300 * @return Returns the pointer to interrupted gesture recognizer.
301 * @since 12
302 */
303 ArkUI_GestureRecognizer* OH_ArkUI_GestureInterruptInfo_GetRecognizer(const ArkUI_GestureInterruptInfo* event);
304 
305 /**
306 * @brief Obtains the pointer to the interrupted gesture event.
307 *
308 * @param event Indicates the pointer to the gesture interruption information.
309 * @return Returns the pointer to the interrupted gesture event.
310 * @since 12
311 */
312 ArkUI_GestureEvent* OH_ArkUI_GestureInterruptInfo_GetGestureEvent(const ArkUI_GestureInterruptInfo* event);
313 
314 /**
315 * @brief Obtains the type of the system gesture to trigger.
316 *
317 * @param event Indicates the pointer to the gesture interruption information.
318 * @return Returns the type of the system gesture to trigger. If the gesture to trigger is not a system gesture,
319 *         <b>-1</b> is returned.
320 * @since 12
321 */
322 int32_t OH_ArkUI_GestureInterruptInfo_GetSystemRecognizerType(const ArkUI_GestureInterruptInfo* event);
323 
324 /**
325 * @brief Obtains the gesture event type.
326 *
327 * @param event Indicates the pointer to the gesture event.
328 * @return Returns the gesture event type.
329 * @since 12
330 */
331 ArkUI_GestureEventActionType OH_ArkUI_GestureEvent_GetActionType(const ArkUI_GestureEvent* event);
332 
333 /**
334 * @brief Obtains gesture input.
335 *
336 * @param event Indicates the pointer to the gesture event.
337 * @return Returns the pointer to the input event of the gesture event.
338 * @since 12
339 */
340 const ArkUI_UIInputEvent* OH_ArkUI_GestureEvent_GetRawInputEvent(const ArkUI_GestureEvent* event);
341 
342 /**
343 * @brief Obtains the number of times that a long press gesture is triggered periodically.
344 *
345 * @param event Indicates the pointer to the gesture event.
346 * @return Returns the number of times that the long press gesture is triggered periodically.
347 * @since 12
348 */
349 int32_t OH_ArkUI_LongPress_GetRepeatCount(const ArkUI_GestureEvent* event);
350 
351 /**
352 * @brief Obtains the velocity of a pan gesture along the main axis.
353 *
354 * @param event Indicates the pointer to the gesture event.
355 * @return Returns the velocity of the pan gesture along the main axis, in px/s.
356 *         The value is the square root of the sum of the squares of the velocity on the x-axis and y-axis.
357 * @since 12
358 */
359 float OH_ArkUI_PanGesture_GetVelocity(const ArkUI_GestureEvent* event);
360 
361 /**
362 * @brief Obtains the velocity of a pan gesture along the x-axis.
363 *
364 * @param event Indicates the pointer to the gesture event.
365 * @return Returns the velocity of the pan gesture along the x-axis, in px/s.
366 * @since 12
367 */
368 float OH_ArkUI_PanGesture_GetVelocityX(const ArkUI_GestureEvent* event);
369 
370 /**
371 * @brief Obtains the velocity of a pan gesture along the y-axis.
372 *
373 * @param event Indicates the pointer to the gesture event.
374 * @return Returns the velocity of the pan gesture along the y-axis, in px/s.
375 * @since 12
376 */
377 float OH_ArkUI_PanGesture_GetVelocityY(const ArkUI_GestureEvent* event);
378 
379 /**
380 * @brief Obtains the relative offset of a pan gesture along the x-axis.
381 *
382 * @param event Indicates the pointer to the gesture event.
383 * @return Returns the relative offset of the gesture along the x-axis, in px.
384 * @since 12
385 */
386 float OH_ArkUI_PanGesture_GetOffsetX(const ArkUI_GestureEvent* event);
387 
388 /**
389 * @brief Obtains the relative offset of a pan gesture along the y-axis.
390 *
391 * @param event Indicates the pointer to the gesture event.
392 * @return Returns the relative offset of the gesture along the y-axis, in px.
393 * @since 12
394 */
395 float OH_ArkUI_PanGesture_GetOffsetY(const ArkUI_GestureEvent* event);
396 
397 /**
398 * @brief Obtains the angle information of the swipe gesture.
399 *
400 * After a swipe gesture is recognized, a line connecting the two fingers is identified as the initial line.
401 * As the fingers swipe, the line between the fingers rotates. \n
402 * Based on the coordinates of the initial line's and current line's end points, the arc tangent function is used to
403 * calculate the respective included angle of the points relative to the horizontal direction \n
404 * by using the following formula: Rotation angle = arctan2(cy2-cy1,cx2-cx1) - arctan2(y2-y1,x2-x1). \n
405 * The initial line is used as the coordinate system. Values from 0 to 180 degrees represent clockwise rotation,
406 * while values from –180 to 0 degrees represent counterclockwise rotation. \n
407 *
408 * @param event Indicates the pointer to the gesture event.
409 * @return Returns the angle of the swipe gesture, which is the result obtained based on the aforementioned formula.
410 * @since 12
411 */
412 float OH_ArkUI_SwipeGesture_GetAngle(const ArkUI_GestureEvent* event);
413 
414 /**
415 * @brief Obtains the average velocity of all fingers used in the swipe gesture.
416 *
417 * @param event Indicates the pointer to the gesture event.
418 * @return Returns the average velocity of all fingers used in the swipe gesture, in px/s.
419 * @since 12
420 */
421 float OH_ArkUI_SwipeGesture_GetVelocity(const ArkUI_GestureEvent* event);
422 
423 /**
424 * @brief Obtains the angle information of a rotation gesture.
425 *
426 * @param event Indicates the pointer to the gesture event.
427 * @return Returns the rotation angle.
428 * @since 12
429 */
430 float OH_ArkUI_RotationGesture_GetAngle(const ArkUI_GestureEvent* event);
431 
432 /**
433 * @brief Obtains the scale ratio of a pinch gesture.
434 *
435 * @param event Indicates the pointer to the gesture event.
436 * @return Returns the scale ratio.
437 * @since 12
438 */
439 float OH_ArkUI_PinchGesture_GetScale(const ArkUI_GestureEvent* event);
440 
441 /**
442 * @brief Obtains the X coordinate of the center of the pinch gesture, in vp,
443 * relative to the upper left corner of the current component.
444 *
445 * @param event Indicates the pointer to the gesture event.
446 * @return Returns the X coordinate of the center of the pinch gesture, in vp,
447 * relative to the upper left corner of the current component.
448 * @since 12
449 */
450 float OH_ArkUI_PinchGesture_GetCenterX(const ArkUI_GestureEvent* event);
451 
452 /**
453 * @brief Obtains the Y coordinate of the center of the pinch gesture, in vp,
454 * relative to the upper left corner of the current component.
455 *
456 * @param event Indicates the pointer to the gesture event.
457 * @return Returns the Y coordinate of the center of the pinch gesture, in vp,
458 * relative to the upper left corner of the current component.
459 * @since 12
460 */
461 float OH_ArkUI_PinchGesture_GetCenterY(const ArkUI_GestureEvent* event);
462 
463 /**
464 * @brief Get the ARKUI component bound to the gesture.
465 *
466 * @param event gesture event.
467 * @return ARKUI component bound to the gesture.If Null is returned, it means event is an invalid value.
468 * @since 12
469 */
470 ArkUI_NodeHandle OH_ArkUI_GestureEvent_GetNode(const ArkUI_GestureEvent* event);
471 
472 /**
473 * @brief Obtains information about a gesture response chain.
474 *
475 * @param event Indicates the pointer to the gesture interruption information.
476 * @param responseChain Indicates the pointer to an array of gesture recognizers on the response chain.
477 * @param count Indicates the pointer to the number of gesture recognizers on the response chain.
478 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
479 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
480 * @since 12
481 */
482 int32_t OH_ArkUI_GetResponseRecognizersFromInterruptInfo(const ArkUI_GestureInterruptInfo* event,
483     ArkUI_GestureRecognizerHandleArray* responseChain, int32_t* count);
484 
485 /**
486 * @brief Sets the enabled state of a gesture recognizer.
487 *
488 * @param recognizer Indicates the pointer to a gesture recognizer.
489 * @param enabled Indicates the enabled state.
490 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
491 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
492 * @since 12
493 */
494 int32_t OH_ArkUI_SetGestureRecognizerEnabled(ArkUI_GestureRecognizer* recognizer, bool enabled);
495 
496 /**
497 * @brief Obtains the enabled state of a gesture recognizer.
498 *
499 * @param recognizer Indicates the pointer to a gesture recognizer.
500 * @return Returns <b>true</b> if the gesture recognizer is enabled.
501 *         Returns <b>false</b> if the gesture recognizer is disabled.
502 * @since 12
503 */
504 bool OH_ArkUI_GetGestureRecognizerEnabled(ArkUI_GestureRecognizer* recognizer);
505 
506 /**
507 * @brief Obtains the state of a gesture recognizer.
508 *
509 * @param recognizer Indicates the pointer to a gesture recognizer.
510 * @param state Indicates the pointer to the state of the gesture recognizer.
511 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
512 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
513 * @since 12
514 */
515 int32_t OH_ArkUI_GetGestureRecognizerState(ArkUI_GestureRecognizer* recognizer, ArkUI_GestureRecognizerState* state);
516 
517 /**
518 * @brief Obtains the information about a gesture event target.
519 *
520 * @param recognizer Indicates the pointer to a gesture recognizer.
521 * @param info Indicates the information about a gesture event target.
522 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
523 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
524 * @since 12
525 */
526 int32_t OH_ArkUI_GetGestureEventTargetInfo(ArkUI_GestureRecognizer* recognizer, ArkUI_GestureEventTargetInfo** info);
527 
528 /**
529 * @brief Obtains whether this scroll container is scrolled to the top.
530 *
531 * @param info Indicates the information about a gesture event target.
532 * @param ret Indicates whether the scroll container is scrolled to the top.
533 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
534 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
535 *         Returns {@link ARKUI_ERROR_CODE_NON_SCROLLABLE_CONTAINER} if the component is not a scroll container.
536 * @since 12
537 */
538 int32_t OH_ArkUI_GestureEventTargetInfo_IsScrollBegin(ArkUI_GestureEventTargetInfo* info, bool* ret);
539 
540 /**
541 * @brief Obtains whether this scroll container is scrolled to the bottom.
542 *
543 * @param info Indicates the information about a gesture event target.
544 * @param ret Indicates whether the scroll container is scrolled to the bottom.
545 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
546 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
547 *         Returns {@link ARKUI_ERROR_CODE_NON_SCROLLABLE_CONTAINER} if the component is not a scroll container.
548 * @since 12
549 */
550 int32_t OH_ArkUI_GestureEventTargetInfo_IsScrollEnd(ArkUI_GestureEventTargetInfo* info, bool* ret);
551 
552 /**
553 * @brief Obtains the direction of a pan gesture.
554 *
555 * @param recognizer Indicates the pointer to a gesture recognizer.
556 * @param directionMask Indicates the pan direction.
557 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
558 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
559 * @since 12
560 */
561 int32_t OH_ArkUI_GetPanGestureDirectionMask(ArkUI_GestureRecognizer* recognizer,
562     ArkUI_GestureDirectionMask* directionMask);
563 
564 /**
565 * @brief Obtains whether a gesture is a built-in gesture.
566 *
567 * @param recognizer Indicates the pointer to a gesture recognizer.
568 * @return Returns <b>true</b> if the gesture is a built-in gesture; returns <b>false</b> otherwise.
569 * @since 12
570 */
571 bool OH_ArkUI_IsBuiltInGesture(ArkUI_GestureRecognizer* recognizer);
572 
573 /**
574 * @brief Obtains the tag of a gesture recognizer.
575 *
576 * @param recognizer Indicates the pointer to a gesture recognizer.
577 * @param buffer Indicates the buffer.
578 * @param bufferSize Indicates the buffer size.
579 * @param result Indicates the length of the string to be written to the buffer.
580 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
581 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
582 *         Returns {@link ARKUI_ERROR_CODE_BUFFER_SIZE_NOT_ENOUGH} if the buffer is not large enough.
583 * @since 12
584 */
585 int32_t OH_ArkUI_GetGestureTag(ArkUI_GestureRecognizer* recognizer, char* buffer, int32_t bufferSize, int32_t* result);
586 
587 /**
588 * @brief Obtains the ID of the component linked to a gesture recognizer.
589 *
590 * @param recognizer Indicates the pointer to a gesture recognizer.
591 * @param nodeId Indicates the component ID.
592 * @param size Indicates the buffer size.
593 * @param result Indicates the length of the string to be written to the buffer.
594 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
595 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
596 *         Returns {@link ARKUI_ERROR_CODE_BUFFER_SIZE_NOT_ENOUGH} if the buffer is not large enough.
597 * @since 12
598 */
599 int32_t OH_ArkUI_GetGestureBindNodeId(ArkUI_GestureRecognizer* recognizer, char* nodeId, int32_t size,
600     int32_t* result);
601 
602 /**
603 * @brief Obtains whether a gesture recognizer is valid.
604 *
605 * @param recognizer Indicates the pointer to a gesture recognizer.
606 * @return Returns <b>true</b> if the gesture recognizer is valid.
607 *         Returns <b>false</b> if the gesture recognizer is invalid.
608 * @since 12
609 */
610 bool OH_ArkUI_IsGestureRecognizerValid(ArkUI_GestureRecognizer* recognizer);
611 
612 /**
613 * @brief Obtains custom data in the parallel internal gesture event.
614 *
615 * @param event Indicates the pointer to a parallel internal gesture event.
616 * @return Returns the pointer to custom data.
617 * @since 12
618 */
619 void* OH_ArkUI_ParallelInnerGestureEvent_GetUserData(ArkUI_ParallelInnerGestureEvent* event);
620 
621 /**
622 * @brief Obtains the current gesture recognizer in a parallel internal gesture event.
623 *
624 * @param event Indicates the pointer to a parallel internal gesture event.
625 * @return Returns the pointer to the current gesture recognizer.
626 * @since 12
627 */
628 ArkUI_GestureRecognizer* OH_ArkUI_ParallelInnerGestureEvent_GetCurrentRecognizer(
629     ArkUI_ParallelInnerGestureEvent* event);
630 
631 /**
632 * @brief Obtains the conflicting gesture recognizers in a parallel internal gesture event.
633 *
634 * @param event Indicates the pointer to a parallel internal gesture event.
635 * @param array Indicates the pointer to the array of conflicting gesture recognizers.
636 * @param size Indicates the size of the array of conflicting gesture recognizers.
637 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
638 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
639 * @since 12
640 */
641 int32_t OH_ArkUI_ParallelInnerGestureEvent_GetConflictRecognizers(ArkUI_ParallelInnerGestureEvent* event,
642     ArkUI_GestureRecognizerHandleArray* array, int32_t* size);
643 
644 /**
645 * @brief Sets a callback function for notifying gesture recognizer destruction.
646 *
647 * @param recognizer Indicates the pointer to a gesture recognizer.
648 * @param callback Indicates the callback function for notifying gesture recognizer destruction.
649 * @param userData Indicates the custom data.
650 * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
651 *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
652 */
653 int32_t OH_ArkUI_SetArkUIGestureRecognizerDisposeNotify(ArkUI_GestureRecognizer* recognizer,
654     ArkUI_GestureRecognizerDisposeNotifyCallback callback, void* userData);
655 
656 /**
657  * @brief Defines the gesture APIs.
658  *
659  * @since 12
660  */
661 typedef struct {
662     /** The struct version is 1. */
663     int32_t version;
664 
665     /**
666     * @brief Creates a tap gesture.
667     *
668     *        1. This API is used to trigger a tap gesture with one, two, or more taps. \n
669     *        2. If multi-tap is configured, the timeout interval between a lift and the next tap is 300 ms. \n
670     *        3. If the distance between the last tapped position and the current tapped position exceeds 60 vp,
671     *           gesture recognition fails. \n
672     *        4. If the value is greater than 1, the tap gesture will fail to be recognized when the number of fingers
673     *           touching the screen within 300 ms of the first finger touch is less than the required number, \n
674     *           or when the number of fingers lifted from the screen within 300 ms of the first finger's being lifted
675     *           is less than the required number. \n
676     *        5. When the number of fingers touching the screen exceeds the set value, the gesture can be recognized. \n
677     *
678     * @param countNum Indicates the number of consecutive taps. If the value is less than 1 or is not set,
679     *        the default value <b>1</b> is used.
680     * @param fingersNum Indicates the number of fingers required to trigger a tap. The value ranges
681     *        from 1 to 10. If the value is less than 1 or is not set, the default value <b>1</b> is used.
682     * @return Returns the pointer to the created gesture.
683     */
684     ArkUI_GestureRecognizer* (*createTapGesture)(int32_t countNum, int32_t fingersNum);
685 
686     /**
687     * @brief Creates a long press gesture.
688     *
689     *        1. This API is used to trigger a long press gesture, which requires one or more fingers with a minimum
690     *           The value ranges 500 ms hold-down time. \n
691     *        2. In components that support drag actions by default, such as <b><Text></b>, <b><TextInput></b>,
692     *           <b><TextArea></b>, <b><Hyperlink></b>, <b><Image></b>, and <b>RichEditor></b>, the long press gesture \n
693     *           may conflict with the drag action. If this occurs, they are handled as follows: \n
694     *           If the minimum duration of the long press gesture is less than 500 ms, the long press gesture receives
695     *           a higher response priority than the drag action. \n
696     *           If the minimum duration of the long press gesture is greater than or equal to 500 ms,
697     *           the drag action receives a higher response priority than the long press gesture. \n
698     *        3. If a finger moves more than 15 px after being pressed, the gesture recognition fails. \n
699     *
700     * @param fingersNum Indicates the minimum number of fingers to trigger a long press gesture.
701     *        The value ranges from 1 to 10.
702     * @param repeatResult Indicates whether to continuously trigger the event callback.
703     * @param durationNum Indicates the minimum hold-down time, in ms.
704     *        If the value is less than or equal to 0, the default value <b>500</b> is used.
705     * @return Returns the pointer to the created gesture.
706     */
707     ArkUI_GestureRecognizer* (*createLongPressGesture)(int32_t fingersNum, bool repeatResult, int32_t durationNum);
708 
709     /**
710     * @brief Creates a pan gesture.
711     *
712     *        1. This API is used to trigger a pan gesture when the movement distance of a finger on the screen exceeds
713     *           the minimum value. \n
714     *        2. If a pan gesture and a tab swipe occur at the same time, set <b>distanceNum</b> to <b>1</b>
715     *           so that the gesture can be more easily recognized. \n
716     *
717     * @param fingersNum Indicates the minimum number of fingers to trigger a pan gesture. The value ranges from 1 to 10.
718     *        If the value is less than 1 or is not set, the default value <b>1</b> is used.
719     * @param directions Indicates the pan direction. The value supports the AND (&amp;) and OR (\|) operations.
720     * @param distanceNum Indicates the minimum pan distance to trigger the gesture, in vp. If this parameter is
721     *        set to a value less than or equal to 0, the default value <b>5</b> is used.
722     * @return Returns the pointer to the created gesture.
723     */
724     ArkUI_GestureRecognizer* (*createPanGesture)(
725         int32_t fingersNum, ArkUI_GestureDirectionMask directions, double distanceNum);
726 
727     /**
728     * @brief Creates a pinch gesture.
729     *
730     *        1. This API is used to trigger a pinch gesture, which requires two to five fingers with a minimum 5 vp
731     *           distance between the fingers. \n
732     *        2. While more fingers than the minimum number can be pressed to trigger the gesture, only the first
733     *           fingers of the minimum number participate in gesture calculation. \n
734     *
735     * @param fingersNum Indicates the minimum number of fingers to trigger a pinch. The value ranges from 2 to 5.
736     *        Default value: <b>2</b>
737     * @param distanceNum Indicates the minimum recognition distance, in px. If this parameter is set to a value less
738     *        than or equal to 0, the default value <b>5</b> is used.
739     * @return Returns the pointer to the created gesture.
740     */
741     ArkUI_GestureRecognizer* (*createPinchGesture)(int32_t fingersNum, double distanceNum);
742 
743     /**
744     * @brief Creates a rotation gesture.
745     *
746     *        1. This API is used to trigger a rotation gesture, which requires two to five fingers with a
747     *           minimum 1-degree rotation angle. \n
748     *        2. While more fingers than the minimum number can be pressed to trigger the gesture, only the first
749     *           two fingers participate in gesture calculation. \n
750     *
751     * @param fingersNum Indicates the minimum number of fingers to trigger a rotation. The value ranges from 2 to 5.
752     *        Default value: <b>2</b>
753     * @param angleNum Indicates the minimum degree that can trigger the rotation gesture. Default value: <b>1</b>
754     *        If this parameter is set to a value less than or equal to 0 or greater than 360,
755     *        the default value <b>1</b> is used.
756     * @return Returns the pointer to the created gesture.
757     */
758     ArkUI_GestureRecognizer* (*createRotationGesture)(int32_t fingersNum, double angleNum);
759 
760     /**
761     * @brief Creates a swipe gesture.
762     *
763     *        This API is used to implement a swipe gesture, which can be recognized when the swipe speed is 100
764     *        vp/s or higher. \n
765     *
766     * @param fingersNum Indicates the minimum number of fingers to trigger a swipe gesture.
767     *        The value ranges from 1 to 10.
768     * @param directions Indicates the swipe direction.
769     * @param speedNum Indicates the minimum speed of the swipe gesture, in px/s.
770     *        If this parameter is set to a value less than or equal to 0, the default value <b>100</b> is used.
771     * @return Returns the pointer to the created gesture.
772     */
773     ArkUI_GestureRecognizer* (*createSwipeGesture)(
774         int32_t fingersNum, ArkUI_GestureDirectionMask directions, double speedNum);
775 
776     /**
777     * @brief Creates a gesture group.
778     *
779     * @param gestureMode Indicates the gesture group mode.
780     * @return Returns the pointer to the created gesture group.
781     */
782     ArkUI_GestureRecognizer* (*createGroupGesture)(ArkUI_GroupGestureMode gestureMode);
783 
784     /**
785     * @brief Disposes a gesture to release resources.
786     *
787     * @param recognizer Indicates the pointer to the gesture to dispose.
788     */
789     void (*dispose)(ArkUI_GestureRecognizer* recognizer);
790 
791     /**
792     * @brief Adds a gesture to a gesture group.
793     *
794     * @param group Indicates the pointer to the gesture group.
795     * @param child Indicates the gesture to be added to the gesture group.
796     * @return Returns <b>0</b> if success.
797     *         Returns <b>401</b> if a parameter exception occurs. Returns 401 if a parameter exception occurs.
798     */
799     int32_t (*addChildGesture)(ArkUI_GestureRecognizer* group, ArkUI_GestureRecognizer* child);
800 
801     /**
802     * @brief Removes a gesture to a gesture group.
803     *
804     * @param group Indicates the pointer to the gesture group.
805     * @param child Indicates the gesture to be removed to the gesture group.
806     * @return Returns <b>0</b> if success.
807     *         Returns <b>401</b> if a parameter exception occurs.
808     */
809     int32_t (*removeChildGesture)(ArkUI_GestureRecognizer* group, ArkUI_GestureRecognizer* child);
810 
811     /**
812     * @brief Registers a callback for gestures.
813     *
814     * @param recognizer Indicates the pointer to the gesture recognizer.
815     * @param actionTypeMask Indicates the set of gesture event types. Multiple callbacks can be registered at once,
816     *        with the callback event types distinguished in the callbacks.
817     *        Example: actionTypeMask = GESTURE_EVENT_ACTION_ACCEPT | GESTURE_EVENT_ACTION_UPDATE;
818     * @param extraParams Indicates the context passed in the <b>targetReceiver</b> callback.
819     * @param targetReceiver Indicates the callback to register for processing the gesture event types.
820     *        <b>event</b> indicates the gesture callback data.
821     * @return Returns <b>0</b> if success.
822     *         Returns <b>401</b> if a parameter exception occurs.
823     */
824     int32_t (*setGestureEventTarget)(
825         ArkUI_GestureRecognizer* recognizer, ArkUI_GestureEventActionTypeMask actionTypeMask, void* extraParams,
826         void (*targetReceiver)(ArkUI_GestureEvent* event, void* extraParams));
827 
828     /**
829     * @brief Adds a gesture to a UI component.
830     *
831     * @param node Indicates the UI component to which you want to add the gesture.
832     * @param recognizer Indicates the gesture to be added to the UI component.
833     * @param mode Indicates the gesture event mode. Available options are <b>NORMAL_GESTURE</b>,
834     *        <b>PARALLEL_GESTURE</b>, and <b>PRIORITY_GESTURE</b>.
835     * @param mask Indicates the gesture masking mode.
836     * @return Returns <b>0</b> if success.
837     *         Returns <b>401</b> if a parameter exception occurs.
838     */
839     int32_t (*addGestureToNode)(
840         ArkUI_NodeHandle node, ArkUI_GestureRecognizer* recognizer, ArkUI_GesturePriority mode, ArkUI_GestureMask mask);
841 
842     /**
843     * @brief Removes a gesture from a node.
844     *
845     * @param node Indicates the node from which you want to remove the gesture.
846     * @param recognizer Indicates the gesture to be removed.
847     * @return Returns <b>0</b> if success.
848     * Returns <b>401</b> if a parameter exception occurs.
849     */
850     int32_t (*removeGestureFromNode)(ArkUI_NodeHandle node, ArkUI_GestureRecognizer* recognizer);
851 
852     /**
853     * @brief Sets a gesture interruption callback for a node.
854     *
855     * @param node Indicates the node for which you want to set a gesture interruption callback.
856     * @param interrupter Indicates the gesture interruption callback to set.
857     *        <b>info</b> indicates the gesture interruption data. If <b>interrupter</b> returns
858     *        <b>GESTURE_INTERRUPT_RESULT_CONTINUE</b>, the gesture recognition process continues. If it returns
859     *        <b>GESTURE_INTERRUPT_RESULT_REJECT</b>, the gesture recognition process is paused.
860     * @return Returns <b>0</b> if success.
861     * Returns <b>401</b> if a parameter exception occurs.
862     */
863     int32_t (*setGestureInterrupterToNode)(
864         ArkUI_NodeHandle node, ArkUI_GestureInterruptResult (*interrupter)(ArkUI_GestureInterruptInfo* info));
865 
866     /**
867     * @brief Obtains the type of a gesture.
868     *
869     * @param recognizer Indicates the pointer to the gesture.
870     * @return Returns the gesture type.
871     */
872     ArkUI_GestureRecognizerType (*getGestureType)(ArkUI_GestureRecognizer* recognizer);
873 
874     /**
875     * @brief Sets the callback function for a parallel internal gesture event.
876     *
877     * @param node Indicates the ArkUI node for which the callback of a parallel internal gesture event is to be set.
878     * @param userData Indicates the custom data.
879     * @param parallelInnerGesture Indicates the parallel internal gesture event. <b>event</b> returns the data of the
880     *        parallel internal gesture event; <b>parallelInnerGesture</b> returns the pointer to the gesture recognizer
881     *        that requires parallel recognition.
882     * @return Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if success.
883     *         Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter exception occurs.
884     */
885     int32_t (*setInnerGestureParallelTo)(
886         ArkUI_NodeHandle node, void* userData, ArkUI_GestureRecognizer* (*parallelInnerGesture)(
887             ArkUI_ParallelInnerGestureEvent* event));
888 
889     /**
890     * @brief Creates a tap gesture that is subject to distance restrictions.
891     *
892     *        1. This API is used to trigger a tap gesture with one, two, or more taps. \n
893     *        2. If multi-tap is configured, the timeout interval between a lift and the next tap is 300 ms. \n
894     *        3. If the distance between the last tapped position and the current tapped position exceeds 60 vp,
895     *           gesture recognition fails. \n
896     *        4. If the value is greater than 1, the tap gesture will fail to be recognized when the number of fingers
897     *           touching the screen within 300 ms of the first finger touch is less than the required number,
898     *           or when the number of fingers lifted from the screen within 300 ms of the first finger's being lifted
899     *           is less than the required number. \n
900     *        5. When the number of fingers touching the screen exceeds the set value, the gesture can be recognized. \n
901     *        6. If the finger moves beyond the preset distance limit, gesture recognition fails. \n
902     *
903     * @param countNum Indicates the number of consecutive taps. If the value is less than 1 or is not set, the default
904     *        value <b>1</b> is used.
905     * @param fingersNum Indicates the number of fingers required to trigger a tap. The value ranges from 1 to 10.
906     *        If the value is less than 1 or is not set, the default value <b>1</b> is used.
907     * @param distanceThreshold Indicates the allowed moving distance of a finger.
908     *        If the value is less than 0 or is not set, it will be converted to the default value of infinity.
909     * @return Returns the pointer to the created gesture.
910     */
911     ArkUI_GestureRecognizer* (*createTapGestureWithDistanceThreshold)(
912         int32_t countNum, int32_t fingersNum, double distanceThreshold);
913 } ArkUI_NativeGestureAPI_1;
914 
915 #ifdef __cplusplus
916 };
917 #endif
918 
919 #endif // ARKUI_NATIVE_GESTTURE_H
920 /** @} */
921