1 /*
2 * Copyright (c) 2024 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 "core/components_ng/pattern/custom_node_ext/custom_node_ext_model_ng.h"
17 #include "core/components_ng/base/view_stack_processor.h"
18
19 namespace OHOS::Ace::NG {
20
GetOrCreateFrameNode(const std::string & tag)21 RefPtr<FrameNode> CustomNodeExtModelNG::GetOrCreateFrameNode(const std::string& tag)
22 {
23 auto* stack = ViewStackProcessor::GetInstance();
24 auto nodeId = stack->ClaimNodeId();
25 ACE_SCOPED_TRACE("Create[%s][self:%d]", tag.c_str(), nodeId);
26 auto frameNode = FrameNode::GetOrCreateFrameNode(
27 tag, nodeId, []() { return AceType::MakeRefPtr<CustomNodeExtPattern>(); });
28 stack->Push(frameNode);
29 return frameNode;
30 }
31
CreateFrameNode(const std::string & tag)32 RefPtr<FrameNode> CustomNodeExtModelNG::CreateFrameNode(const std::string& tag)
33 {
34 auto nodeId = ElementRegister::GetInstance()->MakeUniqueId();
35 auto frameNode = FrameNode::CreateFrameNode(tag, nodeId, AceType::MakeRefPtr<CustomNodeExtPattern>());
36 return frameNode;
37 }
38
CreateFrameNode(const std::string & tag,int32_t nodeId)39 RefPtr<FrameNode> CustomNodeExtModelNG::CreateFrameNode(const std::string& tag, int32_t nodeId)
40 {
41 return FrameNode::CreateFrameNode(tag, nodeId, AceType::MakeRefPtr<CustomNodeExtPattern>());
42 }
43
SetMeasureCallback(FrameNode * frameNode,std::function<void (LayoutConstraintF constraints)> && onMeasure)44 void CustomNodeExtModelNG::SetMeasureCallback(
45 FrameNode* frameNode, std::function<void(LayoutConstraintF constraints)>&& onMeasure)
46 {
47 CHECK_NULL_VOID(frameNode);
48 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
49 CHECK_NULL_VOID(pattern);
50 pattern->SetMeasureCallback(std::move(onMeasure));
51 }
52
SetLayoutCallback(FrameNode * frameNode,std::function<void (RectF rect)> && onLayout)53 void CustomNodeExtModelNG::SetLayoutCallback(FrameNode* frameNode, std::function<void(RectF rect)>&& onLayout)
54 {
55 CHECK_NULL_VOID(frameNode);
56 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
57 CHECK_NULL_VOID(pattern);
58 pattern->SetLayoutCallback(std::move(onLayout));
59 }
60
SetContentDrawCallback(FrameNode * frameNode,DrawFunction && onDraw)61 void CustomNodeExtModelNG::SetContentDrawCallback(FrameNode* frameNode, DrawFunction&& onDraw)
62 {
63 CHECK_NULL_VOID(frameNode);
64 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
65 CHECK_NULL_VOID(pattern);
66 pattern->SetContentDrawCallback(std::move(onDraw));
67 }
68
SetForegroundDrawCallback(FrameNode * frameNode,DrawFunction && onDraw)69 void CustomNodeExtModelNG::SetForegroundDrawCallback(FrameNode* frameNode, DrawFunction&& onDraw)
70 {
71 CHECK_NULL_VOID(frameNode);
72 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
73 CHECK_NULL_VOID(pattern);
74 pattern->SetForegroundDrawCallback(std::move(onDraw));
75 }
76
SetOverlayDrawCallback(FrameNode * frameNode,DrawFunction && onDraw)77 void CustomNodeExtModelNG::SetOverlayDrawCallback(FrameNode* frameNode, DrawFunction&& onDraw)
78 {
79 CHECK_NULL_VOID(frameNode);
80 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
81 CHECK_NULL_VOID(pattern);
82 pattern->SetOverlayDrawCallback(std::move(onDraw));
83 }
84
SetOnConfigUpdateCallback(FrameNode * frameNode,std::function<void (ConfigurationType configType)> && onConfigUpdate)85 void CustomNodeExtModelNG::SetOnConfigUpdateCallback(
86 FrameNode* frameNode, std::function<void(ConfigurationType configType)>&& onConfigUpdate)
87 {
88 CHECK_NULL_VOID(frameNode);
89 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
90 CHECK_NULL_VOID(pattern);
91 pattern->SetOnConfigUpdateCallback(std::move(onConfigUpdate));
92 }
93
SetOnModifyDoneCallback(FrameNode * frameNode,std::function<void ()> && onModifyDone)94 void CustomNodeExtModelNG::SetOnModifyDoneCallback(FrameNode* frameNode, std::function<void()>&& onModifyDone)
95 {
96 CHECK_NULL_VOID(frameNode);
97 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
98 CHECK_NULL_VOID(pattern);
99 pattern->SetOnModifyDoneCallback(std::move(onModifyDone));
100 }
101
SetOnWindowFocusedCallback(FrameNode * frameNode,std::function<void ()> && onWindowFocused)102 void CustomNodeExtModelNG::SetOnWindowFocusedCallback(FrameNode* frameNode, std::function<void()>&& onWindowFocused)
103 {
104 CHECK_NULL_VOID(frameNode);
105 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
106 CHECK_NULL_VOID(pattern);
107 pattern->SetOnWindowFocusedCallback(std::move(onWindowFocused));
108 }
109
SetOnWindowUnfocusedCallback(FrameNode * frameNode,std::function<void ()> && onWindowUnfocused)110 void CustomNodeExtModelNG::SetOnWindowUnfocusedCallback(FrameNode* frameNode, std::function<void()>&& onWindowUnfocused)
111 {
112 CHECK_NULL_VOID(frameNode);
113 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
114 CHECK_NULL_VOID(pattern);
115 pattern->SetOnWindowUnfocusedCallback(std::move(onWindowUnfocused));
116 }
117
SetOnWindowActivatedCallback(FrameNode * frameNode,std::function<void ()> && onWindowActivated)118 void CustomNodeExtModelNG::SetOnWindowActivatedCallback(FrameNode* frameNode, std::function<void()>&& onWindowActivated)
119 {
120 CHECK_NULL_VOID(frameNode);
121 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
122 CHECK_NULL_VOID(pattern);
123 pattern->SetOnWindowActivatedCallback(std::move(onWindowActivated));
124 }
125
SetOnWindowDeactivatedCallback(FrameNode * frameNode,std::function<void ()> && onWindowDeactivated)126 void CustomNodeExtModelNG::SetOnWindowDeactivatedCallback(
127 FrameNode* frameNode, std::function<void()>&& onWindowDeactivated)
128 {
129 CHECK_NULL_VOID(frameNode);
130 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
131 CHECK_NULL_VOID(pattern);
132 pattern->SetOnWindowDeactivatedCallback(std::move(onWindowDeactivated));
133 }
134
SetOnAttachToMainTreeCallback(FrameNode * frameNode,std::function<void ()> && onAttachToMainTree)135 void CustomNodeExtModelNG::SetOnAttachToMainTreeCallback(
136 FrameNode* frameNode, std::function<void()>&& onAttachToMainTree)
137 {
138 CHECK_NULL_VOID(frameNode);
139 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
140 CHECK_NULL_VOID(pattern);
141 pattern->SetOnAttachToMainTreeCallback(std::move(onAttachToMainTree));
142 }
143
SetOnDetachFromMainTreeCallback(FrameNode * frameNode,std::function<void ()> && onDetachFromMainTree)144 void CustomNodeExtModelNG::SetOnDetachFromMainTreeCallback(
145 FrameNode* frameNode, std::function<void()>&& onDetachFromMainTree)
146 {
147 CHECK_NULL_VOID(frameNode);
148 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
149 CHECK_NULL_VOID(pattern);
150 pattern->SetOnDetachFromMainTreeCallback(std::move(onDetachFromMainTree));
151 }
152
SetOnAvoidInfoChangeCallback(FrameNode * frameNode,std::function<void ()> && onAvoidInfoChange)153 void CustomNodeExtModelNG::SetOnAvoidInfoChangeCallback(
154 FrameNode* frameNode, std::function<void()>&& onAvoidInfoChange)
155 {
156 CHECK_NULL_VOID(frameNode);
157 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
158 CHECK_NULL_VOID(pattern);
159 pattern->SetOnAvoidInfoChangeCallback(std::move(onAvoidInfoChange));
160 }
161
SetIsNeedRegisterAvoidInfoChangeListener(FrameNode * frameNode,bool isRegister)162 void CustomNodeExtModelNG::SetIsNeedRegisterAvoidInfoChangeListener(FrameNode* frameNode, bool isRegister)
163 {
164 CHECK_NULL_VOID(frameNode);
165 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
166 CHECK_NULL_VOID(pattern);
167 pattern->SetIsNeedRegisterAvoidInfoChangeListener(isRegister);
168 }
169
SetOnDirtyLayoutWrapperSwap(FrameNode * frameNode,std::function<void (const DirtySwapConfig & config)> && onDirtySwap)170 void CustomNodeExtModelNG::SetOnDirtyLayoutWrapperSwap(
171 FrameNode* frameNode, std::function<void(const DirtySwapConfig& config)>&& onDirtySwap)
172 {
173 CHECK_NULL_VOID(frameNode);
174 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
175 CHECK_NULL_VOID(pattern);
176 pattern->SetOnDirtyLayoutWrapperSwap(std::move(onDirtySwap));
177 }
178
SetIsAtomic(FrameNode * frameNode,bool isAtomic)179 void CustomNodeExtModelNG::SetIsAtomic(FrameNode* frameNode, bool isAtomic)
180 {
181 CHECK_NULL_VOID(frameNode);
182 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
183 CHECK_NULL_VOID(pattern);
184 pattern->SetIsAtomic(isAtomic);
185 }
186
SetBeforeCreateLayoutWrapperCallback(FrameNode * frameNode,std::function<void ()> && beforeCreateLayoutWrapper)187 void CustomNodeExtModelNG::SetBeforeCreateLayoutWrapperCallback(
188 FrameNode* frameNode, std::function<void()>&& beforeCreateLayoutWrapper)
189 {
190 CHECK_NULL_VOID(frameNode);
191 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
192 CHECK_NULL_VOID(pattern);
193 pattern->SetBeforeCreateLayoutWrapperCallback(std::move(beforeCreateLayoutWrapper));
194 }
195
SetOnWindowSizeChangedCallback(FrameNode * frameNode,std::function<void (int32_t width,int32_t height,WindowSizeChangeReason type)> && onWindowSizeChanged)196 void CustomNodeExtModelNG::SetOnWindowSizeChangedCallback(FrameNode* frameNode,
197 std::function<void(int32_t width, int32_t height, WindowSizeChangeReason type)>&& onWindowSizeChanged)
198 {
199 CHECK_NULL_VOID(frameNode);
200 auto pattern = frameNode->GetPattern<CustomNodeExtPattern>();
201 CHECK_NULL_VOID(pattern);
202 pattern->SetOnWindowSizeChangedCallback(std::move(onWindowSizeChanged));
203 }
204 } // OHOS::Ace::NG