• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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