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