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