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_tabs_bridge.h"
16
17 #include "base/utils/utils.h"
18 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19 #include "core/components/common/properties/color.h"
20 #include "frameworks/bridge/common/utils/utils.h"
21 #include "frameworks/bridge/declarative_frontend/engine/js_types.h"
22 #include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h"
23 #include "frameworks/core/components/tab_bar/tab_theme.h"
24 #include "frameworks/core/components_ng/pattern/tabs/tabs_node.h"
25 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
26
27 namespace OHOS::Ace::NG {
28 constexpr int SIZE_OF_FIVE = 5;
29 constexpr int SIZE_OF_THREE = 3;
30 constexpr int SIZE_OF_VALUES = 2;
31 constexpr int TABS_ARG_INDEX_0 = 0;
32 constexpr int TABS_ARG_INDEX_1 = 1;
33 constexpr int TABS_ARG_INDEX_2 = 2;
34 constexpr int TABS_ARG_INDEX_3 = 3;
35 constexpr int TABS_ARG_INDEX_4 = 4;
36 constexpr int TABS_ARG_INDEX_5 = 5;
37 constexpr int32_t SM_COLUMN_NUM = 4;
38 constexpr int32_t MD_COLUMN_NUM = 8;
39 constexpr int32_t LG_COLUMN_NUM = 12;
40 constexpr int32_t DEFAULT_COLUMN = -1;
41 constexpr int REMAINDER = 2;
42 constexpr int TABBARMODE_SCROLLABLE = 1;
SetTabBarMode(ArkUIRuntimeCallInfo * runtimeCallInfo)43 ArkUINativeModuleValue TabsBridge::SetTabBarMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
44 {
45 EcmaVM* vm = runtimeCallInfo->GetVM();
46 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
47 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_0);
48 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
49 Local<JSValueRef> barModeArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_1);
50 Local<JSValueRef> marginArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_2);
51 Local<JSValueRef> nonScrollableLayoutStyleArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_3);
52
53 if (barModeArg->IsNull() || barModeArg->IsUndefined()) {
54 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarMode(nativeNode);
55 return panda::JSValueRef::Undefined(vm);
56 }
57 TabBarMode barMode = TabBarMode::FIXED;
58 barMode = Framework::ConvertStrToTabBarMode(barModeArg->ToString(vm)->ToString(vm));
59 int32_t tabBarMode = static_cast<int32_t>(barMode);
60 GetArkUINodeModifiers()->getTabsModifier()->setTabBarMode(nativeNode, tabBarMode);
61
62 if (tabBarMode == TABBARMODE_SCROLLABLE) {
63 if (marginArg->IsNull() || marginArg->IsUndefined() || nonScrollableLayoutStyleArg->IsNull() ||
64 nonScrollableLayoutStyleArg->IsUndefined()) {
65 GetArkUINodeModifiers()->getTabsModifier()->resetScrollableBarModeOptions(nativeNode);
66 return panda::JSValueRef::Undefined(vm);
67 }
68 int barModeStyle = nonScrollableLayoutStyleArg->Int32Value(vm);
69 CalcDimension margin(0.0, DimensionUnit::VP);
70 if (!ArkTSUtils::ParseJsDimensionVp(vm, marginArg, margin)) {
71 margin.Reset();
72 }
73
74 GetArkUINodeModifiers()->getTabsModifier()->setScrollableBarModeOptions(
75 nativeNode, margin.Value(), static_cast<int>(margin.Unit()), barModeStyle);
76 }
77 return panda::JSValueRef::Undefined(vm);
78 }
79
ResetTabBarMode(ArkUIRuntimeCallInfo * runtimeCallInfo)80 ArkUINativeModuleValue TabsBridge::ResetTabBarMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
81 {
82 EcmaVM* vm = runtimeCallInfo->GetVM();
83 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
84 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
85 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
86 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarMode(nativeNode);
87 return panda::JSValueRef::Undefined(vm);
88 }
89
SetScrollableBarModeOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)90 ArkUINativeModuleValue TabsBridge::SetScrollableBarModeOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
91 {
92 EcmaVM* vm = runtimeCallInfo->GetVM();
93 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
94 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_0);
95 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_1);
96 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_2);
97 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
98
99 if (thirdArg->IsUndefined()) {
100 GetArkUINodeModifiers()->getTabsModifier()->resetScrollableBarModeOptions(nativeNode);
101 return panda::JSValueRef::Undefined(vm);
102 }
103 int barModeStyle = thirdArg->Int32Value(vm);
104
105 CalcDimension margin(0.0, DimensionUnit::VP);
106 if (!ArkTSUtils::ParseJsDimensionVp(vm, secondArg, margin)) {
107 margin.Reset();
108 }
109
110 GetArkUINodeModifiers()->getTabsModifier()->setScrollableBarModeOptions(
111 nativeNode, margin.Value(), static_cast<int>(margin.Unit()), barModeStyle);
112 return panda::JSValueRef::Undefined(vm);
113 }
114
ResetScrollableBarModeOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)115 ArkUINativeModuleValue TabsBridge::ResetScrollableBarModeOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
116 {
117 EcmaVM* vm = runtimeCallInfo->GetVM();
118 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
119 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
120 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
121 GetArkUINodeModifiers()->getTabsModifier()->resetScrollableBarModeOptions(nativeNode);
122 return panda::JSValueRef::Undefined(vm);
123 }
124
SetBarGridAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)125 ArkUINativeModuleValue TabsBridge::SetBarGridAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
126 {
127 EcmaVM* vm = runtimeCallInfo->GetVM();
128 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
129 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_0);
130 Local<JSValueRef> smArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_1);
131 Local<JSValueRef> mdArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_2);
132 Local<JSValueRef> lgArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_3);
133 Local<JSValueRef> gutterArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_4);
134 Local<JSValueRef> marginArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_5);
135 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
136
137 int32_t sm = DEFAULT_COLUMN;
138 int32_t md = DEFAULT_COLUMN;
139 int32_t lg = DEFAULT_COLUMN;
140 if (smArg->IsNumber() && smArg->Int32Value(vm) >= 0 && smArg->Int32Value(vm) <= SM_COLUMN_NUM &&
141 smArg->Int32Value(vm) % REMAINDER == 0) {
142 sm = smArg->Int32Value(vm);
143 }
144 if (mdArg->IsNumber() && mdArg->Int32Value(vm) >= 0 && mdArg->Int32Value(vm) <= MD_COLUMN_NUM &&
145 mdArg->Int32Value(vm) % REMAINDER == 0) {
146 md = mdArg->Int32Value(vm);
147 }
148 if (lgArg->IsNumber() && lgArg->Int32Value(vm) >= 0 && lgArg->Int32Value(vm) <= LG_COLUMN_NUM &&
149 lgArg->Int32Value(vm) % REMAINDER == 0) {
150 lg = lgArg->Int32Value(vm);
151 }
152
153 CalcDimension columnGutter;
154 CalcDimension columnMargin;
155 if (!ArkTSUtils::ParseJsDimensionVp(vm, gutterArg, columnGutter) || !NonNegative(columnGutter.Value()) ||
156 columnGutter.Unit() == DimensionUnit::PERCENT) {
157 columnGutter.Reset();
158 }
159 if (!ArkTSUtils::ParseJsDimensionVp(vm, marginArg, columnMargin) || !NonNegative(columnMargin.Value()) ||
160 columnMargin.Unit() == DimensionUnit::PERCENT) {
161 columnMargin.Reset();
162 }
163
164 int unitsAndColumn[SIZE_OF_FIVE];
165 ArkUI_Float32 values[SIZE_OF_VALUES];
166
167 values[TABS_ARG_INDEX_0] = static_cast<ArkUI_Float32>(columnGutter.Value());
168 values[TABS_ARG_INDEX_1] = static_cast<ArkUI_Float32>(columnMargin.Value());
169 unitsAndColumn[TABS_ARG_INDEX_0] = static_cast<int>(columnGutter.Unit());
170 unitsAndColumn[TABS_ARG_INDEX_1] = static_cast<int>(columnMargin.Unit());
171 unitsAndColumn[TABS_ARG_INDEX_2] = sm;
172 unitsAndColumn[TABS_ARG_INDEX_3] = md;
173 unitsAndColumn[TABS_ARG_INDEX_4] = lg;
174
175 GetArkUINodeModifiers()->getTabsModifier()->setBarGridAlign(
176 nativeNode, values, SIZE_OF_VALUES, unitsAndColumn, SIZE_OF_FIVE);
177 return panda::JSValueRef::Undefined(vm);
178 }
179
ResetBarGridAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)180 ArkUINativeModuleValue TabsBridge::ResetBarGridAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
181 {
182 EcmaVM* vm = runtimeCallInfo->GetVM();
183 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
184 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
185 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
186 GetArkUINodeModifiers()->getTabsModifier()->resetBarGridAlign(nativeNode);
187 return panda::JSValueRef::Undefined(vm);
188 }
189
SetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)190 ArkUINativeModuleValue TabsBridge::SetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
191 {
192 EcmaVM* vm = runtimeCallInfo->GetVM();
193 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
194 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
195 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
196 Local<JSValueRef> dividerStrokeWidthArgs = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_1);
197 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_2);
198 Local<JSValueRef> dividerStartMarginArgs = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_3);
199 Local<JSValueRef> dividerEndMarginArgs = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_4);
200 auto isDividerStrokeWidthArgsInvalid = dividerStrokeWidthArgs->IsNull() || dividerStrokeWidthArgs->IsUndefined();
201 auto isDividerStartMarginArgsInvalid = dividerStartMarginArgs->IsNull() || dividerStartMarginArgs->IsUndefined();
202 auto isDividerEndMarginArgsInvalid = dividerEndMarginArgs->IsNull() || dividerEndMarginArgs->IsUndefined();
203 auto isColorArgInvalid = colorArg->IsNull() || colorArg->IsUndefined();
204 if (isDividerStrokeWidthArgsInvalid && isDividerStartMarginArgsInvalid && isDividerEndMarginArgsInvalid &&
205 isColorArgInvalid) {
206 GetArkUINodeModifiers()->getTabsModifier()->resetDivider(nativeNode);
207 return panda::JSValueRef::Undefined(vm);
208 }
209
210 CalcDimension dividerStrokeWidth;
211 CalcDimension dividerStartMargin;
212 CalcDimension dividerEndMargin;
213 uint32_t color;
214 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
215 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
216 auto context = frameNode->GetContext();
217 CHECK_NULL_RETURN(context, panda::NativePointerRef::New(vm, nullptr));
218 auto themeManager = context->GetThemeManager();
219 CHECK_NULL_RETURN(themeManager, panda::NativePointerRef::New(vm, nullptr));
220 auto tabTheme = themeManager->GetTheme<TabTheme>();
221 CHECK_NULL_RETURN(tabTheme, panda::NativePointerRef::New(vm, nullptr));
222
223 if (isDividerStrokeWidthArgsInvalid ||
224 !ArkTSUtils::ParseJsDimensionVp(vm, dividerStrokeWidthArgs, dividerStrokeWidth) ||
225 LessNotEqual(dividerStrokeWidth.Value(), 0.0f) || dividerStrokeWidth.Unit() == DimensionUnit::PERCENT) {
226 dividerStrokeWidth.Reset();
227 }
228 Color colorObj;
229 if (isColorArgInvalid || !ArkTSUtils::ParseJsColorAlpha(vm, colorArg, colorObj)) {
230 color = tabTheme->GetDividerColor().GetValue();
231 } else {
232 color = colorObj.GetValue();
233 }
234 if (isDividerStartMarginArgsInvalid ||
235 !ArkTSUtils::ParseJsDimensionVp(vm, dividerStartMarginArgs, dividerStartMargin) ||
236 LessNotEqual(dividerStartMargin.Value(), 0.0f) || dividerStartMargin.Unit() == DimensionUnit::PERCENT) {
237 dividerStartMargin.Reset();
238 }
239 if (isDividerEndMarginArgsInvalid || !ArkTSUtils::ParseJsDimensionVp(vm, dividerEndMarginArgs, dividerEndMargin) ||
240 LessNotEqual(dividerEndMargin.Value(), 0.0f) || dividerEndMargin.Unit() == DimensionUnit::PERCENT) {
241 dividerEndMargin.Reset();
242 }
243 uint32_t size = SIZE_OF_THREE;
244 ArkUI_Float32 values[size];
245 int32_t units[size];
246 values[TABS_ARG_INDEX_0] = static_cast<ArkUI_Float32>(dividerStrokeWidth.Value());
247 values[TABS_ARG_INDEX_1] = static_cast<ArkUI_Float32>(dividerStartMargin.Value());
248 values[TABS_ARG_INDEX_2] = static_cast<ArkUI_Float32>(dividerEndMargin.Value());
249 units[TABS_ARG_INDEX_0] = static_cast<int32_t>(dividerStrokeWidth.Unit());
250 units[TABS_ARG_INDEX_1] = static_cast<int32_t>(dividerStartMargin.Unit());
251 units[TABS_ARG_INDEX_2] = static_cast<int32_t>(dividerEndMargin.Unit());
252 GetArkUINodeModifiers()->getTabsModifier()->setDivider(nativeNode, color, values, units, size);
253 return panda::JSValueRef::Undefined(vm);
254 }
255
ResetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)256 ArkUINativeModuleValue TabsBridge::ResetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
257 {
258 EcmaVM* vm = runtimeCallInfo->GetVM();
259 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
260 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
261 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
262 GetArkUINodeModifiers()->getTabsModifier()->resetDivider(nativeNode);
263 return panda::JSValueRef::Undefined(vm);
264 }
265
SetFadingEdge(ArkUIRuntimeCallInfo * runtimeCallInfo)266 ArkUINativeModuleValue TabsBridge::SetFadingEdge(ArkUIRuntimeCallInfo* runtimeCallInfo)
267 {
268 EcmaVM* vm = runtimeCallInfo->GetVM();
269 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
270 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
271 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
272 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
273 if (secondArg->IsUndefined() || secondArg->IsNull()) {
274 GetArkUINodeModifiers()->getTabsModifier()->resetFadingEdge(nativeNode);
275 return panda::JSValueRef::Undefined(vm);
276 }
277 bool fadingEdge = secondArg->ToBoolean(vm)->Value();
278 GetArkUINodeModifiers()->getTabsModifier()->setFadingEdge(nativeNode, fadingEdge);
279 return panda::JSValueRef::Undefined(vm);
280 }
281
ResetFadingEdge(ArkUIRuntimeCallInfo * runtimeCallInfo)282 ArkUINativeModuleValue TabsBridge::ResetFadingEdge(ArkUIRuntimeCallInfo* runtimeCallInfo)
283 {
284 EcmaVM* vm = runtimeCallInfo->GetVM();
285 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
286 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
287 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
288 GetArkUINodeModifiers()->getTabsModifier()->resetFadingEdge(nativeNode);
289 return panda::JSValueRef::Undefined(vm);
290 }
291
SetBarBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)292 ArkUINativeModuleValue TabsBridge::SetBarBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
293 {
294 EcmaVM* vm = runtimeCallInfo->GetVM();
295 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
296 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
297 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
298 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
299 Color color;
300 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
301 GetArkUINodeModifiers()->getTabsModifier()->resetBarBackgroundColor(nativeNode);
302 } else {
303 GetArkUINodeModifiers()->getTabsModifier()->setBarBackgroundColor(nativeNode, color.GetValue());
304 }
305 return panda::JSValueRef::Undefined(vm);
306 }
307
ResetBarBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)308 ArkUINativeModuleValue TabsBridge::ResetBarBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
309 {
310 EcmaVM* vm = runtimeCallInfo->GetVM();
311 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
312 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
313 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
314 GetArkUINodeModifiers()->getTabsModifier()->resetBarBackgroundColor(nativeNode);
315 return panda::JSValueRef::Undefined(vm);
316 }
317
SetBarBackgroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)318 ArkUINativeModuleValue TabsBridge::SetBarBackgroundBlurStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
319 {
320 EcmaVM* vm = runtimeCallInfo->GetVM();
321 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
322 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_0);
323 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_1);
324 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
325 if (secondArg->IsNumber()) {
326 auto barBackgroundBlurStyle = secondArg->Int32Value(vm);
327 if (barBackgroundBlurStyle >= static_cast<int32_t>(BlurStyle::NO_MATERIAL) &&
328 barBackgroundBlurStyle <= static_cast<int32_t>(BlurStyle::COMPONENT_ULTRA_THICK)) {
329 GetArkUINodeModifiers()->getTabsModifier()->setBarBackgroundBlurStyle(nativeNode, barBackgroundBlurStyle);
330 return panda::JSValueRef::Undefined(vm);
331 }
332 }
333 GetArkUINodeModifiers()->getTabsModifier()->resetBarBackgroundBlurStyle(nativeNode);
334 return panda::JSValueRef::Undefined(vm);
335 }
336
ResetBarBackgroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)337 ArkUINativeModuleValue TabsBridge::ResetBarBackgroundBlurStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
338 {
339 EcmaVM* vm = runtimeCallInfo->GetVM();
340 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
341 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(TABS_ARG_INDEX_0);
342 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
343 GetArkUINodeModifiers()->getTabsModifier()->resetBarBackgroundBlurStyle(nativeNode);
344 return panda::JSValueRef::Undefined(vm);
345 }
346
SetBarOverlap(ArkUIRuntimeCallInfo * runtimeCallInfo)347 ArkUINativeModuleValue TabsBridge::SetBarOverlap(ArkUIRuntimeCallInfo* runtimeCallInfo)
348 {
349 EcmaVM* vm = runtimeCallInfo->GetVM();
350 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
351 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
352 Local<JSValueRef> overlapArg = runtimeCallInfo->GetCallArgRef(1);
353 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
354 if (overlapArg->IsUndefined()) {
355 GetArkUINodeModifiers()->getTabsModifier()->resetBarOverlap(nativeNode);
356 } else {
357 bool overlap = overlapArg->ToBoolean(vm)->Value();
358 GetArkUINodeModifiers()->getTabsModifier()->setBarOverlap(nativeNode, overlap);
359 }
360
361 return panda::JSValueRef::Undefined(vm);
362 }
363
ResetBarOverlap(ArkUIRuntimeCallInfo * runtimeCallInfo)364 ArkUINativeModuleValue TabsBridge::ResetBarOverlap(ArkUIRuntimeCallInfo* runtimeCallInfo)
365 {
366 EcmaVM* vm = runtimeCallInfo->GetVM();
367 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
368 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
369 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
370 GetArkUINodeModifiers()->getTabsModifier()->resetBarOverlap(nativeNode);
371 return panda::JSValueRef::Undefined(vm);
372 }
SetIsVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)373 ArkUINativeModuleValue TabsBridge::SetIsVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
374 {
375 EcmaVM* vm = runtimeCallInfo->GetVM();
376 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
377 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
378 Local<JSValueRef> isVerticalArg = runtimeCallInfo->GetCallArgRef(1);
379 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
380 if (isVerticalArg->IsNull() || isVerticalArg->IsUndefined()) {
381 GetArkUINodeModifiers()->getTabsModifier()->resetIsVertical(nativeNode);
382 return panda::JSValueRef::Undefined(vm);
383 }
384 bool isVertical = isVerticalArg->ToBoolean(vm)->Value();
385 GetArkUINodeModifiers()->getTabsModifier()->setIsVertical(nativeNode, isVertical);
386 return panda::JSValueRef::Undefined(vm);
387 }
388
ResetIsVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)389 ArkUINativeModuleValue TabsBridge::ResetIsVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
390 {
391 EcmaVM* vm = runtimeCallInfo->GetVM();
392 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
393 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
394 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
395 GetArkUINodeModifiers()->getTabsModifier()->resetIsVertical(nativeNode);
396 return panda::JSValueRef::Undefined(vm);
397 }
398
SetTabBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)399 ArkUINativeModuleValue TabsBridge::SetTabBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
400 {
401 EcmaVM* vm = runtimeCallInfo->GetVM();
402 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
403 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
404 Local<JSValueRef> barValArg = runtimeCallInfo->GetCallArgRef(1);
405 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
406 if (barValArg->IsNull() || barValArg->IsUndefined()) {
407 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarPosition(nativeNode);
408 } else {
409 int32_t barVal = barValArg->Int32Value(vm);
410 GetArkUINodeModifiers()->getTabsModifier()->setTabBarPosition(nativeNode, barVal);
411 }
412 return panda::JSValueRef::Undefined(vm);
413 }
414
ResetTabBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)415 ArkUINativeModuleValue TabsBridge::ResetTabBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
416 {
417 EcmaVM* vm = runtimeCallInfo->GetVM();
418 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
419 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
420 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
421 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarPosition(nativeNode);
422 return panda::JSValueRef::Undefined(vm);
423 }
424
SetScrollable(ArkUIRuntimeCallInfo * runtimeCallInfo)425 ArkUINativeModuleValue TabsBridge::SetScrollable(ArkUIRuntimeCallInfo* runtimeCallInfo)
426 {
427 EcmaVM* vm = runtimeCallInfo->GetVM();
428 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
429 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
430 Local<JSValueRef> scrollableArg = runtimeCallInfo->GetCallArgRef(1);
431 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
432 ArkUINativeModuleValue undefinedRes = panda::JSValueRef::Undefined(vm);
433
434 if (scrollableArg->IsNull() || scrollableArg->IsUndefined()) {
435 GetArkUINodeModifiers()->getTabsModifier()->resetScrollable(nativeNode);
436 return undefinedRes;
437 }
438
439 bool scrollable = scrollableArg->ToBoolean(vm)->Value();
440 GetArkUINodeModifiers()->getTabsModifier()->setScrollable(nativeNode, scrollable);
441 return undefinedRes;
442 }
443
ResetScrollable(ArkUIRuntimeCallInfo * runtimeCallInfo)444 ArkUINativeModuleValue TabsBridge::ResetScrollable(ArkUIRuntimeCallInfo* runtimeCallInfo)
445 {
446 EcmaVM* vm = runtimeCallInfo->GetVM();
447 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
448 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
449 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
450 GetArkUINodeModifiers()->getTabsModifier()->resetScrollable(nativeNode);
451 return panda::JSValueRef::Undefined(vm);
452 }
453
SetTabBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)454 ArkUINativeModuleValue TabsBridge::SetTabBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
455 {
456 EcmaVM* vm = runtimeCallInfo->GetVM();
457 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
458 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
459 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
460
461 Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
462 CalcDimension width;
463 ArkUINativeModuleValue undefinedRes = panda::JSValueRef::Undefined(vm);
464
465 if (jsValue->IsNull() || jsValue->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, jsValue, width)) {
466 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarWidth(nativeNode);
467 return undefinedRes;
468 }
469
470 GetArkUINodeModifiers()->getTabsModifier()->setTabBarWidth(
471 nativeNode, width.Value(), static_cast<int>(width.Unit()));
472 return undefinedRes;
473 }
474
ResetTabBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)475 ArkUINativeModuleValue TabsBridge::ResetTabBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
476 {
477 EcmaVM* vm = runtimeCallInfo->GetVM();
478 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
479 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
480 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
481 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarWidth(nativeNode);
482 return panda::JSValueRef::Undefined(vm);
483 }
484
SetTabBarHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)485 ArkUINativeModuleValue TabsBridge::SetTabBarHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
486 {
487 EcmaVM* vm = runtimeCallInfo->GetVM();
488 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
489 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
490 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
491 Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
492 CalcDimension height;
493 ArkUINativeModuleValue undefinedRes = panda::JSValueRef::Undefined(vm);
494
495 if (jsValue->IsNull() || jsValue->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, jsValue, height)) {
496 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarHeight(nativeNode);
497 return undefinedRes;
498 }
499
500 GetArkUINodeModifiers()->getTabsModifier()->setTabBarHeight(
501 nativeNode, height.Value(), static_cast<int>(height.Unit()));
502 return undefinedRes;
503 }
504
ResetTabBarHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)505 ArkUINativeModuleValue TabsBridge::ResetTabBarHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
506 {
507 EcmaVM* vm = runtimeCallInfo->GetVM();
508 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
509 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
510 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
511 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarHeight(nativeNode);
512 return panda::JSValueRef::Undefined(vm);
513 }
514
SetBarAdaptiveHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)515 ArkUINativeModuleValue TabsBridge::SetBarAdaptiveHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
516 {
517 EcmaVM* vm = runtimeCallInfo->GetVM();
518 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
519 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
520 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
521 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
522 bool value = secondArg->ToBoolean(vm)->Value();
523 GetArkUINodeModifiers()->getTabsModifier()->setBarAdaptiveHeight(nativeNode, value);
524 return panda::JSValueRef::Undefined(vm);
525 }
526
ResetBarAdaptiveHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)527 ArkUINativeModuleValue TabsBridge::ResetBarAdaptiveHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
528 {
529 EcmaVM* vm = runtimeCallInfo->GetVM();
530 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
531 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
532 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
533 GetArkUINodeModifiers()->getTabsModifier()->resetBarAdaptiveHeight(nativeNode);
534 return panda::JSValueRef::Undefined(vm);
535 }
536
SetAnimationDuration(ArkUIRuntimeCallInfo * runtimeCallInfo)537 ArkUINativeModuleValue TabsBridge::SetAnimationDuration(ArkUIRuntimeCallInfo* runtimeCallInfo)
538 {
539 EcmaVM* vm = runtimeCallInfo->GetVM();
540 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
541 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
542 Local<JSValueRef> durationArg = runtimeCallInfo->GetCallArgRef(1);
543 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
544 if (durationArg->IsNull() || durationArg->IsUndefined()) {
545 GetArkUINodeModifiers()->getTabsModifier()->resetAnimationDuration(nativeNode);
546 return panda::JSValueRef::Undefined(vm);
547 }
548 float duration = durationArg->ToNumber(vm)->Value();
549 GetArkUINodeModifiers()->getTabsModifier()->setAnimationDuration(nativeNode, duration);
550 return panda::JSValueRef::Undefined(vm);
551 }
552
ResetAnimationDuration(ArkUIRuntimeCallInfo * runtimeCallInfo)553 ArkUINativeModuleValue TabsBridge::ResetAnimationDuration(ArkUIRuntimeCallInfo* runtimeCallInfo)
554 {
555 EcmaVM* vm = runtimeCallInfo->GetVM();
556 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
557 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
558 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
559 GetArkUINodeModifiers()->getTabsModifier()->resetAnimationDuration(nativeNode);
560 return panda::JSValueRef::Undefined(vm);
561 }
562
SetBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)563 ArkUINativeModuleValue TabsBridge::SetBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
564 {
565 EcmaVM* vm = runtimeCallInfo->GetVM();
566 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
567 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
568 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
569 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
570 int32_t barVal = secondArg->ToNumber(vm)->Value();
571 GetArkUINodeModifiers()->getTabsModifier()->setTabBarPosition(nativeNode, barVal);
572 return panda::JSValueRef::Undefined(vm);
573 }
574
ResetBarPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)575 ArkUINativeModuleValue TabsBridge::ResetBarPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
576 {
577 EcmaVM* vm = runtimeCallInfo->GetVM();
578 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
579 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
580 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
581 GetArkUINodeModifiers()->getTabsModifier()->resetTabBarPosition(nativeNode);
582 return panda::JSValueRef::Undefined(vm);
583 }
584
SetTabClip(ArkUIRuntimeCallInfo * runtimeCallInfo)585 ArkUINativeModuleValue TabsBridge::SetTabClip(ArkUIRuntimeCallInfo* runtimeCallInfo)
586 {
587 EcmaVM* vm = runtimeCallInfo->GetVM();
588 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
589 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
590 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
591 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
592
593 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
594 if (info[TABS_ARG_INDEX_1]->IsUndefined()) {
595 ViewAbstract::SetClipEdge(frameNode, false);
596 return panda::JSValueRef::Undefined(vm);
597 }
598 if (info[TABS_ARG_INDEX_1]->IsObject()) {
599 CommonBridge::SetClip(runtimeCallInfo);
600 } else if (info[TABS_ARG_INDEX_1]->IsBoolean()) {
601 GetArkUINodeModifiers()->getTabsModifier()->setTabClip(nativeNode, info[TABS_ARG_INDEX_1]->ToBoolean());
602 }
603 return panda::JSValueRef::Undefined(vm);
604 }
605
ResetTabClip(ArkUIRuntimeCallInfo * runtimeCallInfo)606 ArkUINativeModuleValue TabsBridge::ResetTabClip(ArkUIRuntimeCallInfo* runtimeCallInfo)
607 {
608 EcmaVM* vm = runtimeCallInfo->GetVM();
609 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
610 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
611 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
612 GetArkUINodeModifiers()->getTabsModifier()->resetTabClip(nativeNode);
613 return panda::JSValueRef::Undefined(vm);
614 }
615
SetTabEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)616 ArkUINativeModuleValue TabsBridge::SetTabEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
617 {
618 EcmaVM* vm = runtimeCallInfo->GetVM();
619 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
620 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
621 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
622 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
623
624 int32_t effect = static_cast<int32_t>(EdgeEffect::SPRING);
625 if (secondArg->IsUndefined() || secondArg->IsNull()) {
626 effect = static_cast<int32_t>(EdgeEffect::SPRING);
627 } else {
628 effect = secondArg->Int32Value(vm);
629 }
630 if (effect < static_cast<int32_t>(EdgeEffect::SPRING) || effect > static_cast<int32_t>(EdgeEffect::NONE)) {
631 effect = static_cast<int32_t>(EdgeEffect::SPRING);
632 }
633 GetArkUINodeModifiers()->getTabsModifier()->setTabEdgeEffect(nativeNode, effect);
634 return panda::JSValueRef::Undefined(vm);
635 }
636
ResetTabEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)637 ArkUINativeModuleValue TabsBridge::ResetTabEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
638 {
639 EcmaVM* vm = runtimeCallInfo->GetVM();
640 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
641 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
642 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
643 GetArkUINodeModifiers()->getTabsModifier()->resetTabEdgeEffect(nativeNode);
644 return panda::JSValueRef::Undefined(vm);
645 }
646
SetWidthAuto(ArkUIRuntimeCallInfo * runtimeCallInfo)647 ArkUINativeModuleValue TabsBridge::SetWidthAuto(ArkUIRuntimeCallInfo* runtimeCallInfo)
648 {
649 EcmaVM* vm = runtimeCallInfo->GetVM();
650 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
651 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
652 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
653 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
654
655 CalcDimension width;
656 ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, width);
657 if (width.Unit() == DimensionUnit::AUTO) {
658 CommonBridge::SetWidth(runtimeCallInfo);
659 GetArkUINodeModifiers()->getTabsModifier()->setTabWidthAuto(nativeNode);
660 return panda::JSValueRef::Undefined(vm);
661 } else {
662 CommonBridge::SetWidth(runtimeCallInfo);
663 GetArkUINodeModifiers()->getTabsModifier()->resetTabWidthAuto(nativeNode);
664 }
665 CommonBridge::SetWidth(runtimeCallInfo);
666 return panda::JSValueRef::Undefined(vm);
667 }
668
ResetWidthAuto(ArkUIRuntimeCallInfo * runtimeCallInfo)669 ArkUINativeModuleValue TabsBridge::ResetWidthAuto(ArkUIRuntimeCallInfo* runtimeCallInfo)
670 {
671 CommonBridge::ResetWidth(runtimeCallInfo);
672 EcmaVM* vm = runtimeCallInfo->GetVM();
673 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
674 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
675 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
676 GetArkUINodeModifiers()->getTabsModifier()->resetTabWidthAuto(nativeNode);
677 return panda::JSValueRef::Undefined(vm);
678 }
679
SetHeightAuto(ArkUIRuntimeCallInfo * runtimeCallInfo)680 ArkUINativeModuleValue TabsBridge::SetHeightAuto(ArkUIRuntimeCallInfo* runtimeCallInfo)
681 {
682 EcmaVM* vm = runtimeCallInfo->GetVM();
683 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
684 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
685 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
686 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
687
688 CalcDimension height;
689 ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, height);
690 if (height.Unit() == DimensionUnit::AUTO) {
691 CommonBridge::SetHeight(runtimeCallInfo);
692 GetArkUINodeModifiers()->getTabsModifier()->setTabHeightAuto(nativeNode);
693 return panda::JSValueRef::Undefined(vm);
694 } else {
695 CommonBridge::SetHeight(runtimeCallInfo);
696 GetArkUINodeModifiers()->getTabsModifier()->resetTabHeightAuto(nativeNode);
697 }
698 CommonBridge::SetHeight(runtimeCallInfo);
699 return panda::JSValueRef::Undefined(vm);
700 }
701
ResetHeightAuto(ArkUIRuntimeCallInfo * runtimeCallInfo)702 ArkUINativeModuleValue TabsBridge::ResetHeightAuto(ArkUIRuntimeCallInfo* runtimeCallInfo)
703 {
704 CommonBridge::ResetHeight(runtimeCallInfo);
705 EcmaVM* vm = runtimeCallInfo->GetVM();
706 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
707 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
708 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
709 GetArkUINodeModifiers()->getTabsModifier()->resetTabHeightAuto(nativeNode);
710 return panda::JSValueRef::Undefined(vm);
711 }
712
SetAnimateMode(ArkUIRuntimeCallInfo * runtimeCallInfo)713 ArkUINativeModuleValue TabsBridge::SetAnimateMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
714 {
715 EcmaVM* vm = runtimeCallInfo->GetVM();
716 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
717 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
718 Local<JSValueRef> animateModeArg = runtimeCallInfo->GetCallArgRef(1);
719 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
720 if (!animateModeArg->IsNumber()) {
721 GetArkUINodeModifiers()->getTabsModifier()->resetAnimateMode(nativeNode);
722 return panda::JSValueRef::Undefined(vm);
723 }
724 uint32_t animateModeValue = animateModeArg->Uint32Value(vm);
725 if (animateModeValue >= static_cast<uint32_t>(TabAnimateMode::MAX_VALUE)) {
726 GetArkUINodeModifiers()->getTabsModifier()->resetAnimateMode(nativeNode);
727 return panda::JSValueRef::Undefined(vm);
728 }
729 GetArkUINodeModifiers()->getTabsModifier()->setAnimateMode(nativeNode, animateModeValue);
730 return panda::JSValueRef::Undefined(vm);
731 }
732
ResetAnimateMode(ArkUIRuntimeCallInfo * runtimeCallInfo)733 ArkUINativeModuleValue TabsBridge::ResetAnimateMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
734 {
735 EcmaVM* vm = runtimeCallInfo->GetVM();
736 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
737 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
738 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
739 GetArkUINodeModifiers()->getTabsModifier()->resetAnimateMode(nativeNode);
740 return panda::JSValueRef::Undefined(vm);
741 }
742 } // namespace OHOS::Ace::NG
743