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