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
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_render_node_bridge.h"
17
18 #include <cstdint>
19
20 #include "canvas_napi/js_canvas.h"
21 #include "jsnapi_expo.h"
22
23 #include "base/geometry/dimension.h"
24 #include "base/geometry/ng/rect_t.h"
25 #include "base/geometry/shape.h"
26 #include "bridge/common/utils/engine_helper.h"
27 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_bridge.h"
28 #include "bridge/declarative_frontend/jsview/js_utils.h"
29 #include "core/components_ng/pattern/render_node/render_node_pattern.h"
30
31 namespace OHOS::Ace::NG {
32 namespace {
33 const uint32_t DEFAULT_COLOR = 0xFF000000;
34
SetRectShape(ArkUIRuntimeCallInfo * runtimeCallInfo,bool isClip)35 ArkUINativeModuleValue SetRectShape(ArkUIRuntimeCallInfo* runtimeCallInfo, bool isClip)
36 {
37 EcmaVM* vm = runtimeCallInfo->GetVM();
38 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
39 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
40
41 auto leftValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 1, 0.0f);
42 auto topValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 2, 0.0f);
43 auto rightValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 3, 0.0f);
44 auto bottomValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 4, 0.0f);
45 if (isClip) {
46 GetArkUINodeModifiers()->getRenderNodeModifier()->setRectClip(
47 nativeNode, leftValue, topValue, rightValue - leftValue, bottomValue - topValue);
48 return panda::JSValueRef::Undefined(vm);
49 }
50 auto fillColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 5, DEFAULT_COLOR);
51 auto strokeColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 6, DEFAULT_COLOR);
52 auto strokeWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 7, 0.0f);
53
54 GetArkUINodeModifiers()->getRenderNodeModifier()->setRectMask(nativeNode, leftValue, topValue,
55 rightValue - leftValue, bottomValue - topValue, fillColorValue, strokeColorValue, strokeWidthValue);
56 return panda::JSValueRef::Undefined(vm);
57 }
58
SetCircleShape(ArkUIRuntimeCallInfo * runtimeCallInfo,bool isClip)59 ArkUINativeModuleValue SetCircleShape(ArkUIRuntimeCallInfo* runtimeCallInfo, bool isClip)
60 {
61 EcmaVM* vm = runtimeCallInfo->GetVM();
62 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
63 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
64
65 auto centerXValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 1, 0.0f);
66 auto centerYValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 2, 0.0f);
67 auto radiusValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 3, 0.0f);
68 if (isClip) {
69 GetArkUINodeModifiers()->getRenderNodeModifier()->setCircleClip(
70 nativeNode, centerXValue, centerYValue, radiusValue);
71 return panda::JSValueRef::Undefined(vm);
72 }
73 auto fillColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 4, DEFAULT_COLOR);
74 auto strokeColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 5, DEFAULT_COLOR);
75 auto strokeWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 6, 0.0f);
76
77 GetArkUINodeModifiers()->getRenderNodeModifier()->setCircleMask(
78 nativeNode, centerXValue, centerYValue, radiusValue, fillColorValue, strokeColorValue, strokeWidthValue);
79 return panda::JSValueRef::Undefined(vm);
80 }
81
SetRoundRectShape(ArkUIRuntimeCallInfo * runtimeCallInfo,bool isClip)82 ArkUINativeModuleValue SetRoundRectShape(ArkUIRuntimeCallInfo* runtimeCallInfo, bool isClip)
83 {
84 EcmaVM* vm = runtimeCallInfo->GetVM();
85 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
86 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
87
88 auto topLeftXValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 1, 0.0f);
89 auto topLeftYValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 2, 0.0f);
90
91 auto topRightXValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 3, 0.0f);
92 auto topRightYValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 4, 0.0f);
93
94 auto bottomLeftXValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 5, 0.0f);
95 auto bottomLeftYValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 6, 0.0f);
96
97 auto bottomRightXValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 7, 0.0f);
98 auto bottomRightYValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 8, 0.0f);
99
100 auto leftValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 9, 0.0f);
101 auto topValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 10, 0.0f);
102 auto rightValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 11, 0.0f);
103 auto bottomValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 12, 0.0f);
104
105 ArkUI_Float32 roundRect[] = { topLeftXValue, topLeftYValue, topRightXValue, topRightYValue, bottomLeftXValue,
106 bottomLeftYValue, bottomRightXValue, bottomRightYValue, leftValue, topValue, rightValue - leftValue,
107 bottomValue - topValue };
108
109 if (isClip) {
110 GetArkUINodeModifiers()->getRenderNodeModifier()->setRoundRectClip(nativeNode, roundRect, sizeof(roundRect));
111 return panda::JSValueRef::Undefined(vm);
112 }
113
114 auto fillColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 13, DEFAULT_COLOR);
115 auto strokeColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 14, DEFAULT_COLOR);
116 auto strokeWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 15, 0.0f);
117
118 GetArkUINodeModifiers()->getRenderNodeModifier()->setRoundRectMask(
119 nativeNode, roundRect, sizeof(roundRect), fillColorValue, strokeColorValue, strokeWidthValue);
120 return panda::JSValueRef::Undefined(vm);
121 }
122
SetOvalShape(ArkUIRuntimeCallInfo * runtimeCallInfo,bool isClip)123 ArkUINativeModuleValue SetOvalShape(ArkUIRuntimeCallInfo* runtimeCallInfo, bool isClip)
124 {
125 EcmaVM* vm = runtimeCallInfo->GetVM();
126 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
127 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
128
129 auto leftValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 1, 0.0f);
130 auto topValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 2, 0.0f);
131 auto rightValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 3, 0.0f);
132 auto bottomValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 4, 0.0f);
133 if (isClip) {
134 GetArkUINodeModifiers()->getRenderNodeModifier()->setOvalClip(
135 nativeNode, leftValue, topValue, rightValue - leftValue, bottomValue - topValue);
136 return panda::JSValueRef::Undefined(vm);
137 }
138 auto fillColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 5, DEFAULT_COLOR);
139 auto strokeColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 6, DEFAULT_COLOR);
140 auto strokeWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 7, 0.0f);
141
142 GetArkUINodeModifiers()->getRenderNodeModifier()->setOvalMask(nativeNode, leftValue, topValue,
143 rightValue - leftValue, bottomValue - topValue, fillColorValue, strokeColorValue, strokeWidthValue);
144 return panda::JSValueRef::Undefined(vm);
145 }
146
SetCommandPathShape(ArkUIRuntimeCallInfo * runtimeCallInfo,bool isClip)147 ArkUINativeModuleValue SetCommandPathShape(ArkUIRuntimeCallInfo* runtimeCallInfo, bool isClip)
148 {
149 EcmaVM* vm = runtimeCallInfo->GetVM();
150 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
151 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
152
153 Local<JSValueRef> path = runtimeCallInfo->GetCallArgRef(1);
154 std::string pathValue;
155 if (path->IsString(vm)) {
156 pathValue = path->ToString(vm)->ToString(vm);
157 }
158
159 if (isClip) {
160 GetArkUINodeModifiers()->getRenderNodeModifier()->setCommandPathClip(nativeNode, pathValue.c_str());
161 return panda::JSValueRef::Undefined(vm);
162 }
163 auto fillColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 2, DEFAULT_COLOR);
164 auto strokeColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 3, DEFAULT_COLOR);
165 auto strokeWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 4, 0.0f);
166
167 GetArkUINodeModifiers()->getRenderNodeModifier()->setCommandPathMask(
168 nativeNode, pathValue.c_str(), fillColorValue, strokeColorValue, strokeWidthValue);
169 return panda::JSValueRef::Undefined(vm);
170 }
171 } // namespace
172
CreateRenderNode(ArkUIRuntimeCallInfo * runtimeCallInfo)173 ArkUINativeModuleValue RenderNodeBridge::CreateRenderNode(ArkUIRuntimeCallInfo* runtimeCallInfo)
174 {
175 EcmaVM* vm = runtimeCallInfo->GetVM();
176 auto nodeId = ElementRegister::GetInstance()->MakeUniqueId();
177 auto frameNode = NG::FrameNode::GetOrCreateFrameNode(
178 V2::RENDER_NODE_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<NG::RenderNodePattern>(); });
179 frameNode->SetIsArkTsRenderNode(true);
180 RenderNodeBridge::SetOnDraw(frameNode, runtimeCallInfo);
181 return NativeUtilsBridge::CreateStrongRef(vm, frameNode);
182 }
183
FireDrawCallback(EcmaVM * vm,JsWeak<panda::CopyableGlobal<panda::ObjectRef>> object,NG::DrawingContext & context,Local<panda::StringRef> funcName)184 void RenderNodeBridge::FireDrawCallback(EcmaVM* vm, JsWeak<panda::CopyableGlobal<panda::ObjectRef>> object,
185 NG::DrawingContext& context, Local<panda::StringRef> funcName)
186 {
187 auto obj = object.Lock();
188 CHECK_NULL_VOID(!obj.IsEmpty());
189 CHECK_NULL_VOID(obj->IsObject(vm));
190 auto funcObj = obj->Get(vm, funcName);
191 CHECK_NULL_VOID(funcObj->IsFunction(vm));
192 panda::Local<panda::FunctionRef> func = funcObj;
193 auto engine = EngineHelper::GetCurrentEngine();
194 CHECK_NULL_VOID(engine);
195 NativeEngine* nativeEngine = engine->GetNativeEngine();
196 napi_env env = reinterpret_cast<napi_env>(nativeEngine);
197 Framework::ScopeRAII scope(env);
198
199 const char* keysOfSize[] = { "height", "width" };
200 Local<JSValueRef> valuesOfSize[] = {
201 panda::NumberRef::New(vm, static_cast<double>(PipelineBase::Px2VpWithCurrentDensity(context.height))),
202 panda::NumberRef::New(vm, static_cast<double>(PipelineBase::Px2VpWithCurrentDensity(context.width)))
203 };
204 auto sizeObj = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keysOfSize), keysOfSize, valuesOfSize);
205
206 Local<JSValueRef> valuesOfSizeInPixel[] = {
207 panda::NumberRef::New(vm, static_cast<double>(context.height)),
208 panda::NumberRef::New(vm, static_cast<double>(context.width))
209 };
210 auto sizeInPixelObj =
211 panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keysOfSize), keysOfSize, valuesOfSizeInPixel);
212
213 auto jsCanvas = OHOS::Rosen::Drawing::JsCanvas::CreateJsCanvas(env, &context.canvas);
214 OHOS::Rosen::Drawing::JsCanvas* unwrapCanvas = nullptr;
215 napi_unwrap(env, jsCanvas, reinterpret_cast<void**>(&unwrapCanvas));
216 if (unwrapCanvas) {
217 unwrapCanvas->SaveCanvas();
218 unwrapCanvas->ClipCanvas(context.width, context.height);
219 }
220
221 auto jsCanvasVal = NapiValueToLocalValue(jsCanvas);
222 Local<JSValueRef> values[] = { sizeObj, sizeInPixelObj, jsCanvasVal };
223 const char* keys[] = { "size", "sizeInPixel", "canvas" };
224 auto contextObj = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
225 contextObj->SetNativePointerFieldCount(vm, 1);
226 JSValueWrapper valueWrapper = contextObj;
227 napi_value nativeValue = nativeEngine->ValueToNapiValue(valueWrapper);
228 napi_wrap(
229 env, nativeValue, &context.canvas, [](napi_env, void*, void*) {}, nullptr, nullptr);
230 panda::Local<panda::JSValueRef> params[1] = { contextObj };
231 func->Call(vm, obj.ToLocal(), params, 1);
232 if (unwrapCanvas) {
233 unwrapCanvas->RestoreCanvas();
234 unwrapCanvas->ResetCanvas();
235 }
236 }
237
SetOnDraw(const RefPtr<FrameNode> & frameNode,ArkUIRuntimeCallInfo * runtimeCallInfo)238 void RenderNodeBridge::SetOnDraw(const RefPtr<FrameNode>& frameNode, ArkUIRuntimeCallInfo* runtimeCallInfo)
239 {
240 EcmaVM* vm = runtimeCallInfo->GetVM();
241 CHECK_NULL_VOID(vm);
242 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
243 CHECK_NULL_VOID(firstArg->IsObject(vm));
244 auto obj = Local<panda::ObjectRef>(firstArg);
245 auto funcName = panda::StringRef::NewFromUtf8(vm, "draw");
246 auto funcObj = obj->Get(vm, funcName);
247 CHECK_NULL_VOID(funcObj->IsFunction(vm));
248 auto drawCallback = [vm, object = JsWeak(panda::CopyableGlobal(vm, obj))](NG::DrawingContext& context) {
249 panda::LocalScope pandaScope(vm);
250 panda::TryCatch trycatch(vm);
251 auto funcName = panda::StringRef::NewFromUtf8(vm, "draw");
252 RenderNodeBridge::FireDrawCallback(vm, object, context, funcName);
253 };
254 auto pattern = frameNode->GetPattern<NG::RenderNodePattern>();
255 pattern->SetDrawCallback(std::move(drawCallback));
256 }
257
AppendChild(ArkUIRuntimeCallInfo * runtimeCallInfo)258 ArkUINativeModuleValue RenderNodeBridge::AppendChild(ArkUIRuntimeCallInfo* runtimeCallInfo)
259 {
260 EcmaVM* vm = runtimeCallInfo->GetVM();
261 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
262 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
263 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
264 auto childNativeNode = nodePtr(secondArg->ToNativePointer(vm)->Value());
265 GetArkUINodeModifiers()->getRenderNodeModifier()->appendChild(nativeNode, childNativeNode);
266 return panda::JSValueRef::Undefined(vm);
267 }
268
InsertChildAfter(ArkUIRuntimeCallInfo * runtimeCallInfo)269 ArkUINativeModuleValue RenderNodeBridge::InsertChildAfter(ArkUIRuntimeCallInfo* runtimeCallInfo)
270 {
271 EcmaVM* vm = runtimeCallInfo->GetVM();
272 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
273 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
274 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
275 auto child = nodePtr(secondArg->ToNativePointer(vm)->Value());
276 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(2);
277 if (thirdArg.IsNull()) {
278 GetArkUINodeModifiers()->getRenderNodeModifier()->insertChildAfter(nativeNode, child, nullptr);
279 return panda::JSValueRef::Undefined(vm);
280 }
281 auto sibling = nodePtr(thirdArg->ToNativePointer(vm)->Value());
282 GetArkUINodeModifiers()->getRenderNodeModifier()->insertChildAfter(nativeNode, child, sibling);
283 return panda::JSValueRef::Undefined(vm);
284 }
285
RemoveChild(ArkUIRuntimeCallInfo * runtimeCallInfo)286 ArkUINativeModuleValue RenderNodeBridge::RemoveChild(ArkUIRuntimeCallInfo* runtimeCallInfo)
287 {
288 EcmaVM* vm = runtimeCallInfo->GetVM();
289 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
290 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
291 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
292 auto childNativeNode = nodePtr(secondArg->ToNativePointer(vm)->Value());
293 GetArkUINodeModifiers()->getRenderNodeModifier()->removeChild(nativeNode, childNativeNode);
294 return panda::JSValueRef::Undefined(vm);
295 }
296
ClearChildren(ArkUIRuntimeCallInfo * runtimeCallInfo)297 ArkUINativeModuleValue RenderNodeBridge::ClearChildren(ArkUIRuntimeCallInfo* runtimeCallInfo)
298 {
299 EcmaVM* vm = runtimeCallInfo->GetVM();
300 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
301 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
302 GetArkUINodeModifiers()->getRenderNodeModifier()->clearChildren(nativeNode);
303 return panda::JSValueRef::Undefined(vm);
304 }
305
SetClipToFrame(ArkUIRuntimeCallInfo * runtimeCallInfo)306 ArkUINativeModuleValue RenderNodeBridge::SetClipToFrame(ArkUIRuntimeCallInfo* runtimeCallInfo)
307 {
308 EcmaVM* vm = runtimeCallInfo->GetVM();
309 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
310 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
311 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
312 bool useClip = false;
313 if (secondArg->IsBoolean()) {
314 useClip = secondArg->ToBoolean(vm)->Value();
315 }
316 GetArkUINodeModifiers()->getRenderNodeModifier()->setClipToFrame(nativeNode, useClip);
317 return panda::JSValueRef::Undefined(vm);
318 }
319
SetRotation(ArkUIRuntimeCallInfo * runtimeCallInfo)320 ArkUINativeModuleValue RenderNodeBridge::SetRotation(ArkUIRuntimeCallInfo* runtimeCallInfo)
321 {
322 EcmaVM* vm = runtimeCallInfo->GetVM();
323 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
324 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
325 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
326 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(2);
327 Local<JSValueRef> fourthArg = runtimeCallInfo->GetCallArgRef(3);
328 Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(4);
329 double rotationX = 0.0;
330 double rotationY = 0.0;
331 double rotationZ = 0.0;
332 int32_t unit = 0;
333 if (secondArg->IsNumber()) {
334 rotationX = secondArg->ToNumber(vm)->Value();
335 }
336 if (thirdArg->IsNumber()) {
337 rotationY = thirdArg->ToNumber(vm)->Value();
338 }
339 if (fourthArg->IsNumber()) {
340 rotationZ = fourthArg->ToNumber(vm)->Value();
341 }
342 if (fifthArg->IsNumber()) {
343 unit = fifthArg->Int32Value(vm);
344 }
345 GetArkUINodeModifiers()->getRenderNodeModifier()->setRotation(nativeNode, rotationX, rotationY, rotationZ, unit);
346 return panda::JSValueRef::Undefined(vm);
347 }
348
SetShadowColor(ArkUIRuntimeCallInfo * runtimeCallInfo)349 ArkUINativeModuleValue RenderNodeBridge::SetShadowColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
350 {
351 EcmaVM* vm = runtimeCallInfo->GetVM();
352 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
353 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
354 Local<JSValueRef> color = runtimeCallInfo->GetCallArgRef(1);
355 uint32_t colorValue = 0;
356 if (color->IsNumber()) {
357 colorValue = color->Uint32Value(vm);
358 }
359 GetArkUINodeModifiers()->getRenderNodeModifier()->setShadowColor(nativeNode, colorValue);
360 return panda::JSValueRef::Undefined(vm);
361 }
362
SetShadowOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)363 ArkUINativeModuleValue RenderNodeBridge::SetShadowOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
364 {
365 EcmaVM* vm = runtimeCallInfo->GetVM();
366 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
367 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
368 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
369 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(2);
370 Local<JSValueRef> fourthArg = runtimeCallInfo->GetCallArgRef(3);
371 double offsetX = 0.0;
372 double offsetY = 0.0;
373 int32_t unit = 0;
374 if (secondArg->IsNumber()) {
375 offsetX = secondArg->ToNumber(vm)->Value();
376 }
377 if (thirdArg->IsNumber()) {
378 offsetY = thirdArg->ToNumber(vm)->Value();
379 }
380 if (fourthArg->IsNumber()) {
381 unit = fourthArg->Int32Value(vm);
382 }
383 GetArkUINodeModifiers()->getRenderNodeModifier()->setShadowOffset(nativeNode, offsetX, offsetY, unit);
384 return panda::JSValueRef::Undefined(vm);
385 }
SetLabel(ArkUIRuntimeCallInfo * runtimeCallInfo)386 ArkUINativeModuleValue RenderNodeBridge::SetLabel(ArkUIRuntimeCallInfo* runtimeCallInfo)
387 {
388 EcmaVM* vm = runtimeCallInfo->GetVM();
389 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
390 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
391 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
392 Local<JSValueRef> label = runtimeCallInfo->GetCallArgRef(1);
393 std::string labelValue;
394 if (label->IsString(vm)) {
395 labelValue = label->ToString(vm)->ToString(vm);
396 } else {
397 labelValue = "";
398 LOGW("The label of the node should be a string!");
399 }
400 GetArkUINodeModifiers()->getRenderNodeModifier()->setLabel(nativeNode, labelValue.c_str());
401 return panda::JSValueRef::Undefined(vm);
402 }
SetShadowAlpha(ArkUIRuntimeCallInfo * runtimeCallInfo)403 ArkUINativeModuleValue RenderNodeBridge::SetShadowAlpha(ArkUIRuntimeCallInfo* runtimeCallInfo)
404 {
405 EcmaVM* vm = runtimeCallInfo->GetVM();
406 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
407 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
408 Local<JSValueRef> alpha = runtimeCallInfo->GetCallArgRef(1);
409 float alphaValue = 1.0;
410 if (alpha->IsNumber()) {
411 alphaValue = alpha->ToNumber(vm)->Value();
412 }
413 GetArkUINodeModifiers()->getRenderNodeModifier()->setShadowAlpha(nativeNode, alphaValue);
414 return panda::JSValueRef::Undefined(vm);
415 }
SetShadowElevation(ArkUIRuntimeCallInfo * runtimeCallInfo)416 ArkUINativeModuleValue RenderNodeBridge::SetShadowElevation(ArkUIRuntimeCallInfo* runtimeCallInfo)
417 {
418 EcmaVM* vm = runtimeCallInfo->GetVM();
419 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
420 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
421 Local<JSValueRef> elevation = runtimeCallInfo->GetCallArgRef(1);
422 float elevationValue = 0;
423 if (elevation->IsNumber()) {
424 elevationValue = elevation->ToNumber(vm)->Value();
425 }
426 GetArkUINodeModifiers()->getRenderNodeModifier()->setShadowElevation(nativeNode, elevationValue);
427 return panda::JSValueRef::Undefined(vm);
428 }
SetShadowRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)429 ArkUINativeModuleValue RenderNodeBridge::SetShadowRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
430 {
431 EcmaVM* vm = runtimeCallInfo->GetVM();
432 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
433 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
434 Local<JSValueRef> radius = runtimeCallInfo->GetCallArgRef(1);
435 float radiusValue = 0;
436 if (radius->IsNumber()) {
437 radiusValue = radius->ToNumber(vm)->Value();
438 }
439
440 GetArkUINodeModifiers()->getRenderNodeModifier()->setShadowRadius(nativeNode, radiusValue);
441 return panda::JSValueRef::Undefined(vm);
442 }
443
SetScale(ArkUIRuntimeCallInfo * runtimeCallInfo)444 ArkUINativeModuleValue RenderNodeBridge::SetScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
445 {
446 EcmaVM* vm = runtimeCallInfo->GetVM();
447 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
448 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
449
450 Local<JSValueRef> scaleX = runtimeCallInfo->GetCallArgRef(1);
451 float scaleXValue = 0;
452 if (scaleX->IsNumber()) {
453 scaleXValue = scaleX->ToNumber(vm)->Value();
454 }
455
456 Local<JSValueRef> scaleY = runtimeCallInfo->GetCallArgRef(2);
457 float scaleYValue = 0;
458 if (scaleY->IsNumber()) {
459 scaleYValue = scaleY->ToNumber(vm)->Value();
460 }
461
462 GetArkUINodeModifiers()->getRenderNodeModifier()->setScale(nativeNode, scaleXValue, scaleYValue);
463 return panda::JSValueRef::Undefined(vm);
464 }
465
SetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)466 ArkUINativeModuleValue RenderNodeBridge::SetBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
467 {
468 EcmaVM* vm = runtimeCallInfo->GetVM();
469 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
470 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
471 Local<JSValueRef> color = runtimeCallInfo->GetCallArgRef(1);
472 uint32_t colorValue = 0;
473 if (color->IsNumber()) {
474 colorValue = color->Uint32Value(vm);
475 }
476
477 GetArkUINodeModifiers()->getRenderNodeModifier()->setRenderNodeBackgroundColor(nativeNode, colorValue);
478 return panda::JSValueRef::Undefined(vm);
479 }
480
SetPivot(ArkUIRuntimeCallInfo * runtimeCallInfo)481 ArkUINativeModuleValue RenderNodeBridge::SetPivot(ArkUIRuntimeCallInfo* runtimeCallInfo)
482 {
483 EcmaVM* vm = runtimeCallInfo->GetVM();
484 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
485 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
486
487 Local<JSValueRef> pivotX = runtimeCallInfo->GetCallArgRef(1);
488 float pivotXValue = 0;
489 if (pivotX->IsNumber()) {
490 pivotXValue = pivotX->ToNumber(vm)->Value();
491 }
492
493 Local<JSValueRef> pivotY = runtimeCallInfo->GetCallArgRef(2);
494 float pivotYValue = 0;
495 if (pivotY->IsNumber()) {
496 pivotYValue = pivotY->ToNumber(vm)->Value();
497 }
498
499 GetArkUINodeModifiers()->getRenderNodeModifier()->setPivot(nativeNode, pivotXValue, pivotYValue);
500 return panda::JSValueRef::Undefined(vm);
501 }
502
SetFrame(ArkUIRuntimeCallInfo * runtimeCallInfo)503 ArkUINativeModuleValue RenderNodeBridge::SetFrame(ArkUIRuntimeCallInfo* runtimeCallInfo)
504 {
505 EcmaVM* vm = runtimeCallInfo->GetVM();
506 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
507 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
508
509 Local<JSValueRef> positionX = runtimeCallInfo->GetCallArgRef(1);
510 float positionXValue = 0;
511 if (positionX->IsNumber()) {
512 positionXValue = positionX->ToNumber(vm)->Value();
513 }
514
515 Local<JSValueRef> positionY = runtimeCallInfo->GetCallArgRef(2);
516 float positionYValue = 0;
517 if (positionY->IsNumber()) {
518 positionYValue = positionY->ToNumber(vm)->Value();
519 }
520
521 Local<JSValueRef> width = runtimeCallInfo->GetCallArgRef(3);
522 float widthValue = 0;
523 if (width->IsNumber()) {
524 widthValue = width->ToNumber(vm)->Value();
525 }
526
527 Local<JSValueRef> height = runtimeCallInfo->GetCallArgRef(4);
528 float heightValue = 0;
529 if (height->IsNumber()) {
530 heightValue = height->ToNumber(vm)->Value();
531 }
532
533 GetArkUINodeModifiers()->getRenderNodeModifier()->setFrame(
534 nativeNode, positionXValue, positionYValue, widthValue, heightValue);
535 return panda::JSValueRef::Undefined(vm);
536 }
537
SetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)538 ArkUINativeModuleValue RenderNodeBridge::SetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
539 {
540 EcmaVM* vm = runtimeCallInfo->GetVM();
541 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
542 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
543
544 Local<JSValueRef> width = runtimeCallInfo->GetCallArgRef(1);
545 float widthValue = 0;
546 if (width->IsNumber()) {
547 widthValue = width->ToNumber(vm)->Value();
548 }
549
550 Local<JSValueRef> height = runtimeCallInfo->GetCallArgRef(2);
551 float heightValue = 0;
552 if (height->IsNumber()) {
553 heightValue = height->ToNumber(vm)->Value();
554 }
555
556 Local<JSValueRef> unit = runtimeCallInfo->GetCallArgRef(3);
557 int32_t unitValue = 0;
558 if (unit->IsNumber()) {
559 unitValue = unit->Int32Value(vm);
560 }
561
562 GetArkUINodeModifiers()->getRenderNodeModifier()->setSize(nativeNode, widthValue, heightValue, unitValue);
563 return panda::JSValueRef::Undefined(vm);
564 }
565
SetPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)566 ArkUINativeModuleValue RenderNodeBridge::SetPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
567 {
568 EcmaVM* vm = runtimeCallInfo->GetVM();
569 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
570 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
571
572 Local<JSValueRef> xAxis = runtimeCallInfo->GetCallArgRef(1);
573 float xAxisValue = 0;
574 if (xAxis->IsNumber()) {
575 xAxisValue = xAxis->ToNumber(vm)->Value();
576 }
577
578 Local<JSValueRef> yAxis = runtimeCallInfo->GetCallArgRef(2);
579 float yAxisValue = 0;
580 if (yAxis->IsNumber()) {
581 yAxisValue = yAxis->ToNumber(vm)->Value();
582 }
583
584 Local<JSValueRef> unit = runtimeCallInfo->GetCallArgRef(3);
585 int32_t unitValue = 0;
586 if (unit->IsNumber()) {
587 unitValue = unit->Int32Value(vm);
588 }
589
590 GetArkUINodeModifiers()->getRenderNodeModifier()->setPosition(nativeNode, xAxisValue, yAxisValue, unitValue);
591 return panda::JSValueRef::Undefined(vm);
592 }
593
SetOpacity(ArkUIRuntimeCallInfo * runtimeCallInfo)594 ArkUINativeModuleValue RenderNodeBridge::SetOpacity(ArkUIRuntimeCallInfo* runtimeCallInfo)
595 {
596 EcmaVM* vm = runtimeCallInfo->GetVM();
597 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
598 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
599 Local<JSValueRef> opacity = runtimeCallInfo->GetCallArgRef(1);
600 float opacityValue = 0;
601 if (opacity->IsNumber()) {
602 opacityValue = opacity->ToNumber(vm)->Value();
603 }
604
605 GetArkUINodeModifiers()->getRenderNodeModifier()->setOpacity(nativeNode, opacityValue);
606 return panda::JSValueRef::Undefined(vm);
607 }
608
SetTranslate(ArkUIRuntimeCallInfo * runtimeCallInfo)609 ArkUINativeModuleValue RenderNodeBridge::SetTranslate(ArkUIRuntimeCallInfo* runtimeCallInfo)
610 {
611 EcmaVM* vm = runtimeCallInfo->GetVM();
612 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
613 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
614
615 Local<JSValueRef> translateX = runtimeCallInfo->GetCallArgRef(1);
616 float translateXValue = 0;
617 if (translateX->IsNumber()) {
618 translateXValue = translateX->ToNumber(vm)->Value();
619 }
620
621 Local<JSValueRef> translateY = runtimeCallInfo->GetCallArgRef(2);
622 float translateYValue = 0;
623 if (translateY->IsNumber()) {
624 translateYValue = translateY->ToNumber(vm)->Value();
625 }
626
627 GetArkUINodeModifiers()->getRenderNodeModifier()->setTranslate(nativeNode, translateXValue, translateYValue, 0);
628 return panda::JSValueRef::Undefined(vm);
629 }
630
SetBorderStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)631 ArkUINativeModuleValue RenderNodeBridge::SetBorderStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
632 {
633 EcmaVM* vm = runtimeCallInfo->GetVM();
634 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
635 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
636
637 auto leftStyle = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 1, 0);
638 auto leftStyleValue = static_cast<BorderStyle>(leftStyle);
639
640 auto topStyle = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 2, 0);
641 auto topStyleValue = static_cast<BorderStyle>(topStyle);
642
643 auto rightStyle = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 3, 0);
644 auto rightStyleValue = static_cast<BorderStyle>(rightStyle);
645
646 auto bottomStyle = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 4, 0);
647 auto bottomStyleValue = static_cast<BorderStyle>(bottomStyle);
648
649 GetArkUINodeModifiers()->getRenderNodeModifier()->setBorderStyle(nativeNode,
650 static_cast<ArkUI_Int32>(leftStyleValue), static_cast<ArkUI_Int32>(topStyleValue),
651 static_cast<ArkUI_Int32>(rightStyleValue), static_cast<ArkUI_Int32>(bottomStyleValue));
652 return panda::JSValueRef::Undefined(vm);
653 }
654
SetBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)655 ArkUINativeModuleValue RenderNodeBridge::SetBorderWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
656 {
657 EcmaVM* vm = runtimeCallInfo->GetVM();
658 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
659 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
660
661 auto leftWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 1, 0.0f);
662 auto topWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 2, 0.0f);
663 auto rightWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 3, 0.0f);
664 auto bottomWidthValue = RenderNodeBridge::GetNumber<float>(vm, runtimeCallInfo, 4, 0.0f);
665 auto unitValue = RenderNodeBridge::GetNumber<int32_t>(vm, runtimeCallInfo, 5, 0);
666
667 GetArkUINodeModifiers()->getRenderNodeModifier()->setBorderWidth(
668 nativeNode, leftWidthValue, topWidthValue, rightWidthValue, bottomWidthValue, unitValue);
669 return panda::JSValueRef::Undefined(vm);
670 }
671
SetBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)672 ArkUINativeModuleValue RenderNodeBridge::SetBorderColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
673 {
674 EcmaVM* vm = runtimeCallInfo->GetVM();
675 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
676 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
677
678 auto leftColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 1, DEFAULT_COLOR);
679 auto topColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 2, DEFAULT_COLOR);
680 auto rightColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 3, DEFAULT_COLOR);
681 auto bottomColorValue = RenderNodeBridge::GetNumber<uint32_t>(vm, runtimeCallInfo, 4, DEFAULT_COLOR);
682
683 GetArkUINodeModifiers()->getRenderNodeModifier()->setBorderColor(
684 nativeNode, leftColorValue, topColorValue, rightColorValue, bottomColorValue);
685 return panda::JSValueRef::Undefined(vm);
686 }
687
SetBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)688 ArkUINativeModuleValue RenderNodeBridge::SetBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
689 {
690 EcmaVM* vm = runtimeCallInfo->GetVM();
691 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
692 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
693
694 auto topLeftRadiusValue = RenderNodeBridge::GetNumber<double>(vm, runtimeCallInfo, 1, 0.0);
695 auto topRightRadiusValue = RenderNodeBridge::GetNumber<double>(vm, runtimeCallInfo, 2, 0.0);
696 auto bottomLeftRadiusValue = RenderNodeBridge::GetNumber<double>(vm, runtimeCallInfo, 3, 0.0);
697 auto bottomRightRadiusValue = RenderNodeBridge::GetNumber<double>(vm, runtimeCallInfo, 4, 0.0);
698 auto unitValue = RenderNodeBridge::GetNumber<int32_t>(vm, runtimeCallInfo, 5, 0);
699
700 GetArkUINodeModifiers()->getRenderNodeModifier()->setBorderRadius(
701 nativeNode, topLeftRadiusValue, topRightRadiusValue, bottomLeftRadiusValue, bottomRightRadiusValue, unitValue);
702 return panda::JSValueRef::Undefined(vm);
703 }
704
SetRectMask(ArkUIRuntimeCallInfo * runtimeCallInfo)705 ArkUINativeModuleValue RenderNodeBridge::SetRectMask(ArkUIRuntimeCallInfo* runtimeCallInfo)
706 {
707 return SetRectShape(runtimeCallInfo, false);
708 }
709
SetCircleMask(ArkUIRuntimeCallInfo * runtimeCallInfo)710 ArkUINativeModuleValue RenderNodeBridge::SetCircleMask(ArkUIRuntimeCallInfo* runtimeCallInfo)
711 {
712 return SetCircleShape(runtimeCallInfo, false);
713 }
714
SetRoundRectMask(ArkUIRuntimeCallInfo * runtimeCallInfo)715 ArkUINativeModuleValue RenderNodeBridge::SetRoundRectMask(ArkUIRuntimeCallInfo* runtimeCallInfo)
716 {
717 return SetRoundRectShape(runtimeCallInfo, false);
718 }
719
SetOvalMask(ArkUIRuntimeCallInfo * runtimeCallInfo)720 ArkUINativeModuleValue RenderNodeBridge::SetOvalMask(ArkUIRuntimeCallInfo* runtimeCallInfo)
721 {
722 return SetOvalShape(runtimeCallInfo, false);
723 }
724
SetCommandPathMask(ArkUIRuntimeCallInfo * runtimeCallInfo)725 ArkUINativeModuleValue RenderNodeBridge::SetCommandPathMask(ArkUIRuntimeCallInfo* runtimeCallInfo)
726 {
727 return SetCommandPathShape(runtimeCallInfo, false);
728 }
729
SetRectClip(ArkUIRuntimeCallInfo * runtimeCallInfo)730 ArkUINativeModuleValue RenderNodeBridge::SetRectClip(ArkUIRuntimeCallInfo* runtimeCallInfo)
731 {
732 return SetRectShape(runtimeCallInfo, true);
733 }
734
SetCircleClip(ArkUIRuntimeCallInfo * runtimeCallInfo)735 ArkUINativeModuleValue RenderNodeBridge::SetCircleClip(ArkUIRuntimeCallInfo* runtimeCallInfo)
736 {
737 return SetCircleShape(runtimeCallInfo, true);
738 }
739
SetRoundRectClip(ArkUIRuntimeCallInfo * runtimeCallInfo)740 ArkUINativeModuleValue RenderNodeBridge::SetRoundRectClip(ArkUIRuntimeCallInfo* runtimeCallInfo)
741 {
742 return SetRoundRectShape(runtimeCallInfo, true);
743 }
744
SetOvalClip(ArkUIRuntimeCallInfo * runtimeCallInfo)745 ArkUINativeModuleValue RenderNodeBridge::SetOvalClip(ArkUIRuntimeCallInfo* runtimeCallInfo)
746 {
747 return SetOvalShape(runtimeCallInfo, true);
748 }
749
SetCommandPathClip(ArkUIRuntimeCallInfo * runtimeCallInfo)750 ArkUINativeModuleValue RenderNodeBridge::SetCommandPathClip(ArkUIRuntimeCallInfo* runtimeCallInfo)
751 {
752 return SetCommandPathShape(runtimeCallInfo, true);
753 }
754
Invalidate(ArkUIRuntimeCallInfo * runtimeCallInfo)755 ArkUINativeModuleValue RenderNodeBridge::Invalidate(ArkUIRuntimeCallInfo* runtimeCallInfo)
756 {
757 EcmaVM* vm = runtimeCallInfo->GetVM();
758 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
759 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
760 GetArkUINodeModifiers()->getRenderNodeModifier()->invalidate(nativeNode);
761 return panda::JSValueRef::Undefined(vm);
762 }
763
SetMarkNodeGroup(ArkUIRuntimeCallInfo * runtimeCallInfo)764 ArkUINativeModuleValue RenderNodeBridge::SetMarkNodeGroup(ArkUIRuntimeCallInfo* runtimeCallInfo)
765 {
766 EcmaVM* vm = runtimeCallInfo->GetVM();
767 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
768 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
769
770 Local<JSValueRef> isNodeGroup = runtimeCallInfo->GetCallArgRef(1);
771 bool isNodeGroupValue = false;
772 if (isNodeGroup->IsBoolean()) {
773 isNodeGroupValue = isNodeGroup->ToBoolean(vm)->Value();
774 }
775
776 GetArkUINodeModifiers()->getRenderNodeModifier()->setMarkNodeGroup(nativeNode, isNodeGroupValue);
777 return panda::JSValueRef::Undefined(vm);
778 }
779 } // namespace OHOS::Ace::NG
780