• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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_indicator_component_bridge.h"
16 
17 #include "jsnapi_expo.h"
18 
19 #include "bridge/declarative_frontend/engine/jsi/jsi_types.h"
20 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21 #include "core/components/common/layout/constants.h"
22 
23 namespace OHOS::Ace::NG {
24 
25 namespace {
26 constexpr int32_t CALL_ARG_NODE_INDEX = 0;
27 constexpr int32_t CALL_ARG_VALUE_INDEX = 1;
28 constexpr int32_t FUNC_PARAM_LENGTH_1 = 1;
29 constexpr int32_t DIGIT_INDICATOR_FONT_COLOR = 2;
30 constexpr int32_t DIGIT_INDICATOR_SELECTED_FONT_COLOR = 3;
31 constexpr int32_t DIGIT_INDICATOR_DIGIT_FONT_SIZE = 4;
32 constexpr int32_t DIGIT_INDICATOR_DIGIT_FONT_WEIGHT = 5;
33 constexpr int32_t DIGIT_INDICATOR_SELECTED_DIGIT_FONT_SIZE = 6;
34 constexpr int32_t DIGIT_INDICATOR_SELECTED_DIGIT_FONT_WEIGHT = 7;
35 constexpr int32_t DIGIT_INDICATOR_LEFT = 8;
36 constexpr int32_t DIGIT_INDICATOR_TOP = 9;
37 constexpr int32_t DIGIT_INDICATOR_RIGHT = 10;
38 constexpr int32_t DIGIT_INDICATOR_BOTTOM = 11;
39 constexpr int32_t DOT_INDICATOR_ITEM_WIDTH = 2;
40 constexpr int32_t DOT_INDICATOR_ITEM_HEIGHT = 3;
41 constexpr int32_t DOT_INDICATOR_SELECTED_ITEM_WIDTH = 4;
42 constexpr int32_t DOT_INDICATOR_SELECTED_ITEM_HEIGHT = 5;
43 constexpr int32_t DOT_INDICATOR_MASK = 6;
44 constexpr int32_t DOT_INDICATOR_COLOR = 7;
45 constexpr int32_t DOT_INDICATOR_SELECTED_COLOR = 8;
46 constexpr int32_t DOT_INDICATOR_LEFT = 9;
47 constexpr int32_t DOT_INDICATOR_TOP = 10;
48 constexpr int32_t DOT_INDICATOR_RIGHT = 11;
49 constexpr int32_t DOT_INDICATOR_BOTTOM = 12;
50 constexpr int32_t DOT_INDICATOR_MAX_DISPLAY_COUNT = 13;
51 constexpr double DEFAULT_PERCENT_VALUE = 100.0;
52 
GetDimensionUnitString(DimensionUnit unit)53 std::string GetDimensionUnitString(DimensionUnit unit)
54 {
55     switch (unit) {
56         case DimensionUnit::VP:
57             return "vp";
58         case DimensionUnit::PX:
59             return "px";
60         case DimensionUnit::FP:
61             return "fp";
62         case DimensionUnit::CALC:
63             return "calc";
64         default:
65             return "px";
66     }
67 }
68 
GetStringByValueRef(const EcmaVM * vm,const Local<JSValueRef> & jsValue)69 std::string GetStringByValueRef(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
70 {
71     std::string result = "-";
72     if (jsValue->IsUndefined()) {
73         return result;
74     }
75     CalcDimension calc;
76     result = ArkTSUtils::ParseJsDimension(vm, jsValue, calc, DimensionUnit::VP, true)
77                  ? (calc.Unit() == DimensionUnit::PERCENT
78                            ? (std::to_string(calc.Value() * DEFAULT_PERCENT_VALUE) + "%")
79                            : (std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())))
80                  : "0.0_vp";
81     return result;
82 }
83 
GetIntStringByValueRef(const EcmaVM * vm,const Local<JSValueRef> & jsValue)84 std::string GetIntStringByValueRef(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
85 {
86     std::string result = "-";
87     if (jsValue->IsUndefined()) {
88         return result;
89     }
90     int32_t intValue;
91     result = ArkTSUtils::ParseJsInteger(vm, jsValue, intValue) ? std::to_string(intValue) : "0";
92     return result;
93 }
94 
GetDotIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm)95 std::string GetDotIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm)
96 {
97     Local<JSValueRef> itemWidthArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_ITEM_WIDTH);
98     Local<JSValueRef> itemHeightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_ITEM_HEIGHT);
99     Local<JSValueRef> selectedItemWidthArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_ITEM_WIDTH);
100     Local<JSValueRef> selectedItemHeightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_ITEM_HEIGHT);
101     Local<JSValueRef> maskArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_MASK);
102     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_COLOR);
103     Local<JSValueRef> selectedColorArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_COLOR);
104     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_LEFT);
105     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_TOP);
106     Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_RIGHT);
107     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_BOTTOM);
108     CalcDimension calc;
109 
110     std::string itemWidth = ArkTSUtils::ParseJsDimension(vm, itemWidthArg, calc, DimensionUnit::VP, false)
111                                 ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
112                                 : "-";
113     std::string itemHeight = ArkTSUtils::ParseJsDimension(vm, itemHeightArg, calc, DimensionUnit::VP, false)
114                                  ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
115                                  : "-";
116     std::string selectedItemWidth =
117         ArkTSUtils::ParseJsDimension(vm, selectedItemWidthArg, calc, DimensionUnit::VP, false)
118             ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
119             : "-";
120     std::string selectedItemHeight =
121         ArkTSUtils::ParseJsDimension(vm, selectedItemHeightArg, calc, DimensionUnit::VP, false)
122             ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
123             : "-";
124     std::string mask = "2";
125     if (!maskArg->IsUndefined()) {
126         mask = maskArg->ToBoolean(vm)->Value() ? "1" : "0";
127     }
128     Color color;
129     std::string colorStr = ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color) ? std::to_string(color.GetValue()) : "-";
130     std::string selectedColor =
131         ArkTSUtils::ParseJsColorAlpha(vm, selectedColorArg, color) ? std::to_string(color.GetValue()) : "-";
132     std::string left = GetStringByValueRef(vm, leftArg);
133     std::string top = GetStringByValueRef(vm, topArg);
134     std::string right = GetStringByValueRef(vm, rightArg);
135     std::string bottom = GetStringByValueRef(vm, bottomArg);
136     Local<JSValueRef> maxDisplayCountArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_MAX_DISPLAY_COUNT);
137     auto maxDisplayCount = GetIntStringByValueRef(vm, maxDisplayCountArg);
138     std::string indicatorStr = itemWidth + "|" + itemHeight + "|" + selectedItemWidth + "|" + selectedItemHeight + "|" +
139                                mask + "|" + colorStr + "|" + selectedColor + "|" + left + "|" + top + "|" + right +
140                                "|" + bottom + "|" + maxDisplayCount;
141     return indicatorStr;
142 }
143 
GetDigitIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm)144 std::string GetDigitIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm)
145 {
146     Local<JSValueRef> fontColorArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_FONT_COLOR);
147     Local<JSValueRef> selectedFontColorArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_FONT_COLOR);
148     Local<JSValueRef> digitFontSizeArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_DIGIT_FONT_SIZE);
149     Local<JSValueRef> digitFontWeightArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_DIGIT_FONT_WEIGHT);
150     Local<JSValueRef> selectedDigitFontSizeArg =
151         runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_DIGIT_FONT_SIZE);
152     Local<JSValueRef> selectedDigitFontWeightArg =
153         runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_DIGIT_FONT_WEIGHT);
154     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_LEFT);
155     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_TOP);
156     Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_RIGHT);
157     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_BOTTOM);
158     Color color;
159     CalcDimension calc;
160     std::string fontColor =
161         ArkTSUtils::ParseJsColorAlpha(vm, fontColorArg, color) ? std::to_string(color.GetValue()) : "-";
162     std::string selectedFontColor =
163         ArkTSUtils::ParseJsColorAlpha(vm, selectedFontColorArg, color) ? std::to_string(color.GetValue()) : "-";
164     std::string digitFontSize = ArkTSUtils::ParseJsDimension(vm, digitFontSizeArg, calc, DimensionUnit::FP, false)
165                                     ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
166                                     : "-";
167     std::string digitFontWeight = digitFontWeightArg->ToString(vm)->ToString(vm);
168     std::string selectedDigitFontSize =
169         ArkTSUtils::ParseJsDimension(vm, selectedDigitFontSizeArg, calc, DimensionUnit::FP, false)
170             ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
171             : "-";
172     std::string selectedDigitFontWeight = selectedDigitFontWeightArg->ToString(vm)->ToString(vm);
173     std::string left = GetStringByValueRef(vm, leftArg);
174     std::string top = GetStringByValueRef(vm, topArg);
175     std::string right = GetStringByValueRef(vm, rightArg);
176     std::string bottom = GetStringByValueRef(vm, bottomArg);
177     std::string indicatorStr = fontColor + "|" + selectedFontColor + "|" + digitFontSize + "|" + digitFontWeight + "|" +
178                                selectedDigitFontSize + "|" + selectedDigitFontWeight + "|" + left + "|" + top + "|" +
179                                right + "|" + bottom;
180     return indicatorStr;
181 }
182 } // namespace
183 
SetInitialIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)184 ArkUINativeModuleValue IndicatorComponentBridge::SetInitialIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
185 {
186     EcmaVM* vm = runtimeCallInfo->GetVM();
187     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
188     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
189     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
190     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
191     if (valueArg->IsNumber()) {
192         int32_t index = valueArg->Int32Value(vm);
193         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setInitialIndex(nativeNode, index);
194     } else {
195         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetInitialIndex(nativeNode);
196     }
197     return panda::JSValueRef::Undefined(vm);
198 }
199 
ResetInitialIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)200 ArkUINativeModuleValue IndicatorComponentBridge::ResetInitialIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
201 {
202     EcmaVM* vm = runtimeCallInfo->GetVM();
203     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
204     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
205     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
206     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetInitialIndex(nativeNode);
207     return panda::JSValueRef::Undefined(vm);
208 }
209 
SetCount(ArkUIRuntimeCallInfo * runtimeCallInfo)210 ArkUINativeModuleValue IndicatorComponentBridge::SetCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
211 {
212     EcmaVM* vm = runtimeCallInfo->GetVM();
213     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
214     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
215     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
216     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
217     if (valueArg->IsNumber()) {
218         int32_t count = valueArg->Int32Value(vm);
219         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setCount(nativeNode, count);
220     } else {
221         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetCount(nativeNode);
222     }
223     return panda::JSValueRef::Undefined(vm);
224 }
225 
ResetCount(ArkUIRuntimeCallInfo * runtimeCallInfo)226 ArkUINativeModuleValue IndicatorComponentBridge::ResetCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
227 {
228     EcmaVM* vm = runtimeCallInfo->GetVM();
229     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
230     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
231     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
232     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetCount(nativeNode);
233     return panda::JSValueRef::Undefined(vm);
234 }
235 
SetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)236 ArkUINativeModuleValue IndicatorComponentBridge::SetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
237 {
238     EcmaVM* vm = runtimeCallInfo->GetVM();
239     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
240     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
241     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
242     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
243     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
244     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
245     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
246         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetOnChange(nativeNode);
247         return panda::JSValueRef::Undefined(vm);
248     }
249     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
250     std::function<void(const BaseEventInfo* info)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
251                                                                   const BaseEventInfo* info) {
252         panda::LocalScope pandaScope(vm);
253         panda::TryCatch trycatch(vm);
254         const auto* swiperInfo = TypeInfoHelper::DynamicCast<SwiperChangeEvent>(info);
255         if (!swiperInfo) {
256             TAG_LOGW(AceLogTag::ACE_INDICATOR, "IndicatorComponent onChange callback execute failed.");
257             return;
258         }
259         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
260         panda::Local<panda::JSValueRef> params[FUNC_PARAM_LENGTH_1] = { panda::NumberRef::New(
261             vm, swiperInfo->GetIndex()) };
262         func->Call(vm, func.ToLocal(), params, FUNC_PARAM_LENGTH_1);
263     };
264     GetArkUINodeModifiers()->getIndicatorComponentModifier()->setOnChange(
265         nativeNode, reinterpret_cast<void*>(&callback));
266     return panda::JSValueRef::Undefined(vm);
267 }
268 
ResetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)269 ArkUINativeModuleValue IndicatorComponentBridge::ResetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
270 {
271     EcmaVM* vm = runtimeCallInfo->GetVM();
272     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
273     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
274     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
275     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetOnChange(nativeNode);
276     return panda::JSValueRef::Undefined(vm);
277 }
278 
SetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)279 ArkUINativeModuleValue IndicatorComponentBridge::SetStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
280 {
281     EcmaVM* vm = runtimeCallInfo->GetVM();
282     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
283     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
284     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
285     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
286 
287     std::string type = valueArg->ToString(vm)->ToString(vm);
288     std::string indicatorStr = "";
289     if (type == "ArkDigitIndicator") {
290         indicatorStr = type + "|" + GetDigitIndicator(runtimeCallInfo, vm);
291     } else {
292         indicatorStr = type + "|" + GetDotIndicator(runtimeCallInfo, vm);
293     }
294     GetArkUINodeModifiers()->getIndicatorComponentModifier()->setStyle(nativeNode, indicatorStr.c_str());
295     return panda::JSValueRef::Undefined(vm);
296 }
297 
ResetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)298 ArkUINativeModuleValue IndicatorComponentBridge::ResetStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
299 {
300     EcmaVM* vm = runtimeCallInfo->GetVM();
301     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
302     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
303     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
304     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetStyle(nativeNode);
305     return panda::JSValueRef::Undefined(vm);
306 }
307 
SetLoop(ArkUIRuntimeCallInfo * runtimeCallInfo)308 ArkUINativeModuleValue IndicatorComponentBridge::SetLoop(ArkUIRuntimeCallInfo* runtimeCallInfo)
309 {
310     EcmaVM* vm = runtimeCallInfo->GetVM();
311     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
312     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
313     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
314     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
315     if (valueArg->IsBoolean()) {
316         bool loop = valueArg->ToBoolean(vm)->Value();
317         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setLoop(nativeNode, loop);
318     } else {
319         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetLoop(nativeNode);
320     }
321     return panda::JSValueRef::Undefined(vm);
322 }
323 
ResetLoop(ArkUIRuntimeCallInfo * runtimeCallInfo)324 ArkUINativeModuleValue IndicatorComponentBridge::ResetLoop(ArkUIRuntimeCallInfo* runtimeCallInfo)
325 {
326     EcmaVM* vm = runtimeCallInfo->GetVM();
327     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
328     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
329     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
330     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetLoop(nativeNode);
331     return panda::JSValueRef::Undefined(vm);
332 }
333 
SetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)334 ArkUINativeModuleValue IndicatorComponentBridge::SetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
335 {
336     EcmaVM* vm = runtimeCallInfo->GetVM();
337     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
338     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
339     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
340     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
341     if (valueArg->IsBoolean()) {
342         bool isVertical = valueArg->ToBoolean(vm)->Value();
343         GetArkUINodeModifiers()->getIndicatorComponentModifier()->setVertical(nativeNode, isVertical);
344     } else {
345         GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetVertical(nativeNode);
346     }
347     return panda::JSValueRef::Undefined(vm);
348 }
349 
ResetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)350 ArkUINativeModuleValue IndicatorComponentBridge::ResetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
351 {
352     EcmaVM* vm = runtimeCallInfo->GetVM();
353     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
354     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
355     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
356     GetArkUINodeModifiers()->getIndicatorComponentModifier()->resetVertical(nativeNode);
357     return panda::JSValueRef::Undefined(vm);
358 }
359 
360 } // namespace OHOS::Ace::NG
361