From 76df480e23d91ab9efd4d441c45469596f200479 Mon Sep 17 00:00:00 2001 From: mlyuestc Date: Fri, 8 Aug 2025 11:44:56 +0000 Subject: [PATCH] add touchevent info Signed-off-by: mlyuestc --- adapter/ohos/entrance/mmi_event_convertor.cpp | 16 +++++++++++++++- adapter/ohos/entrance/mmi_event_convertor.h | 4 +++- adapter/ohos/entrance/touch_event_convertor.cpp | 9 +++++++-- .../core/interfaces/arkoala/arkoala_api.h | 1 + .../native/node/node_common_modifier.cpp | 13 +++++++++++-- .../native/node/touch_event_convertor.h | 3 ++- interfaces/native/event/ui_input_event.cpp | 6 +++--- interfaces/native/node/event_converter.cpp | 17 +++++++++++++++++ interfaces/native/node/event_converter.h | 1 + 9 files changed, 60 insertions(+), 10 deletions(-) diff --git a/adapter/ohos/entrance/mmi_event_convertor.cpp b/adapter/ohos/entrance/mmi_event_convertor.cpp index 69506e7e9f7..99e810e6a30 100644 --- a/adapter/ohos/entrance/mmi_event_convertor.cpp +++ b/adapter/ohos/entrance/mmi_event_convertor.cpp @@ -308,12 +308,26 @@ void SetClonedPointerEvent(const MMI::PointerEvent* pointerEvent, ArkUITouchEven } } -void SetPostPointerEvent(const MMI::PointerEvent* pointerEvent, TouchEvent& touchEvent) +void SetPostPointerEvent(TouchEvent& touchEvent, ArkUITouchEvent* arkUITouchEventCloned) { + MMI::PointerEvent* pointerEvent = reinterpret_cast(arkUITouchEventCloned->rawPointerEvent); + if (pointerEvent) { + MMI::PointerEvent* clonedEvent = new MMI::PointerEvent(*pointerEvent); + arkUITouchEventCloned->rawPointerEvent = clonedEvent; + } std::shared_ptr pointer(pointerEvent); touchEvent.SetPointerEvent(pointer); } +void DestroyRawPointerEvent(ArkUITouchEvent* arkUITouchEvent) +{ + MMI::PointerEvent* pointerEvent = reinterpret_cast(arkUITouchEvent->rawPointerEvent); + if (pointerEvent) { + delete pointerEvent; + pointerEvent = nullptr; + } +} + TouchEvent ConvertTouchEvent(const std::shared_ptr& pointerEvent) { CHECK_NULL_RETURN(pointerEvent, TouchEvent()); diff --git a/adapter/ohos/entrance/mmi_event_convertor.h b/adapter/ohos/entrance/mmi_event_convertor.h index f0678b2ee2f..23afd50e584 100644 --- a/adapter/ohos/entrance/mmi_event_convertor.h +++ b/adapter/ohos/entrance/mmi_event_convertor.h @@ -115,7 +115,9 @@ bool GetPointerEventToolType(const std::shared_ptr& pointerEv void SetClonedPointerEvent(const MMI::PointerEvent* pointerEvent, ArkUITouchEvent* arkUITouchEventCloned); -void SetPostPointerEvent(const MMI::PointerEvent* pointerEvent, TouchEvent& touchEvent); +void SetPostPointerEvent(TouchEvent& touchEvent, ArkUITouchEvent* arkUITouchEventCloned); + +void DestroyRawPointerEvent(ArkUITouchEvent* arkUITouchEvent); TouchType GetTouchTypeFromPointerEvent(const std::shared_ptr& pointerEvent); diff --git a/adapter/ohos/entrance/touch_event_convertor.cpp b/adapter/ohos/entrance/touch_event_convertor.cpp index d548a789a13..bd53405401b 100644 --- a/adapter/ohos/entrance/touch_event_convertor.cpp +++ b/adapter/ohos/entrance/touch_event_convertor.cpp @@ -42,9 +42,14 @@ void SetClonedPointerEvent(const MMI::PointerEvent* pointerEvent, ArkUITouchEven Platform::SetClonedPointerEvent(pointerEvent, arkUITouchEventCloned); } -void SetPostPointerEvent(const MMI::PointerEvent* pointerEvent, TouchEvent& touchEvent) +void SetPostPointerEvent(TouchEvent& touchEvent, ArkUITouchEvent* arkUITouchEventCloned) { - Platform::SetPostPointerEvent(pointerEvent, touchEvent); + Platform::SetPostPointerEvent(touchEvent, arkUITouchEventCloned); +} + +void DestroyRawPointerEvent(ArkUITouchEvent* arkUITouchEvent) +{ + Platform::DestroyRawPointerEvent(arkUITouchEvent); } TouchType GetTouchEventType(const std::shared_ptr& pointerEvent) diff --git a/frameworks/core/interfaces/arkoala/arkoala_api.h b/frameworks/core/interfaces/arkoala/arkoala_api.h index 527b3a3e207..67485adab5a 100644 --- a/frameworks/core/interfaces/arkoala/arkoala_api.h +++ b/frameworks/core/interfaces/arkoala/arkoala_api.h @@ -2786,6 +2786,7 @@ struct ArkUICommonModifier { void (*dispatchKeyEvent)(ArkUINodeHandle node, ArkUIKeyEvent* arkUIkeyEvent); ArkUI_Int32 (*postTouchEvent)(ArkUINodeHandle node, const ArkUITouchEvent* arkUItouchEvent); void (*createClonedTouchEvent)(ArkUITouchEvent* arkUITouchEventCloned, const ArkUITouchEvent* arkUITouchEvent); + void (*destroyTouchEvent)(ArkUITouchEvent* arkUITouchEvent); void (*resetEnableAnalyzer)(ArkUINodeHandle node); void (*setEnableAnalyzer)(ArkUINodeHandle node, ArkUI_Bool enable); void (*setNodeBackdropBlur)( diff --git a/frameworks/core/interfaces/native/node/node_common_modifier.cpp b/frameworks/core/interfaces/native/node/node_common_modifier.cpp index 34031aa39e8..bd00e4162b0 100644 --- a/frameworks/core/interfaces/native/node/node_common_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_common_modifier.cpp @@ -8375,8 +8375,8 @@ ArkUI_Int32 PostTouchEvent(ArkUINodeHandle node, const ArkUITouchEvent* arkUITou touchEvent.globalDisplayX = arkUITouchEvent->actionTouchPoint.globalDisplayX * density; touchEvent.globalDisplayY = arkUITouchEvent->actionTouchPoint.globalDisplayY * density; touchEvent.originalId = arkUITouchEvent->actionTouchPoint.id; - MMI::PointerEvent* pointerEvent = reinterpret_cast(arkUITouchEvent->rawPointerEvent); - NG::SetPostPointerEvent(pointerEvent, touchEvent); + ArkUITouchEvent* arkUITouchEventCloned = const_cast(arkUITouchEvent); + NG::SetPostPointerEvent(touchEvent, arkUITouchEventCloned); return PostTouchEventToFrameNode(node, touchEvent); } @@ -8452,6 +8452,14 @@ void SetHistoryTouchEvent(ArkUITouchEvent* arkUITouchEventCloned, const ArkUITou } } +void DestroyTouchEvent(ArkUITouchEvent* arkUITouchEvent) +{ + CHECK_NULL_VOID(arkUITouchEvent); + NG::DestroyRawPointerEvent(arkUITouchEvent); + delete arkUITouchEvent; + arkUITouchEvent = nullptr; +} + void CreateClonedTouchEvent(ArkUITouchEvent* arkUITouchEventCloned, const ArkUITouchEvent* arkUITouchEvent) { if (!arkUITouchEventCloned || !arkUITouchEvent) { @@ -9251,6 +9259,7 @@ const ArkUICommonModifier* GetCommonModifier() .dispatchKeyEvent = DispatchKeyEvent, .postTouchEvent = PostTouchEvent, .createClonedTouchEvent = CreateClonedTouchEvent, + .destroyTouchEvent = DestroyTouchEvent, .resetEnableAnalyzer = nullptr, .setEnableAnalyzer = nullptr, .setNodeBackdropBlur = SetNodeBackdropBlur, diff --git a/frameworks/core/interfaces/native/node/touch_event_convertor.h b/frameworks/core/interfaces/native/node/touch_event_convertor.h index 2c8d24235ec..ab0889156de 100644 --- a/frameworks/core/interfaces/native/node/touch_event_convertor.h +++ b/frameworks/core/interfaces/native/node/touch_event_convertor.h @@ -25,7 +25,8 @@ namespace OHOS::Ace::NG { void ConvertToMouseEvent(MouseEvent& event, const std::shared_ptr& srcPointerEvent); void ConvertToAxisEvent(AxisEvent& event, const std::shared_ptr& srcPointerEvent); void SetClonedPointerEvent(const MMI::PointerEvent* pointerEvent, ArkUITouchEvent* arkUITouchEventCloned); - void SetPostPointerEvent(const MMI::PointerEvent* pointerEvent, TouchEvent& touchEvent); + void SetPostPointerEvent(TouchEvent& touchEvent, ArkUITouchEvent* arkUITouchEventCloned); + void DestroyRawPointerEvent(ArkUITouchEvent* arkUITouchEvent); TouchType GetTouchEventType(const std::shared_ptr& pointerEvent); AxisAction GetAxisEventType(const std::shared_ptr& pointerEvent); MouseAction GetMouseEventType(const std::shared_ptr& pointerEvent); diff --git a/interfaces/native/event/ui_input_event.cpp b/interfaces/native/event/ui_input_event.cpp index da36eba663d..87373183098 100644 --- a/interfaces/native/event/ui_input_event.cpp +++ b/interfaces/native/event/ui_input_event.cpp @@ -3676,8 +3676,8 @@ int32_t OH_ArkUI_PointerEvent_DestroyClonedEvent(const ArkUI_UIInputEvent* event } auto* touchEvent = reinterpret_cast(event->inputEvent); if (touchEvent) { - delete touchEvent; - touchEvent = nullptr; + auto fullImpl = OHOS::Ace::NodeModel::GetFullImpl(); + fullImpl->getNodeModifiers()->getCommonModifier()->destroyTouchEvent(touchEvent); } delete event; event = nullptr; @@ -3740,7 +3740,7 @@ int32_t OH_ArkUI_PointerEvent_SetClonedEventActionType(const ArkUI_UIInputEvent* if (!touchEvent) { RETURN_RET_WITH_STATUS_CHECK(OHOS::Ace::ERROR_CODE_PARAM_INVALID, ARKUI_ERROR_CODE_PARAM_INVALID); } - touchEvent->action = actionType; + touchEvent->action = OHOS::Ace::NodeModel::ConvertToOriginTouchActionType(actionType); RETURN_RET_WITH_STATUS_CHECK(OHOS::Ace::ERROR_CODE_NO_ERROR, ARKUI_ERROR_CODE_NO_ERROR); } diff --git a/interfaces/native/node/event_converter.cpp b/interfaces/native/node/event_converter.cpp index cf260969185..9aa09fbacfb 100644 --- a/interfaces/native/node/event_converter.cpp +++ b/interfaces/native/node/event_converter.cpp @@ -784,6 +784,23 @@ int32_t ConvertToCTouchActionType(int32_t originActionType) return -1; } +int32_t ConvertToOriginTouchActionType(int32_t actionType) +{ + switch (actionType) { + case UI_TOUCH_EVENT_ACTION_DOWN: + return static_cast(ORIGIN_TOUCH_ACTION_DOWN); + case UI_TOUCH_EVENT_ACTION_UP: + return static_cast(ORIGIN_TOUCH_ACTION_UP); + case UI_TOUCH_EVENT_ACTION_MOVE: + return static_cast(ORIGIN_TOUCH_ACTION_MOVE); + case UI_TOUCH_EVENT_ACTION_CANCEL: + return static_cast(ORIGIN_TOUCH_ACTION_CANCEL); + default: + break; + } + return -1; +} + int32_t ConvertToCInputEventToolType(int32_t originSourceToolType) { switch (originSourceToolType) { diff --git a/interfaces/native/node/event_converter.h b/interfaces/native/node/event_converter.h index e3a85390bb9..d9761a4f7ec 100644 --- a/interfaces/native/node/event_converter.h +++ b/interfaces/native/node/event_converter.h @@ -60,6 +60,7 @@ int32_t ConvertToCMouseActionType(int32_t originActionType); int32_t ConvertToCMouseEventButtonType(int32_t originButtonType); int32_t ConvertToCAxisActionType(int32_t originActionType); int32_t ConvertToCKeyActionType(int32_t originActionType); +int32_t ConvertToOriginTouchActionType(int32_t actionType); }; // namespace OHOS::Ace::NodeModel #endif // ARKUI_NATIVE_NODE_EVENT_CONVERTER_H -- Gitee