1 /*
2 * Copyright (c) 2022-2023 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/xcomponent/xcomponent_model_ng.h"
17 #include <optional>
18
19 #include "core/components_ng/base/view_stack_processor.h"
20 #include "core/components_ng/pattern/xcomponent/xcomponent_event_hub.h"
21 #include "core/components_ng/pattern/xcomponent/xcomponent_layout_property.h"
22 #include "core/components_ng/pattern/xcomponent/xcomponent_pattern.h"
23 #include "core/components_v2/inspector/inspector_constants.h"
24
25 namespace OHOS::Ace::NG {
26 const uint32_t DEFAULT_SURFACE_SIZE = 0;
Create(const std::optional<std::string> & id,XComponentType type,const std::optional<std::string> & libraryname,const std::shared_ptr<InnerXComponentController> & xcomponentController)27 void XComponentModelNG::Create(const std::optional<std::string>& id, XComponentType type,
28 const std::optional<std::string>& libraryname,
29 const std::shared_ptr<InnerXComponentController>& xcomponentController)
30 {
31 auto* stack = ViewStackProcessor::GetInstance();
32 auto nodeId = stack->ClaimNodeId();
33 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::XCOMPONENT_ETS_TAG, nodeId);
34 auto frameNode = FrameNode::GetOrCreateFrameNode(
35 V2::XCOMPONENT_ETS_TAG, nodeId, [id, type, libraryname, xcomponentController]() {
36 return AceType::MakeRefPtr<XComponentPattern>(id, type, libraryname, xcomponentController);
37 });
38 stack->Push(frameNode);
39 ACE_UPDATE_LAYOUT_PROPERTY(XComponentLayoutProperty, XComponentType, type);
40 }
41
Create(int32_t nodeId,float width,float height,const std::string & id,XComponentType type,const std::string & libraryname,const std::shared_ptr<InnerXComponentController> & xcomponentController)42 RefPtr<AceType> XComponentModelNG::Create(int32_t nodeId, float width, float height, const std::string& id,
43 XComponentType type, const std::string& libraryname,
44 const std::shared_ptr<InnerXComponentController>& xcomponentController)
45 {
46 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::XCOMPONENT_ETS_TAG, nodeId);
47 auto calcWidth = CalcLength(width, DimensionUnit::VP);
48 auto calcHeight = CalcLength(height, DimensionUnit::VP);
49 auto frameNode = FrameNode::GetOrCreateFrameNode(
50 V2::XCOMPONENT_ETS_TAG, nodeId, [id, type, libraryname, xcomponentController, calcWidth, calcHeight]() {
51 return AceType::MakeRefPtr<XComponentPattern>(id, type, libraryname, xcomponentController,
52 calcWidth.GetDimension().ConvertToPx(), calcHeight.GetDimension().ConvertToPx());
53 });
54
55 CHECK_NULL_RETURN(frameNode, nullptr);
56 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
57 if (layoutProperty) {
58 layoutProperty->UpdateXComponentType(type);
59 layoutProperty->UpdateUserDefinedIdealSize(CalcSize(calcWidth, calcHeight));
60 }
61 return frameNode;
62 }
63
InitXComponent(FrameNode * frameNode)64 void XComponentModelNG::InitXComponent(FrameNode* frameNode)
65 {
66 CHECK_NULL_VOID(frameNode);
67 auto node = AceType::Claim(frameNode);
68 auto type = GetTypeImpl(node);
69 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
70 return;
71 }
72 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
73 CHECK_NULL_VOID(xcPattern);
74 xcPattern->InitXComponent();
75 }
76
GetLibraryName()77 std::optional<std::string> XComponentModelNG::GetLibraryName()
78 {
79 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
80 CHECK_NULL_RETURN(frameNode, std::nullopt);
81 auto type = GetTypeImpl(frameNode);
82 if (type == XComponentType::COMPONENT) {
83 return std::nullopt;
84 }
85 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
86 CHECK_NULL_RETURN(xcPattern, std::nullopt);
87 return xcPattern->GetLibraryName();
88 }
89
SetSoPath(const std::string & soPath)90 void XComponentModelNG::SetSoPath(const std::string& soPath)
91 {
92 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
93 CHECK_NULL_VOID(frameNode);
94 auto type = GetTypeImpl(frameNode);
95 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
96 return;
97 }
98 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
99 CHECK_NULL_VOID(xcPattern);
100 xcPattern->SetSoPath(soPath);
101 }
102
GetTypeImpl(const RefPtr<FrameNode> & frameNode)103 XComponentType XComponentModelNG::GetTypeImpl(const RefPtr<FrameNode>& frameNode)
104 {
105 CHECK_NULL_RETURN(frameNode, XComponentType::UNKNOWN);
106 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
107 CHECK_NULL_RETURN(layoutProperty, XComponentType::UNKNOWN);
108 return layoutProperty->GetXComponentTypeValue();
109 }
110
GetType()111 XComponentType XComponentModelNG::GetType()
112 {
113 return GetTypeImpl(AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()));
114 }
115
SetOnLoad(LoadEvent && onLoad)116 void XComponentModelNG::SetOnLoad(LoadEvent&& onLoad)
117 {
118 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
119 CHECK_NULL_VOID(frameNode);
120 auto type = GetTypeImpl(frameNode);
121 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
122 return;
123 }
124 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
125 CHECK_NULL_VOID(eventHub);
126 eventHub->SetOnLoad(std::move(onLoad));
127 }
128
SetOnLoad(FrameNode * frameNode,LoadEvent && onLoad)129 void XComponentModelNG::SetOnLoad(FrameNode* frameNode, LoadEvent&& onLoad)
130 {
131 CHECK_NULL_VOID(frameNode);
132 auto node = AceType::Claim(frameNode);
133 auto type = GetTypeImpl(node);
134 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
135 return;
136 }
137 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
138 CHECK_NULL_VOID(xcPattern);
139 if (xcPattern->NeedTriggerLoadEventImmediately()) {
140 if (onLoad) {
141 onLoad(xcPattern->GetId());
142 }
143 return;
144 }
145 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
146 CHECK_NULL_VOID(eventHub);
147 eventHub->SetOnLoad(std::move(onLoad));
148 }
149
SetOnDestroy(DestroyEvent && onDestroy)150 void XComponentModelNG::SetOnDestroy(DestroyEvent&& onDestroy)
151 {
152 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
153 CHECK_NULL_VOID(frameNode);
154 auto type = GetTypeImpl(frameNode);
155 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
156 return;
157 }
158 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
159 CHECK_NULL_VOID(eventHub);
160 eventHub->SetOnDestroy(std::move(onDestroy));
161 }
162
SetOnDestroy(FrameNode * frameNode,DestroyEvent && onDestroy)163 void XComponentModelNG::SetOnDestroy(FrameNode* frameNode, DestroyEvent&& onDestroy)
164 {
165 CHECK_NULL_VOID(frameNode);
166 auto node = AceType::Claim(frameNode);
167 auto type = GetTypeImpl(node);
168 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
169 return;
170 }
171 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
172 CHECK_NULL_VOID(eventHub);
173 eventHub->SetOnDestroy(std::move(onDestroy));
174 }
175
RegisterOnCreate(const RefPtr<AceType> & node,LoadEvent && onLoad)176 void XComponentModelNG::RegisterOnCreate(const RefPtr<AceType>& node, LoadEvent&& onLoad)
177 {
178 auto frameNode = AceType::DynamicCast<NG::FrameNode>(node);
179 CHECK_NULL_VOID(frameNode);
180 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
181 if (!layoutProperty || layoutProperty->GetXComponentTypeValue() == XComponentType::COMPONENT) {
182 return;
183 }
184 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
185 CHECK_NULL_VOID(eventHub);
186 eventHub->SetOnLoad(std::move(onLoad));
187 }
188
RegisterOnDestroy(const RefPtr<AceType> & node,DestroyEvent && onDestroy)189 void XComponentModelNG::RegisterOnDestroy(const RefPtr<AceType>& node, DestroyEvent&& onDestroy)
190 {
191 auto frameNode = AceType::DynamicCast<NG::FrameNode>(node);
192 CHECK_NULL_VOID(frameNode);
193 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
194 if (!layoutProperty || layoutProperty->GetXComponentTypeValue() == XComponentType::COMPONENT) {
195 return;
196 }
197 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
198 CHECK_NULL_VOID(eventHub);
199 eventHub->SetOnDestroy(std::move(onDestroy));
200 }
201
IsTexture()202 bool XComponentModelNG::IsTexture()
203 {
204 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
205 CHECK_NULL_RETURN(frameNode, false);
206 return GetTypeImpl(frameNode) == XComponentType::TEXTURE;
207 }
208
SetDetachCallback(DetachCallback && onDetach)209 void XComponentModelNG::SetDetachCallback(DetachCallback&& onDetach)
210 {
211 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
212 CHECK_NULL_VOID(frameNode);
213 auto type = GetTypeImpl(frameNode);
214 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
215 return;
216 }
217 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
218 CHECK_NULL_VOID(eventHub);
219 eventHub->SetDetachEvent(std::move(onDetach));
220 }
221
SetControllerOnCreated(SurfaceCreatedEvent && onCreated)222 void XComponentModelNG::SetControllerOnCreated(SurfaceCreatedEvent&& onCreated)
223 {
224 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
225 CHECK_NULL_VOID(frameNode);
226 auto type = GetTypeImpl(frameNode);
227 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
228 return;
229 }
230 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
231 CHECK_NULL_VOID(eventHub);
232 eventHub->SetControllerCreatedEvent(std::move(onCreated));
233 }
234
SetControllerOnChanged(SurfaceChangedEvent && onChanged)235 void XComponentModelNG::SetControllerOnChanged(SurfaceChangedEvent&& onChanged)
236 {
237 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
238 CHECK_NULL_VOID(frameNode);
239 auto type = GetTypeImpl(frameNode);
240 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
241 return;
242 }
243 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
244 CHECK_NULL_VOID(eventHub);
245 eventHub->SetControllerChangedEvent(std::move(onChanged));
246 }
247
SetControllerOnDestroyed(SurfaceDestroyedEvent && onDestroyed)248 void XComponentModelNG::SetControllerOnDestroyed(SurfaceDestroyedEvent&& onDestroyed)
249 {
250 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
251 CHECK_NULL_VOID(frameNode);
252 auto type = GetTypeImpl(frameNode);
253 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
254 return;
255 }
256 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
257 CHECK_NULL_VOID(eventHub);
258 eventHub->SetControllerDestroyedEvent(std::move(onDestroyed));
259 }
260
SetRenderFit(RenderFit renderFit)261 void XComponentModelNG::SetRenderFit(RenderFit renderFit)
262 {
263 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
264 CHECK_NULL_VOID(frameNode);
265 auto type = GetTypeImpl(frameNode);
266 if (type != XComponentType::SURFACE) {
267 return;
268 }
269 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
270 CHECK_NULL_VOID(xcPattern);
271 xcPattern->SetRenderFit(renderFit);
272 }
273
EnableSecure(bool isSecure)274 void XComponentModelNG::EnableSecure(bool isSecure)
275 {
276 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
277 CHECK_NULL_VOID(frameNode);
278 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
279 CHECK_NULL_VOID(xcPattern);
280 xcPattern->EnableSecure(isSecure);
281 }
282
IsTexture(FrameNode * frameNode)283 bool XComponentModelNG::IsTexture(FrameNode *frameNode)
284 {
285 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
286 CHECK_NULL_RETURN(layoutProperty, false);
287 return layoutProperty->GetXComponentTypeValue() == XComponentType::TEXTURE;
288 }
289
GetType(FrameNode * frameNode)290 XComponentType XComponentModelNG::GetType(FrameNode* frameNode)
291 {
292 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
293 CHECK_NULL_RETURN(layoutProperty, XComponentType::SURFACE);
294 return layoutProperty->GetXComponentTypeValue(XComponentType::SURFACE);
295 }
296
CreateFrameNode(int32_t nodeId,const std::string & id,XComponentType type,const std::optional<std::string> & libraryname)297 RefPtr<FrameNode> XComponentModelNG::CreateFrameNode(int32_t nodeId, const std::string& id, XComponentType type,
298 const std::optional<std::string>& libraryname)
299 {
300 std::shared_ptr<InnerXComponentController> controller = nullptr;
301 auto frameNode = FrameNode::CreateFrameNode(
302 V2::XCOMPONENT_ETS_TAG, nodeId, AceType::MakeRefPtr<XComponentPattern>(id, type, libraryname, controller));
303 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
304 if (layoutProperty) {
305 layoutProperty->UpdateXComponentType(type);
306 }
307 return frameNode;
308 }
309
CreateTypeNode(int32_t nodeId,ArkUI_XComponent_Params * params)310 RefPtr<FrameNode> XComponentModelNG::CreateTypeNode(int32_t nodeId, ArkUI_XComponent_Params* params)
311 {
312 auto id = params->id;
313 auto type = params->type;
314 auto libraryName = params->libraryName;
315 auto controller = params->controller;
316
317 auto frameNode = FrameNode::CreateFrameNode(V2::XCOMPONENT_ETS_TAG, nodeId,
318 AceType::MakeRefPtr<XComponentPattern>(id, type, libraryName, controller, 0.0, 0.0, true));
319 auto layoutProperty = frameNode->GetLayoutProperty<XComponentLayoutProperty>();
320 if (layoutProperty) {
321 layoutProperty->UpdateXComponentType(type);
322 }
323 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
324 CHECK_NULL_RETURN(xcPattern, nullptr);
325 xcPattern->SetImageAIOptions(params->aiOptions);
326 return frameNode;
327 }
328
SetXComponentId(FrameNode * frameNode,const std::string & id)329 void XComponentModelNG::SetXComponentId(FrameNode* frameNode, const std::string& id)
330 {
331 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
332 CHECK_NULL_VOID(xcPattern);
333 xcPattern->SetId(id);
334 }
335
SetXComponentType(FrameNode * frameNode,XComponentType type)336 void XComponentModelNG::SetXComponentType(FrameNode* frameNode, XComponentType type)
337 {
338 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
339 CHECK_NULL_VOID(xcPattern);
340 xcPattern->SetType(type);
341 ACE_UPDATE_NODE_LAYOUT_PROPERTY(XComponentLayoutProperty, XComponentType, type, frameNode);
342 }
343
SetXComponentSurfaceSize(FrameNode * frameNode,uint32_t width,uint32_t height)344 void XComponentModelNG::SetXComponentSurfaceSize(FrameNode* frameNode, uint32_t width, uint32_t height)
345 {
346 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
347 CHECK_NULL_VOID(xcPattern);
348 xcPattern->ConfigSurface(width, height);
349 }
350
GetXComponentId(FrameNode * frameNode)351 std::string XComponentModelNG::GetXComponentId(FrameNode* frameNode)
352 {
353 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
354 CHECK_NULL_RETURN(xcPattern, "");
355 return xcPattern->GetId();
356 }
357
GetXComponentType(FrameNode * frameNode)358 XComponentType XComponentModelNG::GetXComponentType(FrameNode* frameNode)
359 {
360 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
361 CHECK_NULL_RETURN(xcPattern, XComponentType::SURFACE);
362 return xcPattern->GetType();
363 }
364
GetXComponentSurfaceWidth(FrameNode * frameNode)365 uint32_t XComponentModelNG::GetXComponentSurfaceWidth(FrameNode* frameNode)
366 {
367 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
368 CHECK_NULL_RETURN(xcPattern, DEFAULT_SURFACE_SIZE);
369 auto drawSize = xcPattern->GetDrawSize();
370 return drawSize.Width();
371 }
372
GetXComponentSurfaceHeight(FrameNode * frameNode)373 uint32_t XComponentModelNG::GetXComponentSurfaceHeight(FrameNode* frameNode)
374 {
375 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
376 CHECK_NULL_RETURN(xcPattern, DEFAULT_SURFACE_SIZE);
377 auto drawSize = xcPattern->GetDrawSize();
378 return drawSize.Height();
379 }
380
EnableAnalyzer(bool enable)381 void XComponentModelNG::EnableAnalyzer(bool enable)
382 {
383 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
384 CHECK_NULL_VOID(frameNode);
385 auto type = GetTypeImpl(frameNode);
386 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
387 return;
388 }
389 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
390 CHECK_NULL_VOID(xcPattern);
391 xcPattern->EnableAnalyzer(enable);
392 }
393
EnableAnalyzer(FrameNode * frameNode,bool enable)394 void XComponentModelNG::EnableAnalyzer(FrameNode* frameNode, bool enable)
395 {
396 CHECK_NULL_VOID(frameNode);
397 auto node = AceType::Claim(frameNode);
398 auto type = GetTypeImpl(node);
399 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
400 return;
401 }
402 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
403 CHECK_NULL_VOID(xcPattern);
404 xcPattern->EnableAnalyzer(enable);
405 }
406
SetImageAIOptions(void * options)407 void XComponentModelNG::SetImageAIOptions(void* options)
408 {
409 auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode());
410 CHECK_NULL_VOID(frameNode);
411 auto type = GetTypeImpl(frameNode);
412 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
413 return;
414 }
415 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
416 CHECK_NULL_VOID(xcPattern);
417 xcPattern->SetImageAIOptions(options);
418 }
419
SetXComponentLibraryname(FrameNode * frameNode,const std::string & libraryname)420 void XComponentModelNG::SetXComponentLibraryname(FrameNode* frameNode, const std::string& libraryname)
421 {
422 CHECK_NULL_VOID(frameNode);
423 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
424 CHECK_NULL_VOID(xcPattern);
425 xcPattern->SetLibraryName(libraryname);
426 }
427
SetControllerOnCreated(FrameNode * frameNode,SurfaceCreatedEvent && onCreated)428 void XComponentModelNG::SetControllerOnCreated(FrameNode* frameNode, SurfaceCreatedEvent&& onCreated)
429 {
430 CHECK_NULL_VOID(frameNode);
431 auto node = AceType::Claim(frameNode);
432 auto type = GetTypeImpl(node);
433 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
434 return;
435 }
436 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
437 CHECK_NULL_VOID(eventHub);
438 eventHub->SetControllerCreatedEvent(std::move(onCreated));
439 }
440
SetControllerOnChanged(FrameNode * frameNode,SurfaceChangedEvent && onChanged)441 void XComponentModelNG::SetControllerOnChanged(FrameNode* frameNode, SurfaceChangedEvent&& onChanged)
442 {
443 CHECK_NULL_VOID(frameNode);
444 auto node = AceType::Claim(frameNode);
445 auto type = GetTypeImpl(node);
446 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
447 return;
448 }
449 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
450 CHECK_NULL_VOID(eventHub);
451 eventHub->SetControllerChangedEvent(std::move(onChanged));
452 }
453
SetControllerOnDestroyed(FrameNode * frameNode,SurfaceDestroyedEvent && onDestroyed)454 void XComponentModelNG::SetControllerOnDestroyed(FrameNode* frameNode, SurfaceDestroyedEvent&& onDestroyed)
455 {
456 CHECK_NULL_VOID(frameNode);
457 auto node = AceType::Claim(frameNode);
458 auto type = GetTypeImpl(node);
459 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
460 return;
461 }
462 auto eventHub = frameNode->GetEventHub<XComponentEventHub>();
463 CHECK_NULL_VOID(eventHub);
464 eventHub->SetControllerDestroyedEvent(std::move(onDestroyed));
465 }
466
SetDetachCallback(FrameNode * frameNode,DetachCallback && onDetach)467 void XComponentModelNG::SetDetachCallback(FrameNode* frameNode, DetachCallback&& onDetach)
468 {
469 CHECK_NULL_VOID(frameNode);
470 auto node = AceType::Claim(frameNode);
471 auto type = GetTypeImpl(node);
472 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
473 return;
474 }
475 auto eventHub = node->GetEventHub<XComponentEventHub>();
476 CHECK_NULL_VOID(eventHub);
477 eventHub->SetDetachEvent(std::move(onDetach));
478 }
479
SetImageAIOptions(FrameNode * frameNode,void * options)480 void XComponentModelNG::SetImageAIOptions(FrameNode* frameNode, void* options)
481 {
482 CHECK_NULL_VOID(frameNode);
483 auto node = AceType::Claim(frameNode);
484 auto type = GetTypeImpl(node);
485 if (type == XComponentType::COMPONENT || type == XComponentType::NODE) {
486 return;
487 }
488 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
489 CHECK_NULL_VOID(xcPattern);
490 xcPattern->SetImageAIOptions(options);
491 }
492
EnableSecure(FrameNode * frameNode,bool enable)493 void XComponentModelNG::EnableSecure(FrameNode* frameNode, bool enable)
494 {
495 CHECK_NULL_VOID(frameNode);
496 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
497 CHECK_NULL_VOID(xcPattern);
498 xcPattern->EnableSecure(enable);
499 }
500
SetRenderFit(FrameNode * frameNode,RenderFit renderFit)501 void XComponentModelNG::SetRenderFit(FrameNode* frameNode, RenderFit renderFit)
502 {
503 CHECK_NULL_VOID(frameNode);
504 auto xcPattern = AceType::DynamicCast<XComponentPattern>(frameNode->GetPattern());
505 CHECK_NULL_VOID(xcPattern);
506 xcPattern->SetRenderFit(renderFit);
507 }
508 } // namespace OHOS::Ace::NG
509