1 /*
2  * Copyright (c) 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 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h"
16 
17 #include "base/log/ace_scoring_log.h"
18 #include "base/utils/utils.h"
19 #include "bridge/common/utils/engine_helper.h"
20 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21 #include "bridge/declarative_frontend/jsview/models/indexer_model_impl.h"
22 #include "bridge/declarative_frontend/jsview/js_xcomponent.h"
23 #include "bridge/declarative_frontend/jsview/js_xcomponent_controller.h"
24 #include "core/components_ng/pattern/xcomponent/xcomponent_model_ng.h"
25 
26 namespace OHOS::Ace::NG {
27 namespace {
SetControllerOnCreatedCallback(EcmaVM * vm,FrameNode * frameNode,const Local<JSValueRef> & createdFunc)28 void SetControllerOnCreatedCallback(EcmaVM* vm, FrameNode* frameNode, const Local<JSValueRef>& createdFunc)
29 {
30     if (createdFunc->IsFunction(vm)) {
31         panda::Local<panda::FunctionRef> func = createdFunc;
32         auto onSurfaceCreated = [vm, func = panda::CopyableGlobal(vm, func), frameNode](
33                                     const std::string& surfaceId, const std::string& /* xcomponentId */) {
34             panda::LocalScope pandaScope(vm);
35             panda::TryCatch trycatch(vm);
36             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
37             panda::Local<panda::JSValueRef> para[1] = { panda::StringRef::NewFromUtf8(vm, surfaceId.c_str()) };
38             func->Call(vm, func.ToLocal(), para, 1);
39         };
40         XComponentModelNG::SetControllerOnCreated(frameNode, std::move(onSurfaceCreated));
41     }
42 }
43 
SetControllerOnChangedCallback(EcmaVM * vm,FrameNode * frameNode,const Local<JSValueRef> & changedFunc)44 void SetControllerOnChangedCallback(EcmaVM* vm, FrameNode* frameNode, const Local<JSValueRef>& changedFunc)
45 {
46     if (changedFunc->IsFunction(vm)) {
47         panda::Local<panda::FunctionRef> func = changedFunc;
48         auto onSurfaceChanged = [vm, func = panda::CopyableGlobal(vm, func), frameNode](
49                                     const std::string& surfaceId, const NG::RectF& rect) {
50             panda::LocalScope pandaScope(vm);
51             panda::TryCatch trycatch(vm);
52             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
53             const char* keys[] = { "offsetX", "offsetY", "surfaceWidth", "surfaceHeight" };
54             Local<JSValueRef> rectValues[] = { panda::NumberRef::New(vm, rect.Left()),
55                 panda::NumberRef::New(vm, rect.Top()), panda::NumberRef::New(vm, rect.Width()),
56                 panda::NumberRef::New(vm, rect.Height()) };
57             auto rectObj = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, rectValues);
58             panda::Local<panda::JSValueRef> para[2] = { panda::StringRef::NewFromUtf8(vm, surfaceId.c_str()), rectObj };
59             func->Call(vm, func.ToLocal(), para, 2);
60         };
61         XComponentModelNG::SetControllerOnChanged(frameNode, std::move(onSurfaceChanged));
62     }
63 }
64 
SetControllerOnDestroyedCallback(EcmaVM * vm,FrameNode * frameNode,const Local<JSValueRef> & destroyedFunc)65 void SetControllerOnDestroyedCallback(EcmaVM* vm, FrameNode* frameNode, const Local<JSValueRef>& destroyedFunc)
66 {
67     if (destroyedFunc->IsFunction(vm)) {
68         panda::Local<panda::FunctionRef> func = destroyedFunc;
69         auto ondestroyed = [vm, func = panda::CopyableGlobal(vm, func), frameNode](
70                                const std::string& surfaceId, const std::string& /* xcomponentId */) {
71             panda::LocalScope pandaScope(vm);
72             panda::TryCatch trycatch(vm);
73             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
74             panda::Local<panda::JSValueRef> para[1] = { panda::StringRef::NewFromUtf8(vm, surfaceId.c_str()) };
75             func->Call(vm, func.ToLocal(), para, 1);
76         };
77         XComponentModelNG::SetControllerOnDestroyed(frameNode, std::move(ondestroyed));
78     }
79 }
80 } // namespace
81 
82 enum ArgIndices {
83     ARG_FIRST = 0,
84     ARG_ID = 1,
85     ARG_TYPE = 2,
86     ARG_IMAGE_AI_OPTIONS = 3,
87     ARG_LIBRARY_NAME = 4,
88     ARG_CONTROLLER = 5
89 };
90 
ConvertToXComponentType(const std::string & type)91 XComponentType XComponentBridge::ConvertToXComponentType(const std::string& type)
92 {
93     if (type == "surface") {
94         return XComponentType::SURFACE;
95     }
96     if (type == "component") {
97         return XComponentType::COMPONENT;
98     }
99     if (type == "node") {
100         return XComponentType::NODE;
101     }
102     return XComponentType::SURFACE;
103 }
104 
ParseParams(ArkUIRuntimeCallInfo * runtimeCallInfo,ArkUI_Params & params)105 void XComponentBridge::ParseParams(ArkUIRuntimeCallInfo* runtimeCallInfo, ArkUI_Params& params)
106 {
107     ArkUI_XComponent_Params* xcParams = (ArkUI_XComponent_Params*)(&params);
108     EcmaVM* vm = runtimeCallInfo->GetVM();
109     CHECK_NULL_VOID(vm);
110     Local<JSValueRef> paramsArg = runtimeCallInfo->GetCallArgRef(ARG_TYPE);
111     CHECK_NULL_VOID(paramsArg->IsObject(vm));
112     auto obj = Local<panda::ObjectRef>(paramsArg);
113     auto idStr = panda::StringRef::NewFromUtf8(vm, "id");
114     auto typeStr = panda::StringRef::NewFromUtf8(vm, "type");
115     auto librarynameStr = panda::StringRef::NewFromUtf8(vm, "libraryname");
116     auto controllerStr = panda::StringRef::NewFromUtf8(vm, "controller");
117     auto imageAIOptionsStr = panda::StringRef::NewFromUtf8(vm, "imageAIOptions");
118 
119     auto idArg = obj->Get(vm, idStr);
120     auto typeArg = obj->Get(vm, typeStr);
121     auto libraryNameArg = obj->Get(vm, librarynameStr);
122     auto controllerArg = obj->Get(vm, controllerStr);
123     auto imageAIOptionsArg = obj->Get(vm, imageAIOptionsStr);
124 
125     xcParams->id = idArg->IsString(vm) ? idArg->ToString(vm)->ToString(vm) : "";
126     if (libraryNameArg->IsString(vm)) {
127         xcParams->libraryName = libraryNameArg->ToString(vm)->ToString(vm);
128     }
129     if (typeArg->IsString(vm)) {
130         xcParams->type = ConvertToXComponentType(typeArg->ToString(vm)->ToString(vm));
131     } else if (typeArg->IsNumber()) {
132         xcParams->type = static_cast<XComponentType>(typeArg->Int32Value(vm));
133     }
134     xcParams->controller = nullptr;
135     if (controllerArg->IsObject(vm)) {
136         Framework::JSXComponentController* jsXComponentController = static_cast<Framework::JSXComponentController*>(
137             Local<panda::ObjectRef>(controllerArg)->GetNativePointerField(vm, 0));
138         if (jsXComponentController) {
139             jsXComponentController->SetInstanceId(Container::CurrentId());
140             Framework::XComponentClient::GetInstance().AddControllerToJSXComponentControllersMap(
141                 xcParams->id, jsXComponentController);
142             xcParams->controller = jsXComponentController->GetController();
143         }
144     }
145     xcParams->aiOptions = nullptr;
146     if (imageAIOptionsArg->IsObject(vm)) {
147         auto engine = EngineHelper::GetCurrentEngine();
148         CHECK_NULL_VOID(engine);
149         NativeEngine* nativeEngine = engine->GetNativeEngine();
150         CHECK_NULL_VOID(nativeEngine);
151         Local<JSValueRef> value = imageAIOptionsArg;
152         JSValueWrapper valueWrapper = value;
153         Framework::ScopeRAII scope(reinterpret_cast<napi_env>(nativeEngine));
154         napi_value optionsValue = nativeEngine->ValueToNapiValue(valueWrapper);
155         xcParams->aiOptions = optionsValue;
156     }
157 }
158 
SetControllerOnCreated(ArkUIRuntimeCallInfo * runtimeCallInfo,FrameNode * frameNode)159 void XComponentBridge::SetControllerOnCreated(ArkUIRuntimeCallInfo* runtimeCallInfo, FrameNode* frameNode)
160 {
161     CHECK_NULL_VOID(frameNode);
162     EcmaVM* vm = runtimeCallInfo->GetVM();
163     Local<JSValueRef> paramsArg = runtimeCallInfo->GetCallArgRef(ARG_TYPE);
164     CHECK_NULL_VOID(paramsArg->IsObject(vm));
165     auto obj = Local<panda::ObjectRef>(paramsArg);
166     auto controllerStr = panda::StringRef::NewFromUtf8(vm, "controller");
167     auto controllerArg = obj->Get(vm, controllerStr);
168     CHECK_NULL_VOID(controllerArg->IsObject(vm));
169     auto object = controllerArg->ToObject(vm);
170     auto createdFunc = object->Get(vm, panda::StringRef::NewFromUtf8(vm, "onSurfaceCreated"));
171     if (createdFunc->IsFunction(vm)) {
172         panda::Local<panda::FunctionRef> func = createdFunc;
173         auto onSurfaceCreated = [vm, func = panda::CopyableGlobal(vm, func), frameNode](
174                                     const std::string& surfaceId, const std::string& xcomponentId) {
175             panda::LocalScope pandaScope(vm);
176             panda::TryCatch trycatch(vm);
177             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
178             panda::Local<panda::JSValueRef> para[1] = { panda::StringRef::NewFromUtf8(vm, surfaceId.c_str()) };
179             func->Call(vm, func.ToLocal(), para, 1);
180             TAG_LOGI(AceLogTag::ACE_XCOMPONENT, "XComponentNode[%{public}s] ControllerOnCreated surfaceId:%{public}s",
181                 xcomponentId.c_str(), surfaceId.c_str());
182         };
183         XComponentModelNG::SetControllerOnCreated(frameNode, std::move(onSurfaceCreated));
184     }
185 }
186 
SetControllerOnChanged(ArkUIRuntimeCallInfo * runtimeCallInfo,FrameNode * frameNode)187 void XComponentBridge::SetControllerOnChanged(ArkUIRuntimeCallInfo* runtimeCallInfo, FrameNode* frameNode)
188 {
189     CHECK_NULL_VOID(frameNode);
190     EcmaVM* vm = runtimeCallInfo->GetVM();
191     Local<JSValueRef> paramsArg = runtimeCallInfo->GetCallArgRef(ARG_TYPE);
192     CHECK_NULL_VOID(paramsArg->IsObject(vm));
193     auto obj = Local<panda::ObjectRef>(paramsArg);
194     auto controllerStr = panda::StringRef::NewFromUtf8(vm, "controller");
195     auto controllerArg = obj->Get(vm, controllerStr);
196     CHECK_NULL_VOID(controllerArg->IsObject(vm));
197     auto object = controllerArg->ToObject(vm);
198     auto changedFunc = object->Get(vm, panda::StringRef::NewFromUtf8(vm, "onSurfaceChanged"));
199     if (changedFunc->IsFunction(vm)) {
200         panda::Local<panda::FunctionRef> func = changedFunc;
201         auto onSurfaceChanged = [vm, func = panda::CopyableGlobal(vm, func), frameNode](
202                                     const std::string& surfaceId, const NG::RectF& rect) {
203             panda::LocalScope pandaScope(vm);
204             panda::TryCatch trycatch(vm);
205             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
206             const char* keys[] = { "offsetX", "offsetY", "surfaceWidth", "surfaceHeight" };
207             Local<JSValueRef> rectValues[] = { panda::NumberRef::New(vm, rect.Left()),
208                 panda::NumberRef::New(vm, rect.Top()), panda::NumberRef::New(vm, rect.Width()),
209                 panda::NumberRef::New(vm, rect.Height()) };
210             auto rectObj = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, rectValues);
211             panda::Local<panda::JSValueRef> para[2] = { panda::StringRef::NewFromUtf8(vm, surfaceId.c_str()), rectObj };
212             func->Call(vm, func.ToLocal(), para, 2);
213         };
214         XComponentModelNG::SetControllerOnChanged(frameNode, std::move(onSurfaceChanged));
215     }
216 }
217 
SetControllerOnDestroyed(ArkUIRuntimeCallInfo * runtimeCallInfo,FrameNode * frameNode)218 void XComponentBridge::SetControllerOnDestroyed(ArkUIRuntimeCallInfo* runtimeCallInfo, FrameNode* frameNode)
219 {
220     CHECK_NULL_VOID(frameNode);
221     EcmaVM* vm = runtimeCallInfo->GetVM();
222     Local<JSValueRef> paramsArg = runtimeCallInfo->GetCallArgRef(ARG_TYPE);
223     CHECK_NULL_VOID(paramsArg->IsObject(vm));
224     auto obj = Local<panda::ObjectRef>(paramsArg);
225     auto controllerStr = panda::StringRef::NewFromUtf8(vm, "controller");
226     auto controllerArg = obj->Get(vm, controllerStr);
227     CHECK_NULL_VOID(controllerArg->IsObject(vm));
228     auto object = controllerArg->ToObject(vm);
229     auto destroyedFunc = object->Get(vm, panda::StringRef::NewFromUtf8(vm, "onSurfaceDestroyed"));
230     if (destroyedFunc->IsFunction(vm)) {
231         panda::Local<panda::FunctionRef> func = destroyedFunc;
232         auto onDestroyed = [vm, func = panda::CopyableGlobal(vm, func), frameNode](
233                                const std::string& surfaceId, const std::string& xcomponentId) {
234             panda::LocalScope pandaScope(vm);
235             panda::TryCatch trycatch(vm);
236             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
237             panda::Local<panda::JSValueRef> para[1] = { panda::StringRef::NewFromUtf8(vm, surfaceId.c_str()) };
238             func->Call(vm, func.ToLocal(), para, 1);
239             TAG_LOGI(AceLogTag::ACE_XCOMPONENT, "XComponentNode[%{public}s] ControllerOnDestroyed surfaceId:%{public}s",
240                 xcomponentId.c_str(), surfaceId.c_str());
241         };
242         XComponentModelNG::SetControllerOnDestroyed(frameNode, std::move(onDestroyed));
243     }
244 }
245 
SetControllerCallback(ArkUIRuntimeCallInfo * runtimeCallInfo,FrameNode * frameNode)246 void XComponentBridge::SetControllerCallback(ArkUIRuntimeCallInfo* runtimeCallInfo, FrameNode* frameNode)
247 {
248     SetControllerOnCreated(runtimeCallInfo, frameNode);
249     SetControllerOnChanged(runtimeCallInfo, frameNode);
250     SetControllerOnDestroyed(runtimeCallInfo, frameNode);
251 }
252 
SetControllerCallback(ArkUIRuntimeCallInfo * runtimeCallInfo)253 void XComponentBridge::SetControllerCallback(ArkUIRuntimeCallInfo* runtimeCallInfo)
254 {
255     EcmaVM* vm = runtimeCallInfo->GetVM();
256     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
257     Local<JSValueRef> controllerArg = runtimeCallInfo->GetCallArgRef(ARG_CONTROLLER);
258     auto* frameNode = reinterpret_cast<FrameNode*>(firstArg->ToNativePointer(vm)->Value());
259     auto object = controllerArg->ToObject(vm);
260     auto createdFunc = object->Get(vm, panda::StringRef::NewFromUtf8(vm, "onSurfaceCreated"));
261     SetControllerOnCreatedCallback(vm, frameNode, createdFunc);
262     auto changedFunc = object->Get(vm, panda::StringRef::NewFromUtf8(vm, "onSurfaceChanged"));
263     SetControllerOnChangedCallback(vm, frameNode, changedFunc);
264     auto destroyedFunc = object->Get(vm, panda::StringRef::NewFromUtf8(vm, "onSurfaceDestroyed"));
265     SetControllerOnDestroyedCallback(vm, frameNode, destroyedFunc);
266 }
267 
SetXComponentInitialize(ArkUIRuntimeCallInfo * runtimeCallInfo)268 ArkUINativeModuleValue XComponentBridge::SetXComponentInitialize(ArkUIRuntimeCallInfo* runtimeCallInfo)
269 {
270     EcmaVM* vm = runtimeCallInfo->GetVM();
271     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
272     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
273     Local<JSValueRef> idArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
274     Local<JSValueRef> typeArg = runtimeCallInfo->GetCallArgRef(ARG_TYPE);
275     Local<JSValueRef> librarynameArg = runtimeCallInfo->GetCallArgRef(ARG_LIBRARY_NAME);
276     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
277     if (!idArg->IsString(vm)) {
278         return panda::JSValueRef::Undefined(vm);
279     }
280     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
281     Framework::JSRef<Framework::JSVal> args = info[ARG_CONTROLLER];
282     Framework::JSRef<Framework::JSObject> controllerObj;
283     std::shared_ptr<InnerXComponentController> xcomponentController = nullptr;
284     if (args->IsObject()) {
285         controllerObj = Framework::JSRef<Framework::JSObject>::Cast(args);
286         Framework::JSXComponentController* jsXComponentController =
287             controllerObj->Unwrap<Framework::JSXComponentController>();
288         if (jsXComponentController) {
289             jsXComponentController->SetInstanceId(Container::CurrentId());
290             Framework::XComponentClient::GetInstance().AddControllerToJSXComponentControllersMap(
291                 idArg->ToString(vm)->ToString(vm), jsXComponentController);
292             xcomponentController = jsXComponentController->GetController();
293         }
294     }
295     XComponentType xcomponentType = XComponentType::SURFACE;
296     if (typeArg->IsString(vm)) {
297         xcomponentType = ConvertToXComponentType(typeArg->ToString(vm)->ToString(vm));
298     } else if (typeArg->IsNumber()) {
299         xcomponentType = static_cast<XComponentType>(typeArg->Int32Value(vm));
300     }
301     GetArkUINodeModifiers()->getXComponentModifier()->setXComponentId(
302         nativeNode, idArg->ToString(vm)->ToString(vm).c_str());
303     GetArkUINodeModifiers()->getXComponentModifier()->setXComponentType(
304         nativeNode, static_cast<int32_t>(xcomponentType));
305     if (librarynameArg->IsString(vm)) {
306         auto libraryName = librarynameArg->ToString(vm)->ToString(vm);
307         GetArkUINodeModifiers()->getXComponentModifier()->setXComponentLibraryname(nativeNode, libraryName.c_str());
308     }
309     if ((librarynameArg->IsNull() || librarynameArg->IsUndefined()) && xcomponentController &&
310         !controllerObj->IsUndefined()) {
311         SetControllerCallback(runtimeCallInfo);
312     }
313     HandleDetachCallback(runtimeCallInfo);
314     HandleImageAIOptions(runtimeCallInfo);
315     GetArkUINodeModifiers()->getXComponentModifier()->initXComponent(nativeNode);
316     return panda::JSValueRef::Undefined(vm);
317 }
318 
HandleDetachCallback(ArkUIRuntimeCallInfo * runtimeCallInfo)319 void XComponentBridge::HandleDetachCallback(ArkUIRuntimeCallInfo *runtimeCallInfo)
320 {
321     EcmaVM* vm = runtimeCallInfo->GetVM();
322     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
323     auto detachCallback = [](const std::string& xcomponentId) {
324         Framework::XComponentClient::GetInstance().DeleteControllerFromJSXComponentControllersMap(xcomponentId);
325         Framework::XComponentClient::GetInstance().DeleteFromJsValMapById(xcomponentId);
326     };
327     auto* frameNode = reinterpret_cast<FrameNode*>(firstArg->ToNativePointer(vm)->Value());
328     XComponentModelNG::SetDetachCallback(frameNode, std::move(detachCallback));
329 }
330 
HandleImageAIOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)331 void XComponentBridge::HandleImageAIOptions(ArkUIRuntimeCallInfo *runtimeCallInfo)
332 {
333     EcmaVM* vm = runtimeCallInfo->GetVM();
334     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
335     Local<JSValueRef> imageAIOptionsArg = runtimeCallInfo->GetCallArgRef(ARG_IMAGE_AI_OPTIONS);
336     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
337     if (imageAIOptionsArg->IsObject(vm)) {
338         auto engine = EngineHelper::GetCurrentEngine();
339         CHECK_NULL_VOID(engine);
340         NativeEngine* nativeEngine = engine->GetNativeEngine();
341         CHECK_NULL_VOID(nativeEngine);
342         Local<JSValueRef> value = imageAIOptionsArg;
343         JSValueWrapper valueWrapper = value;
344         Framework::ScopeRAII scope(reinterpret_cast<napi_env>(nativeEngine));
345         napi_value optionsValue = nativeEngine->ValueToNapiValue(valueWrapper);
346         GetArkUINodeModifiers()->getXComponentModifier()->setImageAIOptions(nativeNode, optionsValue);
347     }
348 }
349 
ResetXComponentInitialize(ArkUIRuntimeCallInfo * runtimeCallInfo)350 ArkUINativeModuleValue XComponentBridge::ResetXComponentInitialize(ArkUIRuntimeCallInfo *runtimeCallInfo)
351 {
352     EcmaVM *vm = runtimeCallInfo->GetVM();
353     return panda::JSValueRef::Undefined(vm);
354 }
355 
SetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)356 ArkUINativeModuleValue XComponentBridge::SetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
357 {
358     EcmaVM *vm = runtimeCallInfo->GetVM();
359     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
360     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
361     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
362     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
363     Color color;
364     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
365         GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentBackgroundColor(nativeNode);
366     } else {
367         GetArkUINodeModifiers()->getXComponentModifier()->setXComponentBackgroundColor(nativeNode, color.GetValue());
368     }
369     return panda::JSValueRef::Undefined(vm);
370 }
371 
ResetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)372 ArkUINativeModuleValue XComponentBridge::ResetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
373 {
374     EcmaVM *vm = runtimeCallInfo->GetVM();
375     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
376     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
377     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
378     GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentBackgroundColor(nativeNode);
379     return panda::JSValueRef::Undefined(vm);
380 }
381 
SetOpacity(ArkUIRuntimeCallInfo * runtimeCallInfo)382 ArkUINativeModuleValue XComponentBridge::SetOpacity(ArkUIRuntimeCallInfo *runtimeCallInfo)
383 {
384     EcmaVM *vm = runtimeCallInfo->GetVM();
385     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
386     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
387     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
388     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
389     double opacity;
390     if (!ArkTSUtils::ParseJsDouble(vm, secondArg, opacity)) {
391         GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentOpacity(nativeNode);
392     } else {
393         GetArkUINodeModifiers()->getXComponentModifier()->setXComponentOpacity(nativeNode, opacity);
394     }
395     return panda::JSValueRef::Undefined(vm);
396 }
397 
ResetOpacity(ArkUIRuntimeCallInfo * runtimeCallInfo)398 ArkUINativeModuleValue XComponentBridge::ResetOpacity(ArkUIRuntimeCallInfo *runtimeCallInfo)
399 {
400     EcmaVM *vm = runtimeCallInfo->GetVM();
401     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
402     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
403     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
404     GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentOpacity(nativeNode);
405     return panda::JSValueRef::Undefined(vm);
406 }
407 
SetLinearGradientBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)408 ArkUINativeModuleValue XComponentBridge::SetLinearGradientBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
409 {
410     EcmaVM* vm = runtimeCallInfo->GetVM();
411     return panda::JSValueRef::Undefined(vm);
412 }
413 
ResetLinearGradientBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)414 ArkUINativeModuleValue XComponentBridge::ResetLinearGradientBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
415 {
416     EcmaVM* vm = runtimeCallInfo->GetVM();
417     return panda::JSValueRef::Undefined(vm);
418 }
419 
SetPixelStretchEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)420 ArkUINativeModuleValue XComponentBridge::SetPixelStretchEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
421 {
422     EcmaVM* vm = runtimeCallInfo->GetVM();
423     return panda::JSValueRef::Undefined(vm);
424 }
425 
ResetPixelStretchEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)426 ArkUINativeModuleValue XComponentBridge::ResetPixelStretchEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
427 {
428     EcmaVM* vm = runtimeCallInfo->GetVM();
429     return panda::JSValueRef::Undefined(vm);
430 }
431 
SetLightUpEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)432 ArkUINativeModuleValue XComponentBridge::SetLightUpEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
433 {
434     EcmaVM* vm = runtimeCallInfo->GetVM();
435     return panda::JSValueRef::Undefined(vm);
436 }
437 
ResetLightUpEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)438 ArkUINativeModuleValue XComponentBridge::ResetLightUpEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
439 {
440     EcmaVM* vm = runtimeCallInfo->GetVM();
441     return panda::JSValueRef::Undefined(vm);
442 }
443 
SetSphericalEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)444 ArkUINativeModuleValue XComponentBridge::SetSphericalEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
445 {
446     EcmaVM* vm = runtimeCallInfo->GetVM();
447     return panda::JSValueRef::Undefined(vm);
448 }
449 
ResetSphericalEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)450 ArkUINativeModuleValue XComponentBridge::ResetSphericalEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
451 {
452     EcmaVM* vm = runtimeCallInfo->GetVM();
453     return panda::JSValueRef::Undefined(vm);
454 }
455 
SetColorBlend(ArkUIRuntimeCallInfo * runtimeCallInfo)456 ArkUINativeModuleValue XComponentBridge::SetColorBlend(ArkUIRuntimeCallInfo *runtimeCallInfo)
457 {
458     EcmaVM* vm = runtimeCallInfo->GetVM();
459     return panda::JSValueRef::Undefined(vm);
460 }
461 
ResetColorBlend(ArkUIRuntimeCallInfo * runtimeCallInfo)462 ArkUINativeModuleValue XComponentBridge::ResetColorBlend(ArkUIRuntimeCallInfo *runtimeCallInfo)
463 {
464     EcmaVM* vm = runtimeCallInfo->GetVM();
465     return panda::JSValueRef::Undefined(vm);
466 }
467 
SetHueRotate(ArkUIRuntimeCallInfo * runtimeCallInfo)468 ArkUINativeModuleValue XComponentBridge::SetHueRotate(ArkUIRuntimeCallInfo *runtimeCallInfo)
469 {
470     EcmaVM* vm = runtimeCallInfo->GetVM();
471     return panda::JSValueRef::Undefined(vm);
472 }
473 
ResetHueRotate(ArkUIRuntimeCallInfo * runtimeCallInfo)474 ArkUINativeModuleValue XComponentBridge::ResetHueRotate(ArkUIRuntimeCallInfo *runtimeCallInfo)
475 {
476     EcmaVM* vm = runtimeCallInfo->GetVM();
477     return panda::JSValueRef::Undefined(vm);
478 }
479 
SetSepia(ArkUIRuntimeCallInfo * runtimeCallInfo)480 ArkUINativeModuleValue XComponentBridge::SetSepia(ArkUIRuntimeCallInfo *runtimeCallInfo)
481 {
482     EcmaVM* vm = runtimeCallInfo->GetVM();
483     return panda::JSValueRef::Undefined(vm);
484 }
485 
ResetSepia(ArkUIRuntimeCallInfo * runtimeCallInfo)486 ArkUINativeModuleValue XComponentBridge::ResetSepia(ArkUIRuntimeCallInfo *runtimeCallInfo)
487 {
488     EcmaVM* vm = runtimeCallInfo->GetVM();
489     return panda::JSValueRef::Undefined(vm);
490 }
491 
SetInvert(ArkUIRuntimeCallInfo * runtimeCallInfo)492 ArkUINativeModuleValue XComponentBridge::SetInvert(ArkUIRuntimeCallInfo *runtimeCallInfo)
493 {
494     EcmaVM* vm = runtimeCallInfo->GetVM();
495     return panda::JSValueRef::Undefined(vm);
496 }
497 
ResetInvert(ArkUIRuntimeCallInfo * runtimeCallInfo)498 ArkUINativeModuleValue XComponentBridge::ResetInvert(ArkUIRuntimeCallInfo *runtimeCallInfo)
499 {
500     EcmaVM* vm = runtimeCallInfo->GetVM();
501     return panda::JSValueRef::Undefined(vm);
502 }
503 
SetContrast(ArkUIRuntimeCallInfo * runtimeCallInfo)504 ArkUINativeModuleValue XComponentBridge::SetContrast(ArkUIRuntimeCallInfo *runtimeCallInfo)
505 {
506     EcmaVM* vm = runtimeCallInfo->GetVM();
507     return panda::JSValueRef::Undefined(vm);
508 }
509 
ResetContrast(ArkUIRuntimeCallInfo * runtimeCallInfo)510 ArkUINativeModuleValue XComponentBridge::ResetContrast(ArkUIRuntimeCallInfo *runtimeCallInfo)
511 {
512     EcmaVM* vm = runtimeCallInfo->GetVM();
513     return panda::JSValueRef::Undefined(vm);
514 }
515 
SetSaturate(ArkUIRuntimeCallInfo * runtimeCallInfo)516 ArkUINativeModuleValue XComponentBridge::SetSaturate(ArkUIRuntimeCallInfo *runtimeCallInfo)
517 {
518     EcmaVM* vm = runtimeCallInfo->GetVM();
519     return panda::JSValueRef::Undefined(vm);
520 }
521 
ResetSaturate(ArkUIRuntimeCallInfo * runtimeCallInfo)522 ArkUINativeModuleValue XComponentBridge::ResetSaturate(ArkUIRuntimeCallInfo *runtimeCallInfo)
523 {
524     EcmaVM* vm = runtimeCallInfo->GetVM();
525     return panda::JSValueRef::Undefined(vm);
526 }
527 
SetBrightness(ArkUIRuntimeCallInfo * runtimeCallInfo)528 ArkUINativeModuleValue XComponentBridge::SetBrightness(ArkUIRuntimeCallInfo *runtimeCallInfo)
529 {
530     EcmaVM* vm = runtimeCallInfo->GetVM();
531     return panda::JSValueRef::Undefined(vm);
532 }
533 
ResetBrightness(ArkUIRuntimeCallInfo * runtimeCallInfo)534 ArkUINativeModuleValue XComponentBridge::ResetBrightness(ArkUIRuntimeCallInfo *runtimeCallInfo)
535 {
536     EcmaVM* vm = runtimeCallInfo->GetVM();
537     return panda::JSValueRef::Undefined(vm);
538 }
539 
SetGrayscale(ArkUIRuntimeCallInfo * runtimeCallInfo)540 ArkUINativeModuleValue XComponentBridge::SetGrayscale(ArkUIRuntimeCallInfo *runtimeCallInfo)
541 {
542     EcmaVM* vm = runtimeCallInfo->GetVM();
543     return panda::JSValueRef::Undefined(vm);
544 }
545 
ResetGrayscale(ArkUIRuntimeCallInfo * runtimeCallInfo)546 ArkUINativeModuleValue XComponentBridge::ResetGrayscale(ArkUIRuntimeCallInfo *runtimeCallInfo)
547 {
548     EcmaVM* vm = runtimeCallInfo->GetVM();
549     return panda::JSValueRef::Undefined(vm);
550 }
551 
SetBackdropBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)552 ArkUINativeModuleValue XComponentBridge::SetBackdropBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
553 {
554     EcmaVM* vm = runtimeCallInfo->GetVM();
555     return panda::JSValueRef::Undefined(vm);
556 }
557 
ResetBackdropBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)558 ArkUINativeModuleValue XComponentBridge::ResetBackdropBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
559 {
560     EcmaVM* vm = runtimeCallInfo->GetVM();
561     return panda::JSValueRef::Undefined(vm);
562 }
563 
SetBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)564 ArkUINativeModuleValue XComponentBridge::SetBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
565 {
566     EcmaVM* vm = runtimeCallInfo->GetVM();
567     return panda::JSValueRef::Undefined(vm);
568 }
569 
ResetBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)570 ArkUINativeModuleValue XComponentBridge::ResetBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
571 {
572     EcmaVM* vm = runtimeCallInfo->GetVM();
573     return panda::JSValueRef::Undefined(vm);
574 }
575 
SetBackgroundImagePosition(ArkUIRuntimeCallInfo * runtimeCallInfo)576 ArkUINativeModuleValue XComponentBridge::SetBackgroundImagePosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
577 {
578     EcmaVM* vm = runtimeCallInfo->GetVM();
579     return panda::JSValueRef::Undefined(vm);
580 }
581 
ResetBackgroundImagePosition(ArkUIRuntimeCallInfo * runtimeCallInfo)582 ArkUINativeModuleValue XComponentBridge::ResetBackgroundImagePosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
583 {
584     EcmaVM* vm = runtimeCallInfo->GetVM();
585     return panda::JSValueRef::Undefined(vm);
586 }
587 
SetBackgroundImageSize(ArkUIRuntimeCallInfo * runtimeCallInfo)588 ArkUINativeModuleValue XComponentBridge::SetBackgroundImageSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
589 {
590     EcmaVM* vm = runtimeCallInfo->GetVM();
591     return panda::JSValueRef::Undefined(vm);
592 }
593 
ResetBackgroundImageSize(ArkUIRuntimeCallInfo * runtimeCallInfo)594 ArkUINativeModuleValue XComponentBridge::ResetBackgroundImageSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
595 {
596     EcmaVM* vm = runtimeCallInfo->GetVM();
597     return panda::JSValueRef::Undefined(vm);
598 }
599 
SetBackgroundImage(ArkUIRuntimeCallInfo * runtimeCallInfo)600 ArkUINativeModuleValue XComponentBridge::SetBackgroundImage(ArkUIRuntimeCallInfo *runtimeCallInfo)
601 {
602     EcmaVM* vm = runtimeCallInfo->GetVM();
603     return panda::JSValueRef::Undefined(vm);
604 }
605 
ResetBackgroundImage(ArkUIRuntimeCallInfo * runtimeCallInfo)606 ArkUINativeModuleValue XComponentBridge::ResetBackgroundImage(ArkUIRuntimeCallInfo *runtimeCallInfo)
607 {
608     EcmaVM* vm = runtimeCallInfo->GetVM();
609     return panda::JSValueRef::Undefined(vm);
610 }
611 
SetOnLoad(ArkUIRuntimeCallInfo * runtimeCallInfo)612 ArkUINativeModuleValue XComponentBridge::SetOnLoad(ArkUIRuntimeCallInfo* runtimeCallInfo)
613 {
614     EcmaVM* vm = runtimeCallInfo->GetVM();
615     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
616     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
617     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
618     CHECK_NULL_RETURN(secondArg->IsFunction(vm), panda::JSValueRef::Undefined(vm));
619     auto* frameNode = reinterpret_cast<FrameNode*>(firstArg->ToNativePointer(vm)->Value());
620     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
621     auto obj = secondArg->ToObject(vm);
622     panda::Local<panda::FunctionRef> func = obj;
623     auto onLoad = [vm, func = panda::CopyableGlobal(vm, func), frameNode](const std::string& xcomponentId) {
624         panda::LocalScope pandaScope(vm);
625         panda::TryCatch trycatch(vm);
626         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
627         std::vector<Local<JSValueRef>> argv;
628         Framework::JSRef<Framework::JSVal> jsVal;
629         if (Framework::XComponentClient::GetInstance().GetJSVal(xcomponentId, jsVal)) {
630             argv.emplace_back(jsVal->GetLocalHandle());
631         }
632         func->Call(vm, func.ToLocal(), argv.data(), argv.size());
633         TAG_LOGI(AceLogTag::ACE_XCOMPONENT, "XComponentNode[%{public}s] onLoad", xcomponentId.c_str());
634     };
635     XComponentModelNG::SetOnLoad(frameNode, std::move(onLoad));
636     return panda::JSValueRef::Undefined(vm);
637 }
638 
ResetOnLoad(ArkUIRuntimeCallInfo * runtimeCallInfo)639 ArkUINativeModuleValue XComponentBridge::ResetOnLoad(ArkUIRuntimeCallInfo* runtimeCallInfo)
640 {
641     EcmaVM* vm = runtimeCallInfo->GetVM();
642     return panda::JSValueRef::Undefined(vm);
643 }
644 
SetOnDestroy(ArkUIRuntimeCallInfo * runtimeCallInfo)645 ArkUINativeModuleValue XComponentBridge::SetOnDestroy(ArkUIRuntimeCallInfo* runtimeCallInfo)
646 {
647     EcmaVM* vm = runtimeCallInfo->GetVM();
648     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
649     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
650     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
651     CHECK_NULL_RETURN(secondArg->IsFunction(vm), panda::JSValueRef::Undefined(vm));
652     auto* frameNode = reinterpret_cast<FrameNode*>(firstArg->ToNativePointer(vm)->Value());
653     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
654     auto obj = secondArg->ToObject(vm);
655     panda::Local<panda::FunctionRef> func = obj;
656     auto onDestroy = [vm, func = panda::CopyableGlobal(vm, func), frameNode](const std::string& xcomponentId) {
657         panda::LocalScope pandaScope(vm);
658         panda::TryCatch trycatch(vm);
659         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
660         func->Call(vm, func.ToLocal(), nullptr, 0);
661         TAG_LOGI(AceLogTag::ACE_XCOMPONENT, "XComponentNode[%{public}s] onDestroy", xcomponentId.c_str());
662     };
663     XComponentModelNG::SetOnDestroy(frameNode, std::move(onDestroy));
664     return panda::JSValueRef::Undefined(vm);
665 }
666 
ResetOnDestroy(ArkUIRuntimeCallInfo * runtimeCallInfo)667 ArkUINativeModuleValue XComponentBridge::ResetOnDestroy(ArkUIRuntimeCallInfo* runtimeCallInfo)
668 {
669     EcmaVM* vm = runtimeCallInfo->GetVM();
670     return panda::JSValueRef::Undefined(vm);
671 }
672 
SetEnableAnalyzer(ArkUIRuntimeCallInfo * runtimeCallInfo)673 ArkUINativeModuleValue XComponentBridge::SetEnableAnalyzer(ArkUIRuntimeCallInfo* runtimeCallInfo)
674 {
675     EcmaVM* vm = runtimeCallInfo->GetVM();
676     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
677     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
678     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
679     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
680     if (secondArg->IsBoolean()) {
681         bool boolValue = secondArg->ToBoolean(vm)->Value();
682         GetArkUINodeModifiers()->getXComponentModifier()->setXComponentEnableAnalyzer(nativeNode, boolValue);
683     } else {
684         GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableAnalyzer(nativeNode);
685     }
686     return panda::JSValueRef::Undefined(vm);
687 }
688 
ResetEnableAnalyzer(ArkUIRuntimeCallInfo * runtimeCallInfo)689 ArkUINativeModuleValue XComponentBridge::ResetEnableAnalyzer(ArkUIRuntimeCallInfo* runtimeCallInfo)
690 {
691     EcmaVM* vm = runtimeCallInfo->GetVM();
692     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
693     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
694     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
695     GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableAnalyzer(nativeNode);
696     return panda::JSValueRef::Undefined(vm);
697 }
698 
SetEnableSecure(ArkUIRuntimeCallInfo * runtimeCallInfo)699 ArkUINativeModuleValue XComponentBridge::SetEnableSecure(ArkUIRuntimeCallInfo *runtimeCallInfo)
700 {
701     EcmaVM *vm = runtimeCallInfo->GetVM();
702     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
703     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
704     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
705     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
706     if (secondArg->IsBoolean()) {
707         bool boolValue = secondArg->ToBoolean(vm)->Value();
708         GetArkUINodeModifiers()->getXComponentModifier()->setXComponentEnableSecure(nativeNode, boolValue);
709     } else {
710         GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableSecure(nativeNode);
711     }
712     return panda::JSValueRef::Undefined(vm);
713 }
714 
ResetEnableSecure(ArkUIRuntimeCallInfo * runtimeCallInfo)715 ArkUINativeModuleValue XComponentBridge::ResetEnableSecure(ArkUIRuntimeCallInfo *runtimeCallInfo)
716 {
717     EcmaVM *vm = runtimeCallInfo->GetVM();
718     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
719     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
720     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
721     GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableSecure(nativeNode);
722     return panda::JSValueRef::Undefined(vm);
723 }
724 
SetRenderFit(ArkUIRuntimeCallInfo * runtimeCallInfo)725 ArkUINativeModuleValue XComponentBridge::SetRenderFit(ArkUIRuntimeCallInfo* runtimeCallInfo)
726 {
727     EcmaVM *vm = runtimeCallInfo->GetVM();
728     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
729     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
730     auto fitModeArg = runtimeCallInfo->GetCallArgRef(ARG_ID);
731     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
732     auto renderFit = static_cast<int32_t>(RenderFit::TOP_LEFT);
733     if (fitModeArg->IsNumber()) {
734         renderFit = fitModeArg->Int32Value(vm);
735     }
736     GetArkUINodeModifiers()->getXComponentModifier()->setXComponentRenderFit(nativeNode, renderFit);
737     return panda::JSValueRef::Undefined(vm);
738 }
739 
ResetRenderFit(ArkUIRuntimeCallInfo * runtimeCallInfo)740 ArkUINativeModuleValue XComponentBridge::ResetRenderFit(ArkUIRuntimeCallInfo* runtimeCallInfo)
741 {
742     EcmaVM *vm = runtimeCallInfo->GetVM();
743     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
744     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST);
745     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
746     GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentRenderFit(nativeNode);
747     return panda::JSValueRef::Undefined(vm);
748 }
749 } // namespace OHOS::Ace::NG
750