diff --git a/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/arkui/generated/FrameNode.ets b/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/arkui/generated/FrameNode.ets index 755bffc3d0db3e0c0b33e8b3936ca28a630638cb..b4632cfff4fc2a4c2cbbd1701f9630d4d8439964 100644 --- a/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/arkui/generated/FrameNode.ets +++ b/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/arkui/generated/FrameNode.ets @@ -244,7 +244,7 @@ export class FrameNode implements MaterializedBase { const pointer_casted = pointer as (FrameNode) return this.createByRawPtr_serialize(pointer_casted) } - public unWrapRawPtr(pointer: KPointer): FrameNode { + public unWrapRawPtr(pointer: KPointer): KPointer { const pointer_casted = pointer as (KPointer) return this.unWrapRawPtr_serialize(pointer_casted) } diff --git a/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/dummy_impl.cc b/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/dummy_impl.cc index 402a61fb6ce6a533405535d3e4d3a2d18bef7777..46a9ec8ee5b95ed72a5ff7e69e23fe3f2b500705 100644 --- a/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/dummy_impl.cc +++ b/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/dummy_impl.cc @@ -33847,8 +33847,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { appendGroupedLog(1, out); return nullptr; } - Ark_FrameNode UnWrapRawPtrImpl(Ark_FrameNode peer, - Ark_NativePointer pointer) + Ark_NativePointer UnWrapRawPtrImpl(Ark_FrameNode peer) { if (!needGroupedLog(1)) { @@ -33859,7 +33858,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { out.append(") \n"); out.append("[return reinterpret_cast(300)] \n"); appendGroupedLog(1, out); - return reinterpret_cast(300); + return reinterpret_cast(300); } } // FrameNodeAccessor namespace FrictionMotionAccessor { diff --git a/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/real_impl.cc b/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/real_impl.cc index 0ad4332f82f125381f8b6540956e664b0513fdbc..eb458cca8240564b05d9a6944024063d9b267e48 100644 --- a/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/real_impl.cc +++ b/frameworks/bridge/arkts_frontend/koala_mirror/arkoala-arkts/framework/native/src/generated/real_impl.cc @@ -14322,8 +14322,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { { return {}; } - Ark_FrameNode UnWrapRawPtrImpl(Ark_FrameNode peer, - Ark_NativePointer pointer) + Ark_NativePointer UnWrapRawPtrImpl(Ark_FrameNode peer) { return {}; } diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/generated/framework/arkts/ArkUIGeneratedNativeModule.ets b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/generated/framework/arkts/ArkUIGeneratedNativeModule.ets index bad21c899a19ed40295c7141c159484bad5a2418..b7505072dfa8dfd40da655506796498197a79194 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/generated/framework/arkts/ArkUIGeneratedNativeModule.ets +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/generated/framework/arkts/ArkUIGeneratedNativeModule.ets @@ -4023,6 +4023,10 @@ export class ArkUIGeneratedNativeModule { native static _FrameNodeExtender_unWrapRawPtr(peer: KPointer, pointer: KPointer): KPointer @ani.unsafe.Direct native static _FrameNodeExtender_getCommonEvent(peer: KPointer): KPointer + @ani.unsafe.Quick + native static _FrameNode_createByRawPtr(ptr: KPointer): KPointer + @ani.unsafe.Quick + native static _FrameNode_unWrapRawPtr(ptr: KPointer): KPointer @ani.unsafe.Direct native static _FrictionMotion_construct(friction: number, position: number, velocity: number): KPointer @ani.unsafe.Direct @@ -5867,4 +5871,6 @@ export class ArkUIGeneratedNativeModule { native static _GlobalScope_cursorControl_restoreDefault(): void @ani.unsafe.Quick native static _GlobalScope_focusControl_requestFocus(value: KStringPtr): boolean + + } diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/transfer/FrameNodeTransfer.ets b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/transfer/FrameNodeTransfer.ets new file mode 100644 index 0000000000000000000000000000000000000000..c7817d565fff25c7aafb39acf3902afc9c3ebab6 --- /dev/null +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/transfer/FrameNodeTransfer.ets @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { FrameNode, LayoutConstraint } from '../../FrameNode'; +import { KPointer } from '@koalaui/interop' +import { UIContextImpl } from '../../base/UIContextImpl'; +import { int32 } from '@koalaui/compat'; +import { ArkUIGeneratedNativeModule } from '#components' +import { UIContextTransfer } from './UIContextTransfer' +import { UIContext } from '@ohos.arkui.UIContext'; +import { RenderNode } from '../../RenderNode'; +import { BusinessError } from '#external'; +import { CustomProperty, CommonMethod, UICommonEvent, UIGestureEvent } from '../../component/common'; +import { DrawContext, Position, Size } from '../../Graphics'; +import { ComponentContent } from '../../ComponentContent'; +import { ArkUIAniModule } from 'arkui.ani'; +export class FrameNodeTransfer { + + static transferStatic(input: Any): Object { + if (typeof (input) !== 'object') { + throw Error('The FrameNode is not object convert fail.'); + } + if (input === null) { + throw Error('The FrameNode is null convert fail.'); + } + const instanceId = ESValue.wrap(input).getProperty('instanceId_').toNumber(); + let nodeType: string | undefined = undefined; + let nodeTypeESValue = ESValue.wrap(input).getProperty('type_'); + if (nodeTypeESValue.isString()) { + nodeType = nodeTypeESValue.toString(); + } + let uiContext = new UIContextImpl(instanceId as int32); + let arkUINode = ESValue.load('@ohos.arkui.node'); + let frameNodeTrans = arkUINode.getProperty('getFrameNodeRawPtr'); + let point = frameNodeTrans.invoke(input! as Object); + if (point.isUndefined()) { + throw Error("The FrameNode point is undefined object convert fail."); + } + const pointStr = point.toNumber(); + let frameNodePeerPont = ArkUIGeneratedNativeModule._FrameNode_createByRawPtr(pointStr as KPointer); + let node: FrameNode = new TransFrameNode(uiContext, nodeType, frameNodePeerPont); + return node; + } + static transferDynamic(input: Object): Any { + if (input === null) { + throw Error('The FrameNode is null convert fail.'); + } + let frameNodeStatic = input as FrameNode; + const instanceId = frameNodeStatic!.uiContext!.instanceId_; + const point = frameNodeStatic.nodePtr_; + if (point === null) { + throw Error('The FrameNode is not object convert fail.'); + } + let frameNodeRaw = ArkUIGeneratedNativeModule._FrameNode_unWrapRawPtr(point!); + let nodeType: string | undefined = frameNodeStatic.nodeType_; + let arkUINode = ESValue.load('@ohos.arkui.node'); + let frameNodeTrans = arkUINode.getProperty('createFrameNodeByTrans'); + let uiContext = UIContextTransfer.createDynamic(instanceId); + if (nodeType) { + let frameNodeWrapper = frameNodeTrans.invoke(frameNodeRaw, uiContext! as Object, nodeType); + return frameNodeWrapper.unwrap(); + } + else { + let frameNodeWrapper = frameNodeTrans.invoke(frameNodeRaw, uiContext! as Object); + return frameNodeWrapper.unwrap(); + } + } +} + +export class TransFrameNode extends FrameNode { + constructor(uiContext?: UIContext, type?: string, ptr?: KPointer) { + super(uiContext, type, ptr); + } + public isTransferred(): boolean { + return true; + } + public getRenderNode(): RenderNode | null { + const error = Error('frameNode created by transferStatic not support getRenderNode'); + throw new BusinessError(100021, error); + } + public getCustomProperty(name: string): CustomProperty { + const error = Error('frameNode created by transferStatic not support getCustomProperty'); + + throw new BusinessError(100021, error); + } + get commonAttribute(): CommonMethod { + const error = Error('frameNode created by transferStatic not support commonAttribute'); + throw new BusinessError(100021, error); + } + get commonEvent(): UICommonEvent { + const error = Error('frameNode created by transferStatic not support commonEvent'); + throw new BusinessError(100021, error); + } + get gestureEvent(): UIGestureEvent { + const error = Error('frameNode created by transferStatic not support gestureEvent'); + throw new BusinessError(100021, error); + } + public setMeasuredSize(size: Size): void { + const error = Error('frameNode created by transferStatic not support setMeasuredSize'); + throw new BusinessError(100021, error); + } + public setLayoutPosition(position: Position): void { + const error = Error('frameNode created by transferStatic not support setLayoutPosition'); + throw new BusinessError(100021, error); + } + public measure(constraint: LayoutConstraint): void { + const error = Error('frameNode created by transferStatic not support measure'); + throw new BusinessError(100021, error); + } + public layout(position: Position): void { + const error = Error('frameNode created by transferStatic not support layout'); + throw new BusinessError(100021, error); + } + public setNeedsLayout(): void { + const error = Error('frameNode created by transferStatic not support setNeedsLayout'); + throw new BusinessError(100021, error); + } + public invalidate(): void { + const error = Error('frameNode created by transferStatic not support invalidate'); + throw new BusinessError(100021, error); + } + public addComponentContent(content: ComponentContent) { + const error = Error('frameNode created by transferStatic not support addComponentContent'); + throw new BusinessError(100021, error); + } + final onDraw(context: DrawContext): void {} + final onMeasure(constraint: LayoutConstraint): void { + ArkUIAniModule._OnMeasure_InnerMeasure(this!.peer!.ptr); + } + final onLayout(position: Position): void { + ArkUIAniModule._OnLayout_InnerLayout(this!.peer!.ptr); + } +} \ No newline at end of file diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/components.gni b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/components.gni index 5fea0a266846c7d55befd0e3cb83b0925249f2ec..c84834c3e74d22ff4cabee0ac5079fcccefcd85a 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/components.gni +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/components.gni @@ -372,6 +372,7 @@ arkui_files = [ "arkui-preprocessed/arkui/framework/textFieldOps.ets", "arkui-preprocessed/arkui/handwritten/index.ets", "arkui-preprocessed/arkui/handwritten/transfer/ColorMetricsTransfer.ets", + "arkui-preprocessed/arkui/handwritten/transfer/FrameNodeTransfer.ets", "arkui-preprocessed/arkui/handwritten/transfer/LengthMetricsTransfer.ets", "arkui-preprocessed/arkui/handwritten/transfer/ResourceTransfer.ets", "arkui-preprocessed/arkui/handwritten/transfer/ShapeBaseTransfer.ets", diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/bridge_generated.cc b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/bridge_generated.cc index c0dc1983adf1b80f87db62b41c4855878146d7c3..023fdb2c67576da09de408729c5be10bc31be070 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/bridge_generated.cc +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/bridge_generated.cc @@ -29027,6 +29027,16 @@ Ark_NativePointer impl_FrameNodeExtender_getCommonEvent(Ark_NativePointer peer) return GetAccessors()->getFrameNodeExtenderAccessor()->getCommonEvent(static_cast(peer)); } KOALA_INTEROP_DIRECT_1(FrameNodeExtender_getCommonEvent, Ark_NativePointer, Ark_NativePointer) +Ark_NativePointer impl_FrameNodeExtender_createByRawPtr(Ark_NativePointer thisPtr) { + void* self = reinterpret_cast(thisPtr); + return GetAccessors()->getFrameNodeAccessor()->createByRawPtr(self); +} +KOALA_INTEROP_1(FrameNodeExtender_createByRawPtr, Ark_NativePointer, Ark_NativePointer) +Ark_NativePointer impl_FrameNodeExtender_unWrapRawPtr(Ark_NativePointer thisPtr) { + Ark_FrameNode self = reinterpret_cast(thisPtr); + return GetAccessors()->getFrameNodeAccessor()->unWrapRawPtr(self); +} +KOALA_INTEROP_1(FrameNode_unWrapRawPtr, Ark_NativePointer, Ark_NativePointer) Ark_NativePointer impl_FrictionMotion_construct(KInteropNumber friction, KInteropNumber position, KInteropNumber velocity) { return GetAccessors()->getFrictionMotionAccessor()->construct((const Ark_Number*) (&friction), (const Ark_Number*) (&position), (const Ark_Number*) (&velocity)); } diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/dummy_impl.cc b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/dummy_impl.cc index a2e699ee8ec35094ca5d59a53fe45afd8afe158c..e033647b007487ee6dcc8f15e71167bcb6d6af11 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/dummy_impl.cc +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/dummy_impl.cc @@ -29739,8 +29739,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { appendGroupedLog(1, out); return nullptr; } - Ark_FrameNode UnWrapRawPtrImpl(Ark_FrameNode peer, - Ark_NativePointer pointer) + Ark_NativePointer UnWrapRawPtrImpl(Ark_FrameNode peer) { if (!needGroupedLog(1)) { @@ -29753,7 +29752,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { out.append(") \n"); out.append("[return reinterpret_cast(300)] \n"); appendGroupedLog(1, out); - return reinterpret_cast(300); + return reinterpret_cast(300); } Ark_UICommonEvent GetCommonEventImpl(Ark_FrameNode peer) { diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/real_impl.cc b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/real_impl.cc index 55607e632d4466f9146a88bb995a6773601eb796..da64b68e6c62fa39d4fcc5c15c9f60f4eb9040e6 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/real_impl.cc +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/framework/native/src/generated/real_impl.cc @@ -12879,8 +12879,7 @@ namespace OHOS::Ace::NG::GeneratedModifier { { return {}; } - Ark_FrameNode UnWrapRawPtrImpl(Ark_FrameNode peer, - Ark_NativePointer pointer) + Ark_FrameNode UnWrapRawPtrImpl(Ark_FrameNode peer) { return {}; } diff --git a/frameworks/core/interfaces/native/implementation/frame_node_extender_accessor.cpp b/frameworks/core/interfaces/native/implementation/frame_node_extender_accessor.cpp index a5cdbec80a270280779c777b33dd2f752ad1a917..7da2bc79533e4c309c213533127626eb7b7a2fb5 100644 --- a/frameworks/core/interfaces/native/implementation/frame_node_extender_accessor.cpp +++ b/frameworks/core/interfaces/native/implementation/frame_node_extender_accessor.cpp @@ -771,10 +771,11 @@ Ark_NativePointer CreateByRawPtrImpl(Ark_FrameNode peer, auto returnPeer = FrameNodePeer::Create(frameNode); return returnPeer; } -Ark_FrameNode UnWrapRawPtrImpl(Ark_FrameNode peer, - Ark_NativePointer pointer) +Ark_NativePointer UnWrapRawPtrImpl(Ark_FrameNode peer) { - return peer; + auto frameNode = FrameNodePeer::GetFrameNodeByPeer(reinterpret_cast(peer)); + auto frameNodeRaw = Referenced::RawPtr(frameNode); + return reinterpret_cast(frameNodeRaw); } Ark_UICommonEvent GetCommonEventImpl(Ark_FrameNode peer) {