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 (&) 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