From c82c7cb641e462db120b0d406c7e1aa1075b9a2b Mon Sep 17 00:00:00 2001 From: smorozov Date: Mon, 18 Aug 2025 17:32:39 +0300 Subject: [PATCH 1/2] capi RenderNodeAccessor initial commit Signed-off-by: smorozov Change-Id: I9297acd272eb43f8109ed8f6da0407c6ddf62449 --- .../native/ani/common_ani_modifier.cpp | 2 +- .../implementation/frame_node_peer_impl.h | 2 +- .../implementation/render_node_accessor.cpp | 4 +- .../implementation/render_node_peer_impl.h | 52 ++++++++++++------- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp b/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp index c2f4e848c4f..825978ffbea 100644 --- a/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp +++ b/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp @@ -225,7 +225,7 @@ ani_long CreateRenderNodePeerWithNodePtr(ani_long ptr) { FrameNode* node = reinterpret_cast(ptr); auto nodePtr = AceType::Claim(node); - auto peerPtr = RenderNodePeer::Create(nodePtr); + auto peerPtr = PeerUtils::CreatePeer(nodePtr); ani_long ret = reinterpret_cast(peerPtr); return ret; } diff --git a/frameworks/core/interfaces/native/implementation/frame_node_peer_impl.h b/frameworks/core/interfaces/native/implementation/frame_node_peer_impl.h index 7f33e4fc2fd..9262d8590a6 100644 --- a/frameworks/core/interfaces/native/implementation/frame_node_peer_impl.h +++ b/frameworks/core/interfaces/native/implementation/frame_node_peer_impl.h @@ -95,7 +95,7 @@ struct FrameNodePeer { RenderNodePeer* GetRenderNodePeer() { - return RenderNodePeer::Create(GetFrameNodeByPeer(this)); + return OHOS::Ace::NG::PeerUtils::CreatePeer(GetFrameNodeByPeer(this)); } }; #endif // FOUNDATION_ARKUI_ACE_ENGINE_FRAMEWORKS_CORE_INTERFACES_NATIVE_IMPL_FRAME_NODE_PEER_IMPL_H diff --git a/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp b/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp index f8fa0411ccd..21c3e220683 100644 --- a/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp +++ b/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp @@ -49,14 +49,14 @@ DimensionUnit ConvertLengthMetricsUnitToDimensionUnit(Ark_Int32 unitValue, Dimen namespace RenderNodeAccessor { void DestroyPeerImpl(Ark_RenderNode peer) { - RenderNodePeer::Destroy(peer); + PeerUtils::DestroyPeer(peer); } Ark_RenderNode CtorImpl(Ark_Int32 nodeId, const DrawCallbackFunc* value) { auto frameNode = NG::FrameNode::GetOrCreateFrameNode( V2::RENDER_NODE_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); frameNode->SetIsArkTsRenderNode(true); - auto renderNodePeer = RenderNodePeer::Create(frameNode); + auto renderNodePeer = PeerUtils::CreatePeer(frameNode); return renderNodePeer; } Ark_NativePointer GetFinalizerImpl() diff --git a/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h b/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h index 9d08618df99..a979e268a45 100644 --- a/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h +++ b/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h @@ -15,42 +15,54 @@ #ifndef FOUNDATION_ARKUI_ACE_ENGINE_FRAMEWORKS_CORE_INTERFACES_NATIVE_IMPL_RENDER_NODE_PEER_IMPL_H #define FOUNDATION_ARKUI_ACE_ENGINE_FRAMEWORKS_CORE_INTERFACES_NATIVE_IMPL_RENDER_NODE_PEER_IMPL_H -#include "base/memory/referenced.h" -#include "core/components_ng/base/frame_node.h" #include "core/interfaces/native/generated/interface/arkoala_api_generated.h" +#include "core/components_ng/pattern/render_node/render_node_pattern.h" +#include "core/interfaces/native/utility/peer_utils.h" +#include "core/components_ng/base/frame_node.h" +#include "base/memory/referenced.h" -struct RenderNodePeer { +struct RenderNodePeer final { public: - RenderNodePeer() = default; - RenderNodePeer(const OHOS::Ace::RefPtr& src) : node(src) {} - ~RenderNodePeer() = default; - - static RenderNodePeer* Create(Ark_UIContext uiContext) + enum class LengthMetricsUnit : int32_t { DEFAULT = 0, PX }; + LengthMetricsUnit lengthMetricsUnit{ LengthMetricsUnit::DEFAULT }; + std::optional shadowAlpha{ std::nullopt }; + std::string label = ""; + friend OHOS::Ace::NG::PeerUtils; + const OHOS::Ace::RefPtr& GetFrameNode() const { - return new RenderNodePeer; + return node; } - static RenderNodePeer* Create(const OHOS::Ace::RefPtr& src) - { - return new RenderNodePeer(src); - } +protected: + OHOS::Ace::RefPtr node; - static RenderNodePeer* Create(OHOS::Ace::NG::FrameNode* src) + RenderNodePeer() { - return new RenderNodePeer(OHOS::Ace::Referenced::Claim(src)); + auto nodeId = OHOS::Ace::ElementRegister::GetInstance()->MakeUniqueId(); + node = OHOS::Ace::NG::FrameNode::GetOrCreateFrameNode( + OHOS::Ace::V2::RENDER_NODE_ETS_TAG, + nodeId, + []() { return OHOS::Ace::AceType::MakeRefPtr(); }); + node->SetIsArkTsRenderNode(true); } - static void Destroy(RenderNodePeer* peer) + RenderNodePeer(const OHOS::Ace::RefPtr& src) + : node(src) { - delete peer; + if (node) { + node->SetIsArkTsRenderNode(true); + } } - const OHOS::Ace::RefPtr& GetFrameNode() const + RenderNodePeer(OHOS::Ace::NG::FrameNode* src) + : node(OHOS::Ace::Referenced::Claim(src)) { - return node; + if (node) { + node->SetIsArkTsRenderNode(true); + } } private: - OHOS::Ace::RefPtr node; + ~RenderNodePeer() = default; }; #endif // FOUNDATION_ARKUI_ACE_ENGINE_FRAMEWORKS_CORE_INTERFACES_NATIVE_IMPL_RENDER_NODE_PEER_IMPL_H -- Gitee From c2ae9f71f855d25094d48005360190e70ed0e642 Mon Sep 17 00:00:00 2001 From: smorozov Date: Tue, 19 Aug 2025 18:49:15 +0300 Subject: [PATCH 2/2] after review Signed-off-by: smorozov Change-Id: I27171b59f3f96f2ef4b9e6bb56fa5914449170a0 --- .../native/implementation/render_node_accessor.cpp | 1 - .../native/implementation/render_node_peer_impl.h | 14 ++------------ .../interfaces/native/utility/ace_engine_types.h | 2 ++ 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp b/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp index 21c3e220683..c191566032b 100644 --- a/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp +++ b/frameworks/core/interfaces/native/implementation/render_node_accessor.cpp @@ -31,7 +31,6 @@ namespace OHOS::Ace::NG { namespace GeneratedModifier { namespace { constexpr int32_t ARK_UNION_UNDEFINED = 1; -enum class LengthMetricsUnit : int32_t { DEFAULT = 0, PX }; DimensionUnit ConvertLengthMetricsUnitToDimensionUnit(Ark_Int32 unitValue, DimensionUnit defaultUnit) { diff --git a/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h b/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h index a979e268a45..1b1ea607a65 100644 --- a/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h +++ b/frameworks/core/interfaces/native/implementation/render_node_peer_impl.h @@ -17,14 +17,14 @@ #include "core/interfaces/native/generated/interface/arkoala_api_generated.h" #include "core/components_ng/pattern/render_node/render_node_pattern.h" +#include "core/interfaces/native/utility/ace_engine_types.h" #include "core/interfaces/native/utility/peer_utils.h" #include "core/components_ng/base/frame_node.h" #include "base/memory/referenced.h" struct RenderNodePeer final { public: - enum class LengthMetricsUnit : int32_t { DEFAULT = 0, PX }; - LengthMetricsUnit lengthMetricsUnit{ LengthMetricsUnit::DEFAULT }; + OHOS::Ace::NG::LengthMetricsUnit lengthMetricsUnit{ OHOS::Ace::NG::LengthMetricsUnit::DEFAULT }; std::optional shadowAlpha{ std::nullopt }; std::string label = ""; friend OHOS::Ace::NG::PeerUtils; @@ -36,16 +36,6 @@ public: protected: OHOS::Ace::RefPtr node; - RenderNodePeer() - { - auto nodeId = OHOS::Ace::ElementRegister::GetInstance()->MakeUniqueId(); - node = OHOS::Ace::NG::FrameNode::GetOrCreateFrameNode( - OHOS::Ace::V2::RENDER_NODE_ETS_TAG, - nodeId, - []() { return OHOS::Ace::AceType::MakeRefPtr(); }); - node->SetIsArkTsRenderNode(true); - } - RenderNodePeer(const OHOS::Ace::RefPtr& src) : node(src) { diff --git a/frameworks/core/interfaces/native/utility/ace_engine_types.h b/frameworks/core/interfaces/native/utility/ace_engine_types.h index 0ef0c4948cb..05f5c37ce6d 100644 --- a/frameworks/core/interfaces/native/utility/ace_engine_types.h +++ b/frameworks/core/interfaces/native/utility/ace_engine_types.h @@ -31,6 +31,8 @@ struct KeyboardOptions { struct PathShapeOptions { std::optional commands; }; + +enum class LengthMetricsUnit : int32_t { DEFAULT = 0, PX }; } namespace OHOS::Ace::NG::Converter { -- Gitee