From eff11aa9ae811b8002e54a4afee7e8e349819a20 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Mon, 1 Sep 2025 10:42:14 +0800 Subject: [PATCH] coasting axis capi Signed-off-by: wangweiyuan --- arkui/ace_engine/native/libace.ndk.json | 24 ++++++ arkui/ace_engine/native/native_node.h | 16 ++++ arkui/ace_engine/native/ui_input_event.h | 95 ++++++++++++++++++++++++ 3 files changed, 135 insertions(+) diff --git a/arkui/ace_engine/native/libace.ndk.json b/arkui/ace_engine/native/libace.ndk.json index dc3d30be4c1..2f99b8e4645 100644 --- a/arkui/ace_engine/native/libace.ndk.json +++ b/arkui/ace_engine/native/libace.ndk.json @@ -4138,5 +4138,29 @@ { "first_introduced": "21", "name": "OH_ArkUI_ContentTransitionEffect_Create" + }, + { + "first_introduced": "21", + "name": "OH_ArkUI_UIInputEvent_GetCoastingAxisEvent" + }, + { + "first_introduced": "21", + "name": "OH_ArkUI_CoastingAxisEvent_GetEventTime" + }, + { + "first_introduced": "21", + "name": "OH_ArkUI_CoastingAxisEvent_GetPhase" + }, + { + "first_introduced": "21", + "name": "OH_ArkUI_CoastingAxisEvent_GetDeltaX" + }, + { + "first_introduced": "21", + "name": "OH_ArkUI_CoastingAxisEvent_GetDeltaY" + }, + { + "first_introduced": "21", + "name": "OH_ArkUI_CoastingAxisEvent_SetPropagation" } ] \ No newline at end of file diff --git a/arkui/ace_engine/native/native_node.h b/arkui/ace_engine/native/native_node.h index 5cbcdce4fe3..ba70c98b28c 100644 --- a/arkui/ace_engine/native/native_node.h +++ b/arkui/ace_engine/native/native_node.h @@ -7546,6 +7546,22 @@ typedef enum { */ NODE_ON_SIZE_CHANGE = 30, + /** + * @brief Defines the coasting axis event. + * + * The event is triggered when user swipes with two fingers on the touchpad, the system constructs + * sliding events based on the speed at the moment the fingers are lifted, according to a certain + * decay curve. You can listen for such events to handle the flick effect immediately after the + * regular axis events. \n + * When the event callback occurs, the {@link ArkUI_UIInputEvent} object can be obtained from the + * {@link ArkUI_NodeEvent} object through {@link OH_ArkUI_NodeEvent_GetInputEvent}. + * And the {@link ArkUI_CoastingAxisEvent} object can be obtained from the {@link ArkUI_UIInputEvent} + * object through {@link OH_ArkUI_UIInputEvent_GetCoastingAxisEvent}. \n + * + * @since 21 + */ + NODE_ON_COASTING_AXIS_EVENT = 31, + /** * @brief Triggers onDetectResultUpdate callback * when the text is set to TextDataDetectorConfig and recognized successfully. diff --git a/arkui/ace_engine/native/ui_input_event.h b/arkui/ace_engine/native/ui_input_event.h index 1e74a9ff75b..af5cdd0e518 100644 --- a/arkui/ace_engine/native/ui_input_event.h +++ b/arkui/ace_engine/native/ui_input_event.h @@ -50,6 +50,20 @@ extern "C" { */ typedef struct ArkUI_UIInputEvent ArkUI_UIInputEvent; +/** + * @brief Defines the coasting axis event. + * When a user swipes with two fingers on the touchpad, the system constructs + * sliding events based on the speed at the moment the fingers are lifted according to + * a certain decay curve. You can listen for such events to handle the flick effect + * immediately after the regular axis events. + * + * It only can be received when user flings on the touchpad with two fingers and any components register + * NODE_ON_COASTING_AXIS_EVENT through {@link registerNodeEvent} exist under the pointer location. + * + * @since 21 + */ +typedef struct ArkUI_CoastingAxisEvent ArkUI_CoastingAxisEvent; + /** * @brief Enumerates the UI input event types. * @@ -69,6 +83,22 @@ typedef enum { ARKUI_UIINPUTEVENT_TYPE_KEY = 4, } ArkUI_UIInputEvent_Type; +/** + * @brief Enumerates the coasting axis event phases. + * + * @since 21 + */ +typedef enum { + /** Idle phase, indicating no-coasting phase. */ + ARKUI_COASTING_AXIS_EVENT_PHASE_NONE = 0, + /** Coasting begin, this is the first coasting event. */ + ARKUI_COASTING_AXIS_EVENT_PHASE_BEGIN = 1, + /** Coasting ongoing. */ + ARKUI_COASTING_AXIS_EVENT_PHASE_UPDATE = 2, + /** Coasting end, this is the last coasting event. */ + ARKUI_COASTING_AXIS_EVENT_PHASE_END = 3, +} ArkUI_CoastingAxisEventPhase; + /** * @brief Defines the action code of the input event. * @@ -1395,6 +1425,71 @@ int32_t OH_ArkUI_PointerEvent_PostClonedEvent(ArkUI_NodeHandle node, const ArkUI */ ArkUI_ErrorCode OH_ArkUI_UIInputEvent_GetLatestStatus(); +/** + * @brief Obtains the coasting axis event from a component event, valid event only can be + * fetched only when user flings on the touchpad with two fingers and any components register + * NODE_ON_COASTING_AXIS_EVENT exist under the pointer location. + * Call this method after the {@link ArkUI_UIInputEvent} object is obtained from the {@link ArkUI_NodeEvent} object. + * + * @param event Indicates the pointer to the UI input event. + * @return Returns the pointer to the coasting axis event, return null if no any coasting axis event occurs. + * @since 21 + */ +ArkUI_CoastingAxisEvent* OH_ArkUI_UIInputEvent_GetCoastingAxisEvent(ArkUI_UIInputEvent* event); + +/** + * @brief Obtains the time when this coasting event occurs. + * + * @param event Indicates the pointer to the coasting axis event. + * @return Returns the time when the UI input event occurs; returns 0 if any parameter error occurs. + * + * @since 21 + */ +int64_t OH_ArkUI_CoastingAxisEvent_GetEventTime(ArkUI_CoastingAxisEvent* event); + +/** + * @brief Obtains the coasting phase when this coasting event occurs. + * + * @param event Indicates the pointer to the coasting axis event. + * @return Returns the event phase, see {@link ArkUI_CoastingAxisEventPhase}; + * returns ARKUI_COASTING_AXIS_EVENT_PHASE_NONE if any parameter error occurs. + * + * @since 21 + */ +ArkUI_CoastingAxisEventPhase OH_ArkUI_CoastingAxisEvent_GetPhase(ArkUI_CoastingAxisEvent* event); + +/** + * @brief Obtains the horizontal delta value. + * + * @param event Indicates the pointer to the coasting axis event. + * @return Returns delta X value, count in PX; returns 0 if any parameter error occurs. + * + * @since 21 + */ +float OH_ArkUI_CoastingAxisEvent_GetDeltaX(ArkUI_CoastingAxisEvent* event); + +/** + * @brief Obtains the vertical delta value. + * + * @param event Indicates the pointer to the coasting axis event. + * @return Returns delta Y value, count in PX; returns 0 if any parameter error occurs. + * + * @since 21 + */ +float OH_ArkUI_CoastingAxisEvent_GetDeltaY(ArkUI_CoastingAxisEvent* event); + +/** + * @brief Sets whether to enable coasting axis event propagation. + * + * @param event Pointer to the coasting axis event. + * @param propagation Whether to enable event propagation. + * @return Returns the result code. + * Returns {@link ARKUI_ERROR_CODE_NO_ERROR} if the operation is successful. + * Returns {@link ARKUI_ERROR_CODE_PARAM_INVALID} if a parameter error occurs. + * @since 21 + */ +int32_t OH_ArkUI_CoastingAxisEvent_SetPropagation(ArkUI_CoastingAxisEvent* event, bool propagation); + #ifdef __cplusplus }; #endif -- Gitee