diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts index ef3f45d0faf016f82a2cb04f619786593b2a905b..add8b41c74b517e54df95c3fd56584b43434975a 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts @@ -164,4 +164,12 @@ export class ArkUIAniModule { native static _Common_SetCustomPropertyCallBack(ptr: KPointer, removeCallback: () => void, getCallback: (name: string) => string | undefined): void native static _Common_getCustomProperty(ptr: KPointer, key: string): string | undefined + + // for Dynamic Static Covert + native static _createDragEventAccessorWithPointer(input: KPointer) : KPointer + native static _createClickEventAccessorWithPointer(input: KPointer) : KPointer + native static _createHoverEventAccessorWithPointer(input: KPointer) : KPointer + native static _getDragEventPointer(input: KPointer): KPointer + native static _getClickEventPointer(input: KPointer): KPointer + native static _getHoverEventPointer(input: KPointer): KPointer } diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp index 1e01a250d98c3f82b59642f07bd47f08552483d7..6230fcc8439ffa1dfafc37bdb3b9d5b6685a7d95 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp @@ -413,4 +413,59 @@ ani_string GetCustomProperty( } return nullptr; } + +ani_long CreateDragEventAccessorWithPointer(ani_env *env, ani_object obj, ani_long pointer) +{ + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getCommonAniModifier() || !env) { + return 0; + } + return modifier->getCommonAniModifier()->transferDragEventPointer(pointer); +} + +ani_long CreateClickEventAccessorWithPointer(ani_env *env, ani_object obj, ani_long pointer) +{ + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getCommonAniModifier() || !env) { + return 0; + } + return modifier->getCommonAniModifier()->transferClickEventPointer(pointer); +} + + +ani_long CreateHoverEventAccessorWithPointer(ani_env *env, ani_object obj, ani_long pointer) +{ + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getCommonAniModifier() || !env) { + return 0; + } + return modifier->getCommonAniModifier()->transferHoverEventPointer(pointer); +} + +ani_long GetDragEventPointer(ani_env *env, ani_object obj, ani_long pointer) +{ + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getCommonAniModifier() || !env) { + return 0; + } + return modifier->getCommonAniModifier()->getDragEventPointer(pointer); +} + +ani_long GetClickEventPointer(ani_env *env, ani_object obj, ani_long pointer) +{ + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getCommonAniModifier() || !env) { + return 0; + } + return modifier->getCommonAniModifier()->getClickEventPointer(pointer); +} + +ani_long GetHoverEventPointer(ani_env *env, ani_object obj, ani_long pointer) +{ + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getCommonAniModifier() || !env) { + return 0; + } + return modifier->getCommonAniModifier()->getHoverEventPointer(pointer); +} } // namespace OHOS::Ace::Ani diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h index b0dd235b1a06c4a2f5a19f72b75945884e2f5950..998186d735e4f92871467ee0527e0c65326f0326 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h @@ -45,6 +45,12 @@ void SetParallelScoped(ani_env* env, ani_object obj, ani_boolean parallel); void SetCustomPropertyCallBack( ani_env* env, ani_object aniClass, ani_long node, ani_fn_object removeCallback, ani_fn_object getCallback); ani_string GetCustomProperty(ani_env* env, ani_object aniClass, ani_long node, ani_string aniKey); +ani_long CreateDragEventAccessorWithPointer(ani_env *env, ani_object obj, ani_long pointer); +ani_long CreateClickEventAccessorWithPointer(ani_env *env, ani_object obj, ani_long pointer); +ani_long CreateHoverEventAccessorWithPointer(ani_env *env, ani_object obj, ani_long pointer); +ani_long GetDragEventPointer(ani_env *env, ani_object obj, ani_long pointer); +ani_long GetClickEventPointer(ani_env *env, ani_object obj, ani_long pointer); +ani_long GetHoverEventPointer(ani_env *env, ani_object obj, ani_long pointer); } // namespace OHOS::Ace::Ani #endif // KOALA_PROJECTS_ARKOALA_ARKTS_ARKUI_OHOS_ANI_NATIVE_COMMON_MODULE diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp index 2f6516cfb4be5f142647ef290e06fc6ac556643c..c1e07a4876374358ed7b830e7e52aea9e590ba7c 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp @@ -482,6 +482,36 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) nullptr, reinterpret_cast(OHOS::Ace::Ani::GetCustomProperty) }, + ani_native_function { + "_createDragEventAccessorWithPointer", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::CreateDragEventAccessorWithPointer) + }, + ani_native_function { + "_createClickEventAccessorWithPointer", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::CreateClickEventAccessorWithPointer) + }, + ani_native_function { + "_createHoverEventAccessorWithPointer", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::CreateHoverEventAccessorWithPointer) + }, + ani_native_function { + "_getDragEventPointer", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::GetDragEventPointer) + }, + ani_native_function { + "_getClickEventPointer", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::GetClickEventPointer) + }, + ani_native_function { + "_getHoverEventPointer", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::GetHoverEventPointer) + }, }; auto bindRst = env->Class_BindNativeMethods(cls, methods.data(), methods.size()); diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/component/common.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/component/common.ts index 50d9945ace1ed2ea9e281eeaa348eea74a1d9e81..527fed5b1b80c6f20d52661ee5d70c8ddb2266f7 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/component/common.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/component/common.ts @@ -941,6 +941,28 @@ export class DragEventInternal implements MaterializedBase,DragEvent { obj.peer = new Finalizable(ptr, DragEventInternal.getFinalizer()) return obj } + + public static transferStatic(input: Any): Object { + if (input === null || typedef(input) !== 'object') { + throw Error("The input is not object, transferStatic fail") + } + + let esValue : ESValue = ESValue.wrap(input) + let convertResult = esValue.invokeMethod('getDragEventPointer') + let ptr: long = convertResult.toNumber() + let peer = ArkUIAniModule_._createDragEventAccessorWithPointer(ptr) + return fromPtr(peer) + } + + public static transferDynamic(input :Object): Any { + if (input === null) { + return new Object(); + } + let dragEvent : DragEventInternal = input as DragEventInternal + let ptr = ArkUIAniModule_._getDragEventPointer(dragEvent.peer!.ptr) + let retvalue = ESValue.instantiateEmptyObject() + return retvalue + } } export type CustomStyles = (instance: CommonMethod) => void; @@ -11901,6 +11923,31 @@ export class ClickEventInternal extends BaseEventInternal implements Materialize obj.peer = new Finalizable(ptr, ClickEventInternal.getFinalizer()) return obj } + + public static transferStatic(input: Any): Object { + if (input === null || typedef(input) !== 'object') { + throw Error("The input is not object, transferStatic fail") + } + + let esValue : ESValue = ESValue.wrap(input) + const global = esValue.getGlobal() + const bindFunc = global.getProperty('getClickEventPointer') + if (bindFunc.isNull() || bindFunc.isUndefined()) { + throw Error("Can't get input native pointer, transferStatic fail") + } + let convertResult = bindFunc.invoke(esValue) + let ptr: long = convertResult.toNumber() + let peer = ArkUIAniModule_._createClickEventAccessorWithPointer(ptr) + return fromPtr(peer) + } + + public static transferDynamic(input :Object): Any { + if (input === null) { + return new Object(); + } + let retvalue = ESValue.instantiateEmptyObject() + return retvalue + } } export interface HoverEvent { x?: number | undefined @@ -12172,6 +12219,31 @@ export class HoverEventInternal extends BaseEventInternal implements Materialize obj.peer = new Finalizable(ptr, HoverEventInternal.getFinalizer()) return obj } + + public static transferStatic(input: Any): Object { + if (input === null || typedef(input) !== 'object') { + throw Error("The input is not object, transferStatic fail") + } + + let esValue : ESValue = ESValue.wrap(input) + const global = esValue.getGlobal() + const bindFunc = global.getProperty('getHoverEventPointer') + if (bindFunc.isNull() || bindFunc.isUndefined()) { + throw Error("Can't get input native pointer, transferStatic fail") + } + let convertResult = bindFunc.invoke(esValue) + let ptr: long = convertResult.toNumber() + let peer = ArkUIAniModule_._createHoverEventAccessorWithPointer(ptr) + return fromPtr(peer) + } + + public static transferDynamic(input :Object): Any { + if (input === null) { + return new Object(); + } + let retvalue = ESValue.instantiateEmptyObject() + return retvalue + } } export interface MouseEvent { button: MouseButton diff --git a/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.cpp b/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.cpp index 6513bec52b9af1c4689738dac83fa3680454d8b1..1408a671fabe684f29f41aa49a8bdafc4cb273c6 100644 --- a/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.cpp +++ b/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.cpp @@ -130,6 +130,9 @@ void JsDragEvent::JSBind(BindingTarget globalObj) JSClass::CustomMethod("getModifierKeyState", &JsDragEvent::GetModifierKeyState); JSClass::CustomMethod("executeDropAnimation", &JsDragEvent::ExecuteDropAnimation); JSClass::CustomMethod("startDataLoading", &JsDragEvent::StartDataLoading); + //use for ArkTs1.2 + JSClass::CustomMethod("getDragEventPointer", &JsDragEvent::GetDragEventPointer); + JSClass::CustomMethod("wrapDragEventPointer", &JsDragEvent::WrapDragEventPointer); JSClass::Bind(globalObj, &JsDragEvent::Constructor, &JsDragEvent::Destructor); } @@ -552,4 +555,23 @@ JSRef JsDragFunction::CreateItemDragInfo(const ItemDragInfo& info) return itemDragInfoObj; } +//use for ArkTs1.2 +void JsDragEvent::GetDragEventPointer(const JSCallbackInfo& args) +{ + CHECK_NULL_VOID(dragEvent_); + auto dragPointer = JSVal(ToJSValue(&dragEvent_)); + auto value = JSRef::Make(dragPointer); + args.SetReturnValue(value); +} + +void JsDragEvent::WrapDragEventPointer(const JSCallbackInfo& args) +{ + if (!args[0]->IsNumber()) { + return; + } + auto dragEventPtr = reinterpret_cast(args[0]->ToNumber()); + auto dragEventWeak = AceType::WeakClaim(dragEventPtr); + dragEvent_ = dragEventWeak.Upgrade(); +} + } // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.h b/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.h index c48ea782c626d5baad8bd11755f4e60f996d908b..acb647c26d939eb802ca148cba5ac308cafe8cb1 100644 --- a/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.h +++ b/frameworks/bridge/declarative_frontend/engine/functions/js_drag_function.h @@ -84,6 +84,10 @@ public: } void StartDataLoading(const JSCallbackInfo& args); + //use for ArkTs1.2 + void GetDragEventPointer(const JSCallbackInfo& args); + void WrapDragEventPointer(const JSCallbackInfo& args); + private: static void Constructor(const JSCallbackInfo& args); static void Destructor(JsDragEvent* dragEvent); diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register.cpp index 67db7597d775521d1c87753ef8165752abb68c47..b5160811b3710f5c782d4880a1e6e00cfc01b45b 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register.cpp @@ -42,6 +42,7 @@ #include "frameworks/bridge/declarative_frontend/engine/jsi/jsi_container_app_bar_register.h" #include "frameworks/bridge/declarative_frontend/engine/jsi/jsi_container_modal_view_register.h" #include "frameworks/bridge/declarative_frontend/engine/jsi/jsi_object_template.h" +#include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h" namespace OHOS::Ace::Framework { namespace { @@ -1159,6 +1160,69 @@ panda::Local Px2Lpx(panda::JsiRuntimeCallInfo* runtimeCallInf return panda::NumberRef::New(vm, lpxValue); } +//use for ArkTs1.2 +panda::Local ConvertClickEventPointer(panda::JsiRuntimeCallInfo* runtimeCallInfo) +{ + ContainerScope scope(Container::CurrentIdSafely()); + EcmaVM* vm = runtimeCallInfo->GetVM(); + Local thisObj = runtimeCallInfo->GetCallArgRef(0); + auto eventInfo = static_cast(panda::Local(thisObj)->GetNativePointerField(vm, 0)); + if (!eventInfo) { + return JSValueRef::Undefined(vm); + } + return panda::NumberRef::New(vm, reinterpret_cast(eventInfo)); +} + +panda::Local ConvertHoverEventPointer(panda::JsiRuntimeCallInfo* runtimeCallInfo) +{ + ContainerScope scope(Container::CurrentIdSafely()); + EcmaVM* vm = runtimeCallInfo->GetVM(); + Local thisObj = runtimeCallInfo->GetCallArgRef(0); + auto eventInfo = static_cast(panda::Local(thisObj)->GetNativePointerField(vm, 0)); + if (!eventInfo) { + return JSValueRef::Undefined(vm); + } + return panda::NumberRef::New(vm, reinterpret_cast(eventInfo)); +} + +panda::Local WrapClickEventPointer(panda::JsiRuntimeCallInfo* runtimeCallInfo) +{ + ContainerScope scope(Container::CurrentIdSafely()); + EcmaVM* vm = runtimeCallInfo->GetVM(); + Local thisObj = runtimeCallInfo->GetCallArgRef(0); + panda::Local dynamicEvent = panda::Local(thisObj); + dynamicEvent->Set(vm, panda::StringRef::NewFromUtf8(vm, "stopPropagation"), + panda::FunctionRef::New(vm, Framework::JsStopPropagation)); + dynamicEvent->Set(vm, panda::StringRef::NewFromUtf8(vm, "getModifierKeyState"), + panda::FunctionRef::New(vm, NG::ArkTSUtils::JsGetModifierKeyState)); + Local pointerObj = runtimeCallInfo->GetCallArgRef(1); + if (!pointerObj->IsNull() && !pointerObj->IsUndefined()) { + auto nativePointer = static_cast(pointerObj->ToNumber(vm)->Value()); + dynamicEvent->SetNativePointerFieldCount(vm, 1); + dynamicEvent->SetNativePointerField(vm, 0, reinterpret_cast(nativePointer)); + } + return panda::NumberRef::Undefined(vm); +} + +panda::Local WrapHoverEventPointer(panda::JsiRuntimeCallInfo* runtimeCallInfo) +{ + ContainerScope scope(Container::CurrentIdSafely()); + EcmaVM* vm = runtimeCallInfo->GetVM(); + Local thisObj = runtimeCallInfo->GetCallArgRef(0); + panda::Local dynamicEvent = panda::Local(thisObj); + dynamicEvent->Set(vm, panda::StringRef::NewFromUtf8(vm, "stopPropagation"), + panda::FunctionRef::New(vm, Framework::JsStopPropagation)); + dynamicEvent->Set(vm, panda::StringRef::NewFromUtf8(vm, "getModifierKeyState"), + panda::FunctionRef::New(vm, NG::ArkTSUtils::JsGetModifierKeyState)); + Local pointerObj = runtimeCallInfo->GetCallArgRef(1); + if (!pointerObj->IsNull() && !pointerObj->IsUndefined()) { + auto nativePointer = static_cast(pointerObj->ToNumber(vm)->Value()); + dynamicEvent->SetNativePointerFieldCount(vm, 1); + dynamicEvent->SetNativePointerField(vm, 0, reinterpret_cast(nativePointer)); + } + return panda::NumberRef::Undefined(vm); +} + panda::Local SetAppBackgroundColor(panda::JsiRuntimeCallInfo* runtimeCallInfo) { ContainerScope scope(Container::CurrentIdSafely()); @@ -1337,6 +1401,15 @@ void JsRegisterFormViews( panda::FunctionRef::New(const_cast(vm), Lpx2Px)); globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "px2lpx"), panda::FunctionRef::New(const_cast(vm), Px2Lpx)); + //use for ArkTs1.2 + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "convertClickEventPointer"), + panda::FunctionRef::New(const_cast(vm), ConvertClickEventPointer)); + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "convertHoverEventPointer"), + panda::FunctionRef::New(const_cast(vm), ConvertHoverEventPointer)); + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "wrapClickEventPointer"), + panda::FunctionRef::New(const_cast(vm), WrapClickEventPointer)); + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "wrapHoverEventPointer"), + panda::FunctionRef::New(const_cast(vm), WrapHoverEventPointer)); globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "setAppBgColor"), panda::FunctionRef::New(const_cast(vm), SetAppBackgroundColor)); globalObj->Set(vm, @@ -1525,6 +1598,15 @@ void JsRegisterViews(BindingTarget globalObj, void* nativeEngine) panda::FunctionRef::New(const_cast(vm), Lpx2Px)); globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "px2lpx"), panda::FunctionRef::New(const_cast(vm), Px2Lpx)); + //use for ArkTs1.2 + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "convertClickEventPointer"), + panda::FunctionRef::New(const_cast(vm), ConvertClickEventPointer)); + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "convertHoverEventPointer"), + panda::FunctionRef::New(const_cast(vm), ConvertHoverEventPointer)); + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "wrapClickEventPointer"), + panda::FunctionRef::New(const_cast(vm), WrapClickEventPointer)); + globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "wrapHoverEventPointer"), + panda::FunctionRef::New(const_cast(vm), WrapHoverEventPointer)); globalObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "setAppBgColor"), panda::FunctionRef::New(const_cast(vm), SetAppBackgroundColor)); globalObj->Set(vm, diff --git a/frameworks/core/interfaces/ani/ani_api.h b/frameworks/core/interfaces/ani/ani_api.h index 825de664ddfe80759b3165ce41729e8e29a8971d..f38b181e492110938be2d089d4e3d1916801d8a3 100644 --- a/frameworks/core/interfaces/ani/ani_api.h +++ b/frameworks/core/interfaces/ani/ani_api.h @@ -115,6 +115,12 @@ struct ArkUIAniCommonModifier { ani_env* env, ArkUINodeHandle node, std::function&& func, std::function&& getFunc); std::string (*getCustomProperty)(ani_env* env, ArkUINodeHandle node, std::string& key); + ani_long (*transferDragEventPointer)(ani_long ptr); + ani_long (*transferClickEventPointer)(ani_long ptr); + ani_long (*transferHoverEventPointer)(ani_long ptr); + ani_long (*getDragEventPointer)(ani_long ptr); + ani_long (*getClickEventPointer)(ani_long ptr); + ani_long (*getHoverEventPointer)(ani_long ptr); }; struct ArkUIAniCustomNodeModifier { ani_long (*constructCustomNode)(ani_int); diff --git a/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp b/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp index bdb86256bd886642f4defeb06ae48f1e1157e91c..73cc411b5d96d6bb4703ddeb3289fea30e84d879 100644 --- a/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp +++ b/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp @@ -24,6 +24,9 @@ #include "core/components_ng/base/view_abstract.h" #include "core/components_ng/pattern/stack/stack_pattern.h" #include "core/interfaces/native/implementation/frame_node_peer_impl.h" +#include "core/interfaces/native/implementation/drag_event_peer.h" +#include "core/interfaces/native/implementation/click_event_peer.h" +#include "core/interfaces/native/implementation/hover_event_peer.h" #include "core/pipeline/base/element_register.h" #include "core/pipeline_ng/pipeline_context.h" #include "bridge/arkts_frontend/ani_graphics_module.h" @@ -276,6 +279,58 @@ static std::string GetCustomProperty(ani_env* env, ArkUINodeHandle node, std::st } } +ani_long TransferDragEventPointer(ani_long ptr) +{ + CHECK_NULL_RETURN(ptr, 0); + auto weak = OHOS::Ace::AceType::WeakClaim(reinterpret_cast(ptr)); + auto dragEvent = weak.Upgrade(); + CHECK_NULL_RETURN(dragEvent, 0); + auto peer = DragEventPeer::Create(dragEvent); + return reinterpret_cast(peer); +} + +ani_long TransferClickEventPointer(ani_long ptr) +{ + CHECK_NULL_RETURN(ptr, 0); + auto peer = HoverEventPeer::Create(reinterpret_cast(ptr)); + return reinterpret_cast(peer); +} + +ani_long TransferHoverEventPointer(ani_long ptr) +{ + CHECK_NULL_RETURN(ptr, 0); + auto peer = ClickEventPeer::Create(reinterpret_cast(ptr)); + return reinterpret_cast(peer); +} + +ani_long GetDragEventPointer(ani_long ptr) +{ + CHECK_NULL_RETURN(ptr, 0); + auto peer = reinterpret_cast(ptr); + CHECK_NULL_RETURN(peer, 0); + auto dragInfo = peer->dragInfo; + CHECK_NULL_RETURN(dragInfo, 0); + return reinterpret_cast(AceType::RawPtr(dragInfo)); +} + +ani_long GetClickEventPointer(ani_long ptr) +{ + CHECK_NULL_RETURN(ptr, 0); + auto peer = reinterpret_cast(ptr); + CHECK_NULL_RETURN(peer, 0); + auto eventInfo = peer->GetEventInfo(); + return reinterpret_cast(eventInfo); +} + +ani_long GetHoverEventPointer(ani_long ptr) +{ + CHECK_NULL_RETURN(ptr, 0); + auto peer = reinterpret_cast(ptr); + CHECK_NULL_RETURN(peer, 0); + auto eventInfo = peer->GetEventInfo(); + return reinterpret_cast(eventInfo); +} + const ArkUIAniCommonModifier* GetCommonAniModifier() { static const ArkUIAniCommonModifier impl = { @@ -298,7 +353,13 @@ const ArkUIAniCommonModifier* GetCommonAniModifier() .setOverlayComponent = OHOS::Ace::NG::SetOverlayComponent, .setParallelScoped = OHOS::Ace::NG::SetParallelScoped, .setCustomPropertyCallBack = OHOS::Ace::NG::SetCustomPropertyCallBack, - .getCustomProperty = OHOS::Ace::NG::GetCustomProperty + .getCustomProperty = OHOS::Ace::NG::GetCustomProperty, + .transferDragEventPointer = OHOS::Ace::NG::TransferDragEventPointer, + .transferClickEventPointer = OHOS::Ace::NG::TransferClickEventPointer, + .transferHoverEventPointer = OHOS::Ace::NG::TransferHoverEventPointer, + .getDragEventPointer = OHOS::Ace::NG::GetDragEventPointer, + .getClickEventPointer = OHOS::Ace::NG::GetClickEventPointer, + .getHoverEventPointer = OHOS::Ace::NG::GetHoverEventPointer }; return &impl; } diff --git a/frameworks/core/interfaces/native/implementation/click_event_peer.h b/frameworks/core/interfaces/native/implementation/click_event_peer.h index 93b2098164289a9d717ba50d3e572310f9c139c7..3c1ff9ecb95ebb55c9d05ae8e696603d47c96be9 100644 --- a/frameworks/core/interfaces/native/implementation/click_event_peer.h +++ b/frameworks/core/interfaces/native/implementation/click_event_peer.h @@ -20,6 +20,13 @@ struct ClickEventPeer : public OHOS::Ace::NG::GeneratedModifier::SomeEventPeer { + static ClickEventPeer* Create(void* ptr) + { + auto peer = OHOS::Ace::NG::PeerUtils::CreatePeer(); + CHECK_NULL_RETURN(peer, nullptr); + peer->SetEventInfo(reinterpret_cast(ptr)); + return peer; + } protected: ClickEventPeer() = default; ~ClickEventPeer() override = default; diff --git a/frameworks/core/interfaces/native/implementation/hover_event_peer.h b/frameworks/core/interfaces/native/implementation/hover_event_peer.h index 29584fa1b05d10c268ec48783ad208572b305731..3b9a9f6527fdd5537fb9feb89d2278d6bc580b3b 100644 --- a/frameworks/core/interfaces/native/implementation/hover_event_peer.h +++ b/frameworks/core/interfaces/native/implementation/hover_event_peer.h @@ -20,6 +20,13 @@ struct HoverEventPeer : public OHOS::Ace::NG::GeneratedModifier::SomeEventPeer { + static HoverEventPeer* Create(void* ptr) + { + auto peer = OHOS::Ace::NG::PeerUtils::CreatePeer(); + CHECK_NULL_RETURN(peer, nullptr); + peer->SetEventInfo(reinterpret_cast(ptr)); + return peer; + } protected: HoverEventPeer() = default; ~HoverEventPeer() override = default;