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*)(¶ms);
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