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