• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "ui/view/components/custom_node.h"
17 
18 #include "interfaces/inner_api/ace_kit/src/view/frame_node_impl.h"
19 #include "interfaces/inner_api/ace_kit/src/view/ui_context_impl.h"
20 #include "ui/base/referenced.h"
21 
22 #include "core/components_ng/pattern/custom_node_ext/custom_node_ext_model_ng.h"
23 
24 namespace OHOS::Ace::Kit {
25 
CustomNode(const RefPtr<FrameNode> aceNode)26 CustomNode::CustomNode(const RefPtr<FrameNode> aceNode)
27 {
28     node_ = aceNode;
29 }
30 
31 CustomNode::~CustomNode() = default;
32 
Create(const std::string & tag)33 RefPtr<CustomNode> CustomNode::Create(const std::string& tag)
34 {
35     auto aceNode = NG::CustomNodeExtModelNG::CreateFrameNode(tag);
36     return Referenced::MakeRefPtr<CustomNode>(AceType::MakeRefPtr<FrameNodeImpl>(aceNode));
37 }
38 
GetOrCreateFrameNode(const std::string & tag)39 RefPtr<CustomNode> CustomNode::GetOrCreateFrameNode(const std::string& tag)
40 {
41     auto aceNode = NG::CustomNodeExtModelNG::GetOrCreateFrameNode(tag);
42     return Referenced::MakeRefPtr<CustomNode>(AceType::MakeRefPtr<FrameNodeImpl>(aceNode));
43 }
44 
SetOnWindowFocusedCallback(const NodeHandle node,void (* onWindowFocused)(NodeHandle node))45 void CustomNode::SetOnWindowFocusedCallback(const NodeHandle node, void (*onWindowFocused)(NodeHandle node))
46 {
47     auto* frameNode = reinterpret_cast<AceNode*>(node);
48     CHECK_NULL_VOID(frameNode);
49 
50     auto onWindowFocusedCallback = [node, onWindowFocused]() {
51         onWindowFocused(node);
52     };
53     NG::CustomNodeExtModelNG::SetOnWindowFocusedCallback(frameNode, std::move(onWindowFocusedCallback));
54 }
55 
SetOnWindowUnfocusedCallback(const NodeHandle node,void (* onWindowUnfocused)(NodeHandle node))56 void CustomNode::SetOnWindowUnfocusedCallback(const NodeHandle node, void (*onWindowUnfocused)(NodeHandle node))
57 {
58     auto* frameNode = reinterpret_cast<AceNode*>(node);
59     CHECK_NULL_VOID(frameNode);
60 
61     auto onWindowUnfocusedCallback = [node, onWindowUnfocused]() {
62         onWindowUnfocused(node);
63     };
64     NG::CustomNodeExtModelNG::SetOnWindowUnfocusedCallback(frameNode, std::move(onWindowUnfocusedCallback));
65 }
66 
SetOnWindowActivatedCallback(const NodeHandle node,void (* onWindowActivated)(NodeHandle node))67 void CustomNode::SetOnWindowActivatedCallback(const NodeHandle node, void (*onWindowActivated)(NodeHandle node))
68 {
69     auto* frameNode = reinterpret_cast<AceNode*>(node);
70     CHECK_NULL_VOID(frameNode);
71 
72     auto onWindowActivatedCallback = [node, onWindowActivated]() {
73         onWindowActivated(node);
74     };
75     NG::CustomNodeExtModelNG::SetOnWindowActivatedCallback(frameNode, std::move(onWindowActivatedCallback));
76 }
77 
SetOnWindowDeactivatedCallback(const NodeHandle node,void (* onWindowDeactivated)(NodeHandle node))78 void CustomNode::SetOnWindowDeactivatedCallback(const NodeHandle node, void (*onWindowDeactivated)(NodeHandle node))
79 {
80     auto* frameNode = reinterpret_cast<AceNode*>(node);
81     CHECK_NULL_VOID(frameNode);
82 
83     auto onWindowDeactivatedCallback = [node, onWindowDeactivated]() {
84         onWindowDeactivated(node);
85     };
86     NG::CustomNodeExtModelNG::SetOnWindowDeactivatedCallback(frameNode, std::move(onWindowDeactivatedCallback));
87 }
88 
SetOnAttachToMainTreeCallback(const NodeHandle node,void (* onAttachToMainTree)(NodeHandle node))89 void CustomNode::SetOnAttachToMainTreeCallback(const NodeHandle node, void (*onAttachToMainTree)(NodeHandle node))
90 {
91     auto* frameNode = reinterpret_cast<AceNode*>(node);
92     CHECK_NULL_VOID(frameNode);
93 
94     auto onAttachToMainTreeCallback = [node, onAttachToMainTree]() {
95         onAttachToMainTree(node);
96     };
97     NG::CustomNodeExtModelNG::SetOnAttachToMainTreeCallback(frameNode, std::move(onAttachToMainTreeCallback));
98 }
99 
SetOnDetachFromMainTreeCallback(const NodeHandle node,void (* onDetachFromMainTree)(NodeHandle node))100 void CustomNode::SetOnDetachFromMainTreeCallback(const NodeHandle node, void (*onDetachFromMainTree)(NodeHandle node))
101 {
102     auto* frameNode = reinterpret_cast<AceNode*>(node);
103     CHECK_NULL_VOID(frameNode);
104 
105     auto onDetachFromMainTreeCallback = [node, onDetachFromMainTree]() {
106         onDetachFromMainTree(node);
107     };
108     NG::CustomNodeExtModelNG::SetOnDetachFromMainTreeCallback(frameNode, std::move(onDetachFromMainTreeCallback));
109 }
110 
SetOnAvoidInfoChangeCallback(const NodeHandle node,void (* onAvoidInfoChange)(NodeHandle node))111 void CustomNode::SetOnAvoidInfoChangeCallback(const NodeHandle node, void (*onAvoidInfoChange)(NodeHandle node))
112 {
113     auto* frameNode = reinterpret_cast<AceNode*>(node);
114     CHECK_NULL_VOID(frameNode);
115 
116     auto onAvoidInfoChangeCallback = [node, onAvoidInfoChange]() {
117         onAvoidInfoChange(node);
118     };
119     NG::CustomNodeExtModelNG::SetOnAvoidInfoChangeCallback(frameNode, std::move(onAvoidInfoChangeCallback));
120 }
121 
SetIsNeedRegisterAvoidInfoChangeListener(const NodeHandle node,bool isRegister)122 void CustomNode::SetIsNeedRegisterAvoidInfoChangeListener(const NodeHandle node, bool isRegister)
123 {
124     auto* frameNode = reinterpret_cast<AceNode*>(node);
125     CHECK_NULL_VOID(frameNode);
126     NG::CustomNodeExtModelNG::SetIsNeedRegisterAvoidInfoChangeListener(frameNode, isRegister);
127 }
128 
SetOnWindowSizeChangedCallback(const NodeHandle node,void (* onWindowSizeChanged)(NodeHandle node,int32_t width,int32_t height,Ace::WindowSizeChangeReason type))129 void CustomNode::SetOnWindowSizeChangedCallback(const NodeHandle node,
130     void (*onWindowSizeChanged)(NodeHandle node, int32_t width, int32_t height, Ace::WindowSizeChangeReason type))
131 {
132     auto* frameNode = reinterpret_cast<AceNode*>(node);
133     CHECK_NULL_VOID(frameNode);
134     auto uiContext = UIContextImpl::Current();
135     CHECK_NULL_VOID(uiContext);
136     uiContext->AddWindowSizeChangeCallback(frameNode->GetId());
137     auto onWindowSizeChangedCallback =
138         [node, onWindowSizeChanged](int32_t width, int32_t height, WindowSizeChangeReason type) {
139             onWindowSizeChanged(node, width, height, type);
140         };
141     NG::CustomNodeExtModelNG::SetOnWindowSizeChangedCallback(frameNode, std::move(onWindowSizeChangedCallback));
142 }
143 } // namespace OHOS::Ace::Kit
144