• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     RefPtr<ResourceObject> sideBarWidthResObj;
48     if (ArkTSUtils::ParseJsDimensionNG(
49         vm, sideBarWidthArg, sideBarWidth, DimensionUnit::VP, sideBarWidthResObj, true) &&
50         sideBarWidth.Value() >= 0) {
51         auto widthRawPtr = AceType::RawPtr(sideBarWidthResObj);
52         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarWidth(
53             nativeNode, sideBarWidth.Value(), static_cast<int32_t>(sideBarWidth.Unit()), widthRawPtr);
54     } else {
55         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarWidth(nativeNode);
56     }
57     return panda::JSValueRef::Undefined(vm);
58 }
59 
ResetSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)60 ArkUINativeModuleValue SideBarContainerBridge::ResetSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
61 {
62     EcmaVM* vm = runtimeCallInfo->GetVM();
63     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
64     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
65     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
66     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarWidth(nativeNode);
67     return panda::JSValueRef::Undefined(vm);
68 }
69 
SetMinSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)70 ArkUINativeModuleValue SideBarContainerBridge::SetMinSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
71 {
72     EcmaVM* vm = runtimeCallInfo->GetVM();
73     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
74     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
75     Local<JSValueRef> minSideBarWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
76     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
77     CalcDimension minSideBarWidth;
78     RefPtr<ResourceObject> minSideBarWidthObj;
79     if (ArkTSUtils::ParseJsDimensionNG(
80         vm, minSideBarWidthArg, minSideBarWidth, DimensionUnit::VP, minSideBarWidthObj, true) &&
81         minSideBarWidth.Value() >= 0) {
82         auto minWidthRawPtr = AceType::RawPtr(minSideBarWidthObj);
83         GetArkUINodeModifiers()->getSideBarContainerModifier()->setMinSideBarWidth(
84             nativeNode, minSideBarWidth.Value(), static_cast<int32_t>(minSideBarWidth.Unit()), minWidthRawPtr);
85     } else {
86         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetMinSideBarWidth(nativeNode);
87     }
88     return panda::JSValueRef::Undefined(vm);
89 }
90 
ResetMinSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)91 ArkUINativeModuleValue SideBarContainerBridge::ResetMinSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
92 {
93     EcmaVM* vm = runtimeCallInfo->GetVM();
94     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
95     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
96     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
97     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetMinSideBarWidth(nativeNode);
98     return panda::JSValueRef::Undefined(vm);
99 }
100 
SetControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)101 ArkUINativeModuleValue SideBarContainerBridge::SetControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
102 {
103     EcmaVM* vm = runtimeCallInfo->GetVM();
104     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
105     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
106     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(NUM_1);
107     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(NUM_2);
108     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
109     Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(NUM_4);
110     Local<JSValueRef> iconsShownArg = runtimeCallInfo->GetCallArgRef(NUM_5);
111     Local<JSValueRef> iconsHiddenArg = runtimeCallInfo->GetCallArgRef(NUM_6);
112     Local<JSValueRef> iconsSwitchingArg = runtimeCallInfo->GetCallArgRef(NUM_7);
113     ArkUI_Float32 values[NUM_4];
114     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
115     if (leftArg->IsNumber() && leftArg->ToNumber(vm)->Value() >= 0) {
116         values[NUM_0] = leftArg->ToNumber(vm)->Value();
117     } else {
118         values[NUM_0] = DEFAULT_CONTROL_BUTTON_LEFT.Value();
119     }
120     if (topArg->IsNumber() && topArg->ToNumber(vm)->Value() >= 0) {
121         values[NUM_1] = topArg->ToNumber(vm)->Value();
122     } else {
123         values[NUM_1] = DEFAULT_CONTROL_BUTTON_TOP.Value();
124     }
125     if (widthArg->IsNumber() && widthArg->ToNumber(vm)->Value() >= 0) {
126         values[NUM_2] = widthArg->ToNumber(vm)->Value();
127     } else {
128         if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) {
129             values[NUM_2] = DEFAULT_CONTROL_BUTTON_WIDTH_V10.Value();
130         } else {
131             values[NUM_2] = DEFAULT_CONTROL_BUTTON_WIDTH.Value();
132         }
133     }
134     if (heightArg->IsNumber() && heightArg->ToNumber(vm)->Value() >= 0) {
135         values[NUM_3] = heightArg->ToNumber(vm)->Value();
136     } else {
137         if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) {
138             values[NUM_3] = DEFAULT_CONTROL_BUTTON_HEIGHT_V10.Value();
139         } else {
140             values[NUM_3] = DEFAULT_CONTROL_BUTTON_HEIGHT.Value();
141         }
142     }
143     std::string iconsShown;
144     std::string iconsHidden;
145     std::string iconsSwitching;
146     RefPtr<ResourceObject> iconsShownObj;
147     RefPtr<ResourceObject> iconsHiddenObj;
148     RefPtr<ResourceObject> iconsSwitchingObj;
149     struct ArkUIIconsStruct iconsStruct {
150         nullptr, nullptr, nullptr
151     };
152     if (ArkTSUtils::ParseJsMedia(vm, iconsShownArg, iconsShown, iconsShownObj)) {
153         iconsStruct.ShowIconInfo = iconsShown.c_str();
154     }
155     if (ArkTSUtils::ParseJsMedia(vm, iconsHiddenArg, iconsHidden, iconsHiddenObj)) {
156         iconsStruct.HiddenIconInfo = iconsHidden.c_str();
157     }
158     if (ArkTSUtils::ParseJsMedia(vm, iconsSwitchingArg, iconsSwitching, iconsSwitchingObj)) {
159         iconsStruct.SwitchingIconInfo = iconsSwitching.c_str();
160     }
161     auto iconsShownPtr = AceType::RawPtr(iconsShownObj);
162     auto iconsHiddenPtr = AceType::RawPtr(iconsHiddenObj);
163     auto iconsSwitchingPtr = AceType::RawPtr(iconsSwitchingObj);
164     GetArkUINodeModifiers()->getSideBarContainerModifier()->setControlButton(nativeNode, values, NUM_4, &iconsStruct,
165         iconsShownPtr, iconsHiddenPtr, iconsSwitchingPtr);
166     return panda::JSValueRef::Undefined(vm);
167 }
168 
ResetControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)169 ArkUINativeModuleValue SideBarContainerBridge::ResetControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
170 {
171     EcmaVM* vm = runtimeCallInfo->GetVM();
172     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
173     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
174     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
175     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetControlButton(nativeNode);
176     return panda::JSValueRef::Undefined(vm);
177 }
178 
SetShowControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)179 ArkUINativeModuleValue SideBarContainerBridge::SetShowControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
180 {
181     EcmaVM* vm = runtimeCallInfo->GetVM();
182     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
183     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
184     Local<JSValueRef> showControlButtonArg = runtimeCallInfo->GetCallArgRef(NUM_1);
185     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
186     bool isShow = true;
187     if (showControlButtonArg->IsBoolean()) {
188         isShow = showControlButtonArg->ToBoolean(vm)->Value();
189         GetArkUINodeModifiers()->getSideBarContainerModifier()->setShowControlButton(nativeNode, isShow);
190     } else {
191         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowControlButton(nativeNode);
192     }
193     return panda::JSValueRef::Undefined(vm);
194 }
195 
ResetShowControlButton(ArkUIRuntimeCallInfo * runtimeCallInfo)196 ArkUINativeModuleValue SideBarContainerBridge::ResetShowControlButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
197 {
198     EcmaVM* vm = runtimeCallInfo->GetVM();
199     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
200     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
201     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
202     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowControlButton(nativeNode);
203     return panda::JSValueRef::Undefined(vm);
204 }
205 
SetAutoHide(ArkUIRuntimeCallInfo * runtimeCallInfo)206 ArkUINativeModuleValue SideBarContainerBridge::SetAutoHide(ArkUIRuntimeCallInfo* runtimeCallInfo)
207 {
208     EcmaVM* vm = runtimeCallInfo->GetVM();
209     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
210     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
211     Local<JSValueRef> autoHideArg = runtimeCallInfo->GetCallArgRef(NUM_1);
212     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
213     if (autoHideArg->IsBoolean()) {
214         uint32_t value = static_cast<uint32_t>(autoHideArg->ToBoolean(vm)->Value());
215         GetArkUINodeModifiers()->getSideBarContainerModifier()->setAutoHide(nativeNode, value);
216     } else {
217         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetAutoHide(nativeNode);
218     }
219     return panda::JSValueRef::Undefined(vm);
220 }
221 
ResetAutoHide(ArkUIRuntimeCallInfo * runtimeCallInfo)222 ArkUINativeModuleValue SideBarContainerBridge::ResetAutoHide(ArkUIRuntimeCallInfo* runtimeCallInfo)
223 {
224     EcmaVM* vm = runtimeCallInfo->GetVM();
225     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
226     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
227     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
228     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetAutoHide(nativeNode);
229     return panda::JSValueRef::Undefined(vm);
230 }
231 
SetMaxSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)232 ArkUINativeModuleValue SideBarContainerBridge::SetMaxSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
233 {
234     EcmaVM* vm = runtimeCallInfo->GetVM();
235     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
236     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
237     Local<JSValueRef> maxSideBarWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
238     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
239     CalcDimension maxSideBarWidth(DEFAULT_MAX_SIDE_BAR_WIDTH);
240     RefPtr<ResourceObject> maxSideBarWidthObj;
241     if (ArkTSUtils::ParseJsDimensionNG(
242         vm, maxSideBarWidthArg, maxSideBarWidth, DimensionUnit::VP, maxSideBarWidthObj, true) &&
243         maxSideBarWidth.Value() >= 0) {
244         auto maxSideBarWidthPtr = AceType::RawPtr(maxSideBarWidthObj);
245         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarContainerMaxSideBarWidth(
246             nativeNode, maxSideBarWidth.Value(), static_cast<int32_t>(maxSideBarWidth.Unit()), maxSideBarWidthPtr);
247     } else {
248         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMaxSideBarWidth(nativeNode);
249     }
250     return panda::JSValueRef::Undefined(vm);
251 }
252 
ResetMaxSideBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)253 ArkUINativeModuleValue SideBarContainerBridge::ResetMaxSideBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
254 {
255     EcmaVM* vm = runtimeCallInfo->GetVM();
256     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
257     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
258     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
259     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMaxSideBarWidth(nativeNode);
260     return panda::JSValueRef::Undefined(vm);
261 }
262 
SetMinContentWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)263 ArkUINativeModuleValue SideBarContainerBridge::SetMinContentWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
264 {
265     EcmaVM* vm = runtimeCallInfo->GetVM();
266     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
267     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
268     Local<JSValueRef> minContentWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
269     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
270     CalcDimension minContentWidth(DEFAULT_SIDE_BAR_MIN_CONTENT_WIDTH);
271     RefPtr<ResourceObject> minContentWidthObj;
272     if (ArkTSUtils::ParseJsDimensionNG(
273         vm, minContentWidthArg, minContentWidth, DimensionUnit::VP, minContentWidthObj, true) &&
274         minContentWidth.Value() >= 0) {
275         auto minContentWidthPtr = AceType::RawPtr(minContentWidthObj);
276         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarContainerMinContentWidth(
277             nativeNode, minContentWidth.Value(), static_cast<int32_t>(minContentWidth.Unit()), minContentWidthPtr);
278     } else {
279         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMinContentWidth(nativeNode);
280     }
281     return panda::JSValueRef::Undefined(vm);
282 }
283 
ResetMinContentWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)284 ArkUINativeModuleValue SideBarContainerBridge::ResetMinContentWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
285 {
286     EcmaVM* vm = runtimeCallInfo->GetVM();
287     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
288     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
289     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
290     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerMinContentWidth(nativeNode);
291     return panda::JSValueRef::Undefined(vm);
292 }
293 
SetSideBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)294 ArkUINativeModuleValue SideBarContainerBridge::SetSideBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
295 {
296     EcmaVM* vm = runtimeCallInfo->GetVM();
297     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
298     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
299     Local<JSValueRef> sideBarPositionArg = runtimeCallInfo->GetCallArgRef(NUM_1);
300     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
301     int32_t sideBarPosition = static_cast<int32_t>(SideBarPosition::START);
302     if (sideBarPositionArg->IsInt()) {
303         sideBarPosition = sideBarPositionArg->Int32Value(vm);
304     }
305     if (sideBarPosition < static_cast<int32_t>(SideBarPosition::START) ||
306         sideBarPosition > static_cast<int32_t>(SideBarPosition::END)) {
307         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarPosition(nativeNode);
308     } else {
309         GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarPosition(nativeNode, sideBarPosition);
310     }
311     return panda::JSValueRef::Undefined(vm);
312 }
313 
ResetSideBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)314 ArkUINativeModuleValue SideBarContainerBridge::ResetSideBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
315 {
316     EcmaVM* vm = runtimeCallInfo->GetVM();
317     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
318     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
319     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
320     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarPosition(nativeNode);
321     return panda::JSValueRef::Undefined(vm);
322 }
323 
SetShowSideBar(ArkUIRuntimeCallInfo * runtimeCallInfo)324 ArkUINativeModuleValue SideBarContainerBridge::SetShowSideBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
325 {
326     EcmaVM* vm = runtimeCallInfo->GetVM();
327     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
328     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
329     Local<JSValueRef> showSideBarArg = runtimeCallInfo->GetCallArgRef(NUM_1);
330     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
331     if (showSideBarArg->IsBoolean()) {
332         bool isShow = showSideBarArg->ToBoolean(vm)->Value();
333         GetArkUINodeModifiers()->getSideBarContainerModifier()->setShowSideBar(nativeNode, isShow);
334     } else {
335         GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowSideBar(nativeNode);
336     }
337     return panda::JSValueRef::Undefined(vm);
338 }
339 
ResetShowSideBar(ArkUIRuntimeCallInfo * runtimeCallInfo)340 ArkUINativeModuleValue SideBarContainerBridge::ResetShowSideBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
341 {
342     EcmaVM* vm = runtimeCallInfo->GetVM();
343     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
344     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
345     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
346     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetShowSideBar(nativeNode);
347     return panda::JSValueRef::Undefined(vm);
348 }
349 
SetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)350 ArkUINativeModuleValue SideBarContainerBridge::SetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
351 {
352     EcmaVM* vm = runtimeCallInfo->GetVM();
353     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
354     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
355     Local<JSValueRef> strokeWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
356     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_2);
357     Local<JSValueRef> startMarginArg = runtimeCallInfo->GetCallArgRef(NUM_3);
358     Local<JSValueRef> endMarginArg = runtimeCallInfo->GetCallArgRef(NUM_4);
359     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
360     CalcDimension strokeWidth;
361     CalcDimension startMargin;
362     CalcDimension endMargin;
363     RefPtr<ResourceObject> strokeWidthObj;
364     RefPtr<ResourceObject> startMarginObj;
365     RefPtr<ResourceObject> endMarginObj;
366     RefPtr<ResourceObject> colorObj;
367     ArkUI_Float32 values[NUM_3] = { 1.0, 0.0, 0.0 };
368     int32_t units[NUM_3] = { static_cast<int32_t>(DimensionUnit::VP) };
369     if (ArkTSUtils::ParseJsDimensionNG(vm, strokeWidthArg, strokeWidth, DimensionUnit::VP, strokeWidthObj, true) &&
370         strokeWidth.Value() >= 0) {
371         values[NUM_0] = strokeWidth.Value();
372         units[NUM_0] = static_cast<int32_t>(strokeWidth.Unit());
373     } else {
374         strokeWidth.SetValue(1.0);
375         strokeWidth.SetUnit(DimensionUnit::VP);
376     }
377     if (ArkTSUtils::ParseJsDimensionNG(vm, startMarginArg, startMargin, DimensionUnit::VP, startMarginObj, true) &&
378         startMargin.Value() >= 0) {
379         values[NUM_1] = startMargin.Value();
380         units[NUM_1] = static_cast<int32_t>(startMargin.Unit());
381     } else {
382         startMargin.SetValue(0.0);
383         startMargin.SetUnit(DimensionUnit::VP);
384     }
385     if (ArkTSUtils::ParseJsDimensionNG(vm, endMarginArg, endMargin, DimensionUnit::VP, endMarginObj, true) &&
386         endMargin.Value() >= 0) {
387         values[NUM_2] = endMargin.Value();
388         units[NUM_2] = static_cast<int32_t>(endMargin.Unit());
389     } else {
390         endMargin.SetValue(0.0);
391         endMargin.SetUnit(DimensionUnit::VP);
392     }
393 
394     Color color(DEFAULT_SIDE_BAR_DIVIDER_COLOR);
395     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
396     if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color, colorObj, nodeInfo)) {
397         color.SetValue(DEFAULT_SIDE_BAR_DIVIDER_COLOR);
398     }
399     auto strokeWidthPtr = AceType::RawPtr(strokeWidthObj);
400     auto startMarginPtr = AceType::RawPtr(startMarginObj);
401     auto endMarginPtr = AceType::RawPtr(endMarginObj);
402     auto colorPtr = AceType::RawPtr(colorObj);
403     GetArkUINodeModifiers()->getSideBarContainerModifier()->setSideBarContainerDivider(
404         nativeNode, values, units, NUM_3, color.GetValue(), strokeWidthPtr, startMarginPtr, endMarginPtr, colorPtr);
405     return panda::JSValueRef::Undefined(vm);
406 }
407 
ResetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)408 ArkUINativeModuleValue SideBarContainerBridge::ResetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
409 {
410     EcmaVM* vm = runtimeCallInfo->GetVM();
411     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
412     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
413     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
414     GetArkUINodeModifiers()->getSideBarContainerModifier()->resetSideBarContainerDivider(nativeNode);
415     return panda::JSValueRef::Undefined(vm);
416 }
417 
SetSideBarOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)418 ArkUINativeModuleValue SideBarContainerBridge::SetSideBarOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
419 {
420     EcmaVM* vm = runtimeCallInfo->GetVM();
421     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
422     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
423     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
424     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
425     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
426     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
427     auto nodeModifiers = GetArkUINodeModifiers();
428     CHECK_NULL_RETURN(nodeModifiers, panda::NativePointerRef::New(vm, nullptr));
429     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
430         nodeModifiers->getSideBarContainerModifier()->resetSideBarOnChange(nativeNode);
431         return panda::JSValueRef::Undefined(vm);
432     }
433     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
434     std::function<void(bool)> callback = [vm, frameNode,
435         func = panda::CopyableGlobal(vm, func)](bool isOnChange) {
436         panda::LocalScope pandaScope(vm);
437         panda::TryCatch trycatch(vm);
438         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
439         panda::Local<panda::JSValueRef> params[1] = {
440             panda::BooleanRef::New(vm, isOnChange) };
441         func->Call(vm, func.ToLocal(), params, 1);
442     };
443     nodeModifiers->getSideBarContainerModifier()->setSideBarOnChange(
444         nativeNode, reinterpret_cast<void*>(&callback));
445     return panda::JSValueRef::Undefined(vm);
446 }
447 
ResetSideBarOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)448 ArkUINativeModuleValue SideBarContainerBridge::ResetSideBarOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
449 {
450     EcmaVM* vm = runtimeCallInfo->GetVM();
451     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
452     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
453     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
454     auto nodeModifiers = GetArkUINodeModifiers();
455     CHECK_NULL_RETURN(nodeModifiers, panda::NativePointerRef::New(vm, nullptr));
456     nodeModifiers->getSideBarContainerModifier()->resetSideBarOnChange(nativeNode);
457     return panda::JSValueRef::Undefined(vm);
458 }
459 } // namespace OHOS::Ace::NG
460