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_side_bar_container_bridge.h"
16 
17 #include "base/geometry/calc_dimension.h"
18 #include "base/geometry/dimension.h"
19 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
20 
21 namespace OHOS::Ace::NG {
22 constexpr int NUM_0 = 0;
23 constexpr int NUM_1 = 1;
24 constexpr int NUM_2 = 2;
25 constexpr int NUM_3 = 3;
26 constexpr int NUM_4 = 4;
27 constexpr int NUM_5 = 5;
28 constexpr int NUM_6 = 6;
29 constexpr int NUM_7 = 7;
30 constexpr uint32_t DEFAULT_SIDE_BAR_DIVIDER_COLOR = 0x08000000;
31 const CalcDimension DEFAULT_MAX_SIDE_BAR_WIDTH(280.0, DimensionUnit::VP);
32 const CalcDimension DEFAULT_SIDE_BAR_MIN_CONTENT_WIDTH(360.0, DimensionUnit::VP);
33 const Dimension DEFAULT_CONTROL_BUTTON_WIDTH = 32.0_vp;
34 const Dimension DEFAULT_CONTROL_BUTTON_WIDTH_V10 = 24.0_vp;
35 const Dimension DEFAULT_CONTROL_BUTTON_HEIGHT = 32.0_vp;
36 const Dimension DEFAULT_CONTROL_BUTTON_HEIGHT_V10 = 24.0_vp;
37 constexpr Dimension DEFAULT_CONTROL_BUTTON_LEFT = 16.0_vp;
38 constexpr Dimension DEFAULT_CONTROL_BUTTON_TOP = 48.0_vp;
SetSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)39 ArkUINativeModuleValue SideBarContainerBridge::SetSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
40 {
41     EcmaVM* vm = runtimeCallInfo->GetVM();
42     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
43     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
44     Local<JSValueRef> sideBarWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
45     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
46     CalcDimension sideBarWidth;
47     if (ArkTSUtils::ParseJsDimensionNG(vm, sideBarWidthArg, sideBarWidth, DimensionUnit::VP, true) &&
48         sideBarWidth.Value() >= 0) {
49         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarWidth(
50             nativeNode, sideBarWidth.Value(), static_cast<int32_t>(sideBarWidth.Unit()));
51     } else {
52         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarWidth(nativeNode);
53     }
54     return panda::JSValueRef::Undefined(vm);
55 }
56 
ResetSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)57 ArkUINativeModuleValue SideBarContainerBridge::ResetSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
58 {
59     EcmaVM* vm = runtimeCallInfo->GetVM();
60     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
61     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
62     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
63     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarWidth(nativeNode);
64     return panda::JSValueRef::Undefined(vm);
65 }
66 
SetMinSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue SideBarContainerBridge::SetMinSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
68 {
69     EcmaVM* vm = runtimeCallInfo->GetVM();
70     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
72     Local<JSValueRef> minSideBarWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
73     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
74     CalcDimension minSideBarWidth;
75     if (ArkTSUtils::ParseJsDimensionNG(vm, minSideBarWidthArg, minSideBarWidth, DimensionUnit::VP, true) &&
76         minSideBarWidth.Value() >= 0) {
77         GetArkUINodeModifiers()->getSideBarContainerModifier()->setMinSideBarWidth(
78             nativeNode, minSideBarWidth.Value(), static_cast<int32_t>(minSideBarWidth.Unit()));
79     } else {
80         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetMinSideBarWidth(nativeNode);
81     }
82     return panda::JSValueRef::Undefined(vm);
83 }
84 
ResetMinSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)85 ArkUINativeModuleValue SideBarContainerBridge::ResetMinSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
86 {
87     EcmaVM* vm = runtimeCallInfo->GetVM();
88     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
89     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
90     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
91     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetMinSideBarWidth(nativeNode);
92     return panda::JSValueRef::Undefined(vm);
93 }
94 
SetControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)95 ArkUINativeModuleValue SideBarContainerBridge::SetControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
96 {
97     EcmaVM* vm = runtimeCallInfo->GetVM();
98     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
99     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
100     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(NUM_1);
101     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(NUM_2);
102     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
103     Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(NUM_4);
104     Local<JSValueRef> iconsShownArg = runtimeCallInfo->GetCallArgRef(NUM_5);
105     Local<JSValueRef> iconsHiddenArg = runtimeCallInfo->GetCallArgRef(NUM_6);
106     Local<JSValueRef> iconsSwitchingArg = runtimeCallInfo->GetCallArgRef(NUM_7);
107     ArkUI_Float32 values[NUM_4];
108     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
109     if (leftArg->IsNumber() && leftArg->ToNumber(vm)->Value() >= 0) {
110         values[NUM_0] = leftArg->ToNumber(vm)->Value();
111     } else {
112         values[NUM_0] = DEFAULT_CONTROL_BUTTON_LEFT.Value();
113     }
114     if (topArg->IsNumber() && topArg->ToNumber(vm)->Value() >= 0) {
115         values[NUM_1] = topArg->ToNumber(vm)->Value();
116     } else {
117         values[NUM_1] = DEFAULT_CONTROL_BUTTON_TOP.Value();
118     }
119     if (widthArg->IsNumber() && widthArg->ToNumber(vm)->Value() >= 0) {
120         values[NUM_2] = widthArg->ToNumber(vm)->Value();
121     } else {
122         if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) {
123             values[NUM_2] = DEFAULT_CONTROL_BUTTON_WIDTH_V10.Value();
124         } else {
125             values[NUM_2] = DEFAULT_CONTROL_BUTTON_WIDTH.Value();
126         }
127     }
128     if (heightArg->IsNumber() && heightArg->ToNumber(vm)->Value() >= 0) {
129         values[NUM_3] = heightArg->ToNumber(vm)->Value();
130     } else {
131         if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) {
132             values[NUM_3] = DEFAULT_CONTROL_BUTTON_HEIGHT_V10.Value();
133         } else {
134             values[NUM_3] = DEFAULT_CONTROL_BUTTON_HEIGHT.Value();
135         }
136     }
137     std::string iconsShown;
138     std::string iconsHidden;
139     std::string iconsSwitching;
140     struct ArkUIIconsStruct iconsStruct {
141         nullptr, nullptr, nullptr
142     };
143     if (ArkTSUtils::ParseJsMedia(vm, iconsShownArg, iconsShown)) {
144         iconsStruct.ShowIconInfo = iconsShown.c_str();
145     }
146     if (ArkTSUtils::ParseJsMedia(vm, iconsHiddenArg, iconsHidden)) {
147         iconsStruct.HiddenIconInfo = iconsHidden.c_str();
148     }
149     if (ArkTSUtils::ParseJsMedia(vm, iconsSwitchingArg, iconsSwitching)) {
150         iconsStruct.SwitchingIconInfo = iconsSwitching.c_str();
151     }
152     GetArkUINodeModifiers()->getSideBarContainerModifier()->setControlButton(nativeNode, values, NUM_4, &iconsStruct);
153     return panda::JSValueRef::Undefined(vm);
154 }
155 
ResetControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)156 ArkUINativeModuleValue SideBarContainerBridge::ResetControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
157 {
158     EcmaVM* vm = runtimeCallInfo->GetVM();
159     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
160     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
161     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
162     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetControlButton(nativeNode);
163     return panda::JSValueRef::Undefined(vm);
164 }
165 
SetShowControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)166 ArkUINativeModuleValue SideBarContainerBridge::SetShowControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
167 {
168     EcmaVM* vm = runtimeCallInfo->GetVM();
169     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
170     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
171     Local<JSValueRef> showControlButtonArg = runtimeCallInfo->GetCallArgRef(NUM_1);
172     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
173     bool isShow = true;
174     if (showControlButtonArg->IsBoolean()) {
175         isShow = showControlButtonArg->ToBoolean(vm)->Value();
176         GetArkUINodeModifiers()->getSideBarContainerModifier()->setShowControlButton(nativeNode, isShow);
177     } else {
178         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowControlButton(nativeNode);
179     }
180     return panda::JSValueRef::Undefined(vm);
181 }
182 
ResetShowControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)183 ArkUINativeModuleValue SideBarContainerBridge::ResetShowControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
184 {
185     EcmaVM* vm = runtimeCallInfo->GetVM();
186     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
187     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
188     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
189     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowControlButton(nativeNode);
190     return panda::JSValueRef::Undefined(vm);
191 }
192 
SetAutoHide(ArkUIRuntimeCallInfo * runtimeCallInfo)193 ArkUINativeModuleValue SideBarContainerBridge::SetAutoHide(ArkUIRuntimeCallInfo* runtimeCallInfo)
194 {
195     EcmaVM* vm = runtimeCallInfo->GetVM();
196     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
197     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
198     Local<JSValueRef> autoHideArg = runtimeCallInfo->GetCallArgRef(NUM_1);
199     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
200     if (autoHideArg->IsBoolean()) {
201         uint32_t value = static_cast<uint32_t>(autoHideArg->ToBoolean(vm)->Value());
202         GetArkUINodeModifiers()->getSideBarContainerModifier()->setAutoHide(nativeNode, value);
203     } else {
204         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetAutoHide(nativeNode);
205     }
206     return panda::JSValueRef::Undefined(vm);
207 }
208 
ResetAutoHide(ArkUIRuntimeCallInfo * runtimeCallInfo)209 ArkUINativeModuleValue SideBarContainerBridge::ResetAutoHide(ArkUIRuntimeCallInfo* runtimeCallInfo)
210 {
211     EcmaVM* vm = runtimeCallInfo->GetVM();
212     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
213     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
214     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
215     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetAutoHide(nativeNode);
216     return panda::JSValueRef::Undefined(vm);
217 }
218 
SetMaxSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)219 ArkUINativeModuleValue SideBarContainerBridge::SetMaxSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
220 {
221     EcmaVM* vm = runtimeCallInfo->GetVM();
222     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
223     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
224     Local<JSValueRef> maxSideBarWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
225     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
226     CalcDimension maxSideBarWidth(DEFAULT_MAX_SIDE_BAR_WIDTH);
227     if (ArkTSUtils::ParseJsDimensionNG(vm, maxSideBarWidthArg, maxSideBarWidth, DimensionUnit::VP, true) &&
228         maxSideBarWidth.Value() >= 0) {
229         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarContainerMaxSideBarWidth(
230             nativeNode, maxSideBarWidth.Value(), static_cast<int32_t>(maxSideBarWidth.Unit()));
231     } else {
232         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMaxSideBarWidth(nativeNode);
233     }
234     return panda::JSValueRef::Undefined(vm);
235 }
236 
ResetMaxSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)237 ArkUINativeModuleValue SideBarContainerBridge::ResetMaxSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
238 {
239     EcmaVM* vm = runtimeCallInfo->GetVM();
240     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
241     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
242     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
243     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMaxSideBarWidth(nativeNode);
244     return panda::JSValueRef::Undefined(vm);
245 }
246 
SetMinContentWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)247 ArkUINativeModuleValue SideBarContainerBridge::SetMinContentWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
248 {
249     EcmaVM* vm = runtimeCallInfo->GetVM();
250     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
251     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
252     Local<JSValueRef> minContentWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
253     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
254     CalcDimension minContentWidth(DEFAULT_SIDE_BAR_MIN_CONTENT_WIDTH);
255     if (ArkTSUtils::ParseJsDimensionNG(vm, minContentWidthArg, minContentWidth, DimensionUnit::VP, true) &&
256         minContentWidth.Value() >= 0) {
257         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarContainerMinContentWidth(
258             nativeNode, minContentWidth.Value(), static_cast<int32_t>(minContentWidth.Unit()));
259     } else {
260         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMinContentWidth(nativeNode);
261     }
262     return panda::JSValueRef::Undefined(vm);
263 }
264 
ResetMinContentWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)265 ArkUINativeModuleValue SideBarContainerBridge::ResetMinContentWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
266 {
267     EcmaVM* vm = runtimeCallInfo->GetVM();
268     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
269     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
270     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
271     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMinContentWidth(nativeNode);
272     return panda::JSValueRef::Undefined(vm);
273 }
274 
SetSideBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)275 ArkUINativeModuleValue SideBarContainerBridge::SetSideBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
276 {
277     EcmaVM* vm = runtimeCallInfo->GetVM();
278     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
279     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
280     Local<JSValueRef> sideBarPositionArg = runtimeCallInfo->GetCallArgRef(NUM_1);
281     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
282     int32_t sideBarPosition = static_cast<int32_t>(SideBarPosition::START);
283     if (sideBarPositionArg->IsInt()) {
284         sideBarPosition = sideBarPositionArg->Int32Value(vm);
285     }
286     if (sideBarPosition < static_cast<int32_t>(SideBarPosition::START) ||
287         sideBarPosition > static_cast<int32_t>(SideBarPosition::END)) {
288         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarPosition(nativeNode);
289     } else {
290         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarPosition(nativeNode, sideBarPosition);
291     }
292     return panda::JSValueRef::Undefined(vm);
293 }
294 
ResetSideBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)295 ArkUINativeModuleValue SideBarContainerBridge::ResetSideBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
296 {
297     EcmaVM* vm = runtimeCallInfo->GetVM();
298     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
299     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
300     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
301     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarPosition(nativeNode);
302     return panda::JSValueRef::Undefined(vm);
303 }
304 
SetShowSideBar(ArkUIRuntimeCallInfo * runtimeCallInfo)305 ArkUINativeModuleValue SideBarContainerBridge::SetShowSideBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
306 {
307     EcmaVM* vm = runtimeCallInfo->GetVM();
308     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
309     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
310     Local<JSValueRef> showSideBarArg = runtimeCallInfo->GetCallArgRef(NUM_1);
311     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
312     if (showSideBarArg->IsBoolean()) {
313         bool isShow = showSideBarArg->ToBoolean(vm)->Value();
314         GetArkUINodeModifiers()->getSideBarContainerModifier()->setShowSideBar(nativeNode, isShow);
315     } else {
316         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowSideBar(nativeNode);
317     }
318     return panda::JSValueRef::Undefined(vm);
319 }
320 
ResetShowSideBar(ArkUIRuntimeCallInfo * runtimeCallInfo)321 ArkUINativeModuleValue SideBarContainerBridge::ResetShowSideBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
322 {
323     EcmaVM* vm = runtimeCallInfo->GetVM();
324     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
325     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
326     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
327     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowSideBar(nativeNode);
328     return panda::JSValueRef::Undefined(vm);
329 }
330 
SetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)331 ArkUINativeModuleValue SideBarContainerBridge::SetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
332 {
333     EcmaVM* vm = runtimeCallInfo->GetVM();
334     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
335     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
336     Local<JSValueRef> strokeWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
337     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_2);
338     Local<JSValueRef> startMarginArg = runtimeCallInfo->GetCallArgRef(NUM_3);
339     Local<JSValueRef> endMarginArg = runtimeCallInfo->GetCallArgRef(NUM_4);
340     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
341     CalcDimension strokeWidth;
342     CalcDimension startMargin;
343     CalcDimension endMargin;
344     ArkUI_Float32 values[NUM_3] = { 1.0, 0.0, 0.0 };
345     int32_t units[NUM_3] = { static_cast<int32_t>(DimensionUnit::VP) };
346     if (ArkTSUtils::ParseJsDimensionNG(vm, strokeWidthArg, strokeWidth, DimensionUnit::VP, true) &&
347         strokeWidth.Value() >= 0) {
348         values[NUM_0] = strokeWidth.Value();
349         units[NUM_0] = static_cast<int32_t>(strokeWidth.Unit());
350     } else {
351         strokeWidth.SetValue(1.0);
352         strokeWidth.SetUnit(DimensionUnit::VP);
353     }
354     if (ArkTSUtils::ParseJsDimensionNG(vm, startMarginArg, startMargin, DimensionUnit::VP, true) &&
355         startMargin.Value() >= 0) {
356         values[NUM_1] = startMargin.Value();
357         units[NUM_1] = static_cast<int32_t>(startMargin.Unit());
358     } else {
359         startMargin.SetValue(0.0);
360         startMargin.SetUnit(DimensionUnit::VP);
361     }
362     if (ArkTSUtils::ParseJsDimensionNG(vm, endMarginArg, endMargin, DimensionUnit::VP, true) &&
363         endMargin.Value() >= 0) {
364         values[NUM_2] = endMargin.Value();
365         units[NUM_2] = static_cast<int32_t>(endMargin.Unit());
366     } else {
367         endMargin.SetValue(0.0);
368         endMargin.SetUnit(DimensionUnit::VP);
369     }
370 
371     Color color(DEFAULT_SIDE_BAR_DIVIDER_COLOR);
372     if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
373         color.SetValue(DEFAULT_SIDE_BAR_DIVIDER_COLOR);
374     }
375     GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarContainerDivider(
376         nativeNode, values, units, NUM_3, color.GetValue());
377     return panda::JSValueRef::Undefined(vm);
378 }
379 
ResetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)380 ArkUINativeModuleValue SideBarContainerBridge::ResetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
381 {
382     EcmaVM* vm = runtimeCallInfo->GetVM();
383     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
384     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
385     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
386     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerDivider(nativeNode);
387     return panda::JSValueRef::Undefined(vm);
388 }
389 } // namespace OHOS::Ace::NG
390