• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_slider_bridge.h"
16 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
17 #include "bridge/declarative_frontend/jsview/js_shape_abstract.h"
18 #include "core/components_ng/base/frame_node.h"
19 #include "core/components_ng/pattern/slider/slider_model_ng.h"
20 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21 
22 namespace OHOS::Ace::NG {
23 constexpr int NUM_0 = 0;
24 constexpr int NUM_1 = 1;
25 constexpr int NUM_2 = 2;
26 constexpr int NUM_8 = 8;
27 constexpr int SLIDER_MIN = 0;
28 constexpr int SLIDER_MAX = 100;
29 constexpr int PARAM_ARR_LENGTH_2 = 2;
30 const char* SLIDER_NODEPTR_OF_UINODE = "nodePtr_";
JsSliderChangeCallback(panda::JsiRuntimeCallInfo * runtimeCallInfo)31 panda::Local<panda::JSValueRef> JsSliderChangeCallback(panda::JsiRuntimeCallInfo* runtimeCallInfo)
32 {
33     auto vm = runtimeCallInfo->GetVM();
34     int32_t argc = static_cast<int32_t>(runtimeCallInfo->GetArgsNumber());
35     if (argc != NUM_2) {
36         return panda::JSValueRef::Undefined(vm);
37     }
38     auto valueArg = runtimeCallInfo->GetCallArgRef(NUM_0);
39     auto modeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
40     if (!valueArg->IsNumber() || !modeArg->IsNumber()) {
41         return panda::JSValueRef::Undefined(vm);
42     }
43     double value = valueArg->ToNumber(vm)->Value();
44     int32_t mode = modeArg->ToNumber(vm)->Value();
45     auto ref = runtimeCallInfo->GetThisRef();
46     auto obj = ref->ToObject(vm);
47     if (obj->GetNativePointerFieldCount(vm) < NUM_1) {
48         return panda::JSValueRef::Undefined(vm);
49     }
50     auto frameNode = static_cast<FrameNode*>(obj->GetNativePointerField(vm, 0));
51     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
52     SliderModelNG::SetChangeValue(frameNode, value, mode);
53     return panda::JSValueRef::Undefined(vm);
54 }
55 
SetShowTips(ArkUIRuntimeCallInfo * runtimeCallInfo)56 ArkUINativeModuleValue SliderBridge::SetShowTips(ArkUIRuntimeCallInfo* runtimeCallInfo)
57 {
58     EcmaVM* vm = runtimeCallInfo->GetVM();
59     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
60     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
61     Local<JSValueRef> showTipArg = runtimeCallInfo->GetCallArgRef(NUM_1);
62     Local<JSValueRef> contentArg = runtimeCallInfo->GetCallArgRef(NUM_2);
63     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
64 
65     bool showTips = false;
66     if (showTipArg->IsBoolean()) {
67         showTips = showTipArg->ToBoolean(vm)->Value();
68     }
69 
70     std::string content;
71     if (ArkTSUtils::ParseJsString(vm, contentArg, content)) {
72         GetArkUINodeModifiers()->getSliderModifier()->setShowTips(nativeNode, showTips, content.c_str());
73     } else {
74         GetArkUINodeModifiers()->getSliderModifier()->setShowTips(nativeNode, showTips, nullptr);
75     }
76     return panda::JSValueRef::Undefined(vm);
77 }
78 
ResetShowTips(ArkUIRuntimeCallInfo * runtimeCallInfo)79 ArkUINativeModuleValue SliderBridge::ResetShowTips(ArkUIRuntimeCallInfo* runtimeCallInfo)
80 {
81     EcmaVM* vm = runtimeCallInfo->GetVM();
82     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
83     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
84     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
85     GetArkUINodeModifiers()->getSliderModifier()->resetShowTips(nativeNode);
86     return panda::JSValueRef::Undefined(vm);
87 }
88 
SetSliderStepSize(ArkUIRuntimeCallInfo * runtimeCallInfo)89 ArkUINativeModuleValue SliderBridge::SetSliderStepSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
90 {
91     EcmaVM* vm = runtimeCallInfo->GetVM();
92     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
93     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
94     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
95     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
96     CalcDimension stepSize;
97     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, stepSize, false)) {
98         GetArkUINodeModifiers()->getSliderModifier()->resetSliderStepSize(nativeNode);
99         return panda::JSValueRef::Undefined(vm);
100     } else {
101         if (LessNotEqual(stepSize.Value(), 0.0)) {
102             GetArkUINodeModifiers()->getSliderModifier()->resetSliderStepSize(nativeNode);
103             return panda::JSValueRef::Undefined(vm);
104         }
105 
106         GetArkUINodeModifiers()->getSliderModifier()->setSliderStepSize(
107             nativeNode, stepSize.Value(), static_cast<int>(stepSize.Unit()));
108     }
109 
110     return panda::JSValueRef::Undefined(vm);
111 }
112 
ResetSliderStepSize(ArkUIRuntimeCallInfo * runtimeCallInfo)113 ArkUINativeModuleValue SliderBridge::ResetSliderStepSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
114 {
115     EcmaVM* vm = runtimeCallInfo->GetVM();
116     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
117     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
118     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
119     GetArkUINodeModifiers()->getSliderModifier()->resetSliderStepSize(nativeNode);
120     return panda::JSValueRef::Undefined(vm);
121 }
122 
SetBlockSize(ArkUIRuntimeCallInfo * runtimeCallInfo)123 ArkUINativeModuleValue SliderBridge::SetBlockSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
124 {
125     EcmaVM* vm = runtimeCallInfo->GetVM();
126     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
127     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
128     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
129     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
130     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
131 
132     CalcDimension blockWidth;
133     CalcDimension blockHeight;
134     bool hasBlockWidth = ArkTSUtils::ParseJsDimensionVp(vm, secondArg, blockWidth);
135     bool hasBlockHeight = ArkTSUtils::ParseJsDimensionVp(vm, thirdArg, blockHeight);
136     if (!hasBlockWidth && !hasBlockHeight) {
137         GetArkUINodeModifiers()->getSliderModifier()->resetBlockSize(nativeNode);
138         return panda::JSValueRef::Undefined(vm);
139     }
140 
141     GetArkUINodeModifiers()->getSliderModifier()->setBlockSize(nativeNode,
142         blockWidth.Value(), static_cast<int>(blockWidth.Unit()),
143         blockHeight.Value(), static_cast<int>(blockHeight.Unit()));
144     return panda::JSValueRef::Undefined(vm);
145 }
146 
ResetBlockSize(ArkUIRuntimeCallInfo * runtimeCallInfo)147 ArkUINativeModuleValue SliderBridge::ResetBlockSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
148 {
149     EcmaVM* vm = runtimeCallInfo->GetVM();
150     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
151     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
152     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
153     GetArkUINodeModifiers()->getSliderModifier()->resetBlockSize(nativeNode);
154     return panda::JSValueRef::Undefined(vm);
155 }
156 
SetTrackBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)157 ArkUINativeModuleValue SliderBridge::SetTrackBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
158 {
159     EcmaVM* vm = runtimeCallInfo->GetVM();
160     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
161     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
162     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
163     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
164 
165     CalcDimension trackBorderRadius;
166     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, trackBorderRadius, true)) {
167         GetArkUINodeModifiers()->getSliderModifier()->resetTrackBorderRadius(nativeNode);
168         return panda::JSValueRef::Undefined(vm);
169     }
170 
171     if (LessNotEqual(trackBorderRadius.Value(), 0.0)) {
172         GetArkUINodeModifiers()->getSliderModifier()->resetTrackBorderRadius(nativeNode);
173         return panda::JSValueRef::Undefined(vm);
174     }
175 
176     GetArkUINodeModifiers()->getSliderModifier()->setTrackBorderRadius(nativeNode,
177         trackBorderRadius.Value(), static_cast<int>(trackBorderRadius.Unit()));
178     return panda::JSValueRef::Undefined(vm);
179 }
180 
ResetTrackBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)181 ArkUINativeModuleValue SliderBridge::ResetTrackBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
182 {
183     EcmaVM* vm = runtimeCallInfo->GetVM();
184     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
185     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
186     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
187     GetArkUINodeModifiers()->getSliderModifier()->resetTrackBorderRadius(nativeNode);
188     return panda::JSValueRef::Undefined(vm);
189 }
190 
SetStepColor(ArkUIRuntimeCallInfo * runtimeCallInfo)191 ArkUINativeModuleValue SliderBridge::SetStepColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
192 {
193     EcmaVM* vm = runtimeCallInfo->GetVM();
194     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
195     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
196     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
197     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
198     Color color;
199     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
200         GetArkUINodeModifiers()->getSliderModifier()->resetStepColor(nativeNode);
201     } else {
202         GetArkUINodeModifiers()->getSliderModifier()->setStepColor(nativeNode, color.GetValue());
203     }
204 
205     return panda::JSValueRef::Undefined(vm);
206 }
207 
ResetStepColor(ArkUIRuntimeCallInfo * runtimeCallInfo)208 ArkUINativeModuleValue SliderBridge::ResetStepColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
209 {
210     EcmaVM* vm = runtimeCallInfo->GetVM();
211     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
212     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
213     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
214     GetArkUINodeModifiers()->getSliderModifier()->resetStepColor(nativeNode);
215     return panda::JSValueRef::Undefined(vm);
216 }
217 
SetBlockBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)218 ArkUINativeModuleValue SliderBridge::SetBlockBorderColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
219 {
220     EcmaVM* vm = runtimeCallInfo->GetVM();
221     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
222     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
223     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
224     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
225     Color color;
226     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
227         GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderColor(nativeNode);
228     } else {
229         GetArkUINodeModifiers()->getSliderModifier()->setBlockBorderColor(nativeNode, color.GetValue());
230     }
231     return panda::JSValueRef::Undefined(vm);
232 }
233 
ResetBlockBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)234 ArkUINativeModuleValue SliderBridge::ResetBlockBorderColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
235 {
236     EcmaVM* vm = runtimeCallInfo->GetVM();
237     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
238     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
239     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
240     GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderColor(nativeNode);
241     return panda::JSValueRef::Undefined(vm);
242 }
243 
SetBlockBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)244 ArkUINativeModuleValue SliderBridge::SetBlockBorderWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
245 {
246     EcmaVM* vm = runtimeCallInfo->GetVM();
247     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
248     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
249     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
250     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
251 
252     CalcDimension blockBorderWidth;
253     if (!ArkTSUtils::ParseJsDimensionVp(vm, secondArg, blockBorderWidth)) {
254         GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderWidth(nativeNode);
255         return panda::JSValueRef::Undefined(vm);
256     }
257 
258     if (LessNotEqual(blockBorderWidth.Value(), 0.0)) {
259         GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderWidth(nativeNode);
260         return panda::JSValueRef::Undefined(vm);
261     }
262 
263     GetArkUINodeModifiers()->getSliderModifier()->setBlockBorderWidth(nativeNode,
264         blockBorderWidth.Value(), static_cast<int>(blockBorderWidth.Unit()));
265     return panda::JSValueRef::Undefined(vm);
266 }
267 
ResetBlockBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)268 ArkUINativeModuleValue SliderBridge::ResetBlockBorderWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
269 {
270     EcmaVM* vm = runtimeCallInfo->GetVM();
271     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
272     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
273     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
274     GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderWidth(nativeNode);
275     return panda::JSValueRef::Undefined(vm);
276 }
277 
SetBlockColor(ArkUIRuntimeCallInfo * runtimeCallInfo)278 ArkUINativeModuleValue SliderBridge::SetBlockColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
279 {
280     EcmaVM* vm = runtimeCallInfo->GetVM();
281     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
282     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
283     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
284     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
285     Color color;
286     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
287         GetArkUINodeModifiers()->getSliderModifier()->resetBlockColor(nativeNode);
288     } else {
289         GetArkUINodeModifiers()->getSliderModifier()->setBlockColor(nativeNode, color.GetValue());
290     }
291     return panda::JSValueRef::Undefined(vm);
292 }
293 
ResetBlockColor(ArkUIRuntimeCallInfo * runtimeCallInfo)294 ArkUINativeModuleValue SliderBridge::ResetBlockColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
295 {
296     EcmaVM* vm = runtimeCallInfo->GetVM();
297     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
298     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
299     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
300     GetArkUINodeModifiers()->getSliderModifier()->resetBlockColor(nativeNode);
301     return panda::JSValueRef::Undefined(vm);
302 }
303 
SetTrackBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)304 ArkUINativeModuleValue SliderBridge::SetTrackBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
305 {
306     EcmaVM* vm = runtimeCallInfo->GetVM();
307     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
308     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
309     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
310     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
311     Color color;
312     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
313         GetArkUINodeModifiers()->getSliderModifier()->resetTrackBackgroundColor(nativeNode);
314     } else {
315         GetArkUINodeModifiers()->getSliderModifier()->setTrackBackgroundColor(nativeNode, color.GetValue());
316     }
317     return panda::JSValueRef::Undefined(vm);
318 }
319 
ResetTrackBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)320 ArkUINativeModuleValue SliderBridge::ResetTrackBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
321 {
322     EcmaVM* vm = runtimeCallInfo->GetVM();
323     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
324     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
325     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
326     GetArkUINodeModifiers()->getSliderModifier()->resetTrackBackgroundColor(nativeNode);
327     return panda::JSValueRef::Undefined(vm);
328 }
329 
SetSelectColor(ArkUIRuntimeCallInfo * runtimeCallInfo)330 ArkUINativeModuleValue SliderBridge::SetSelectColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
331 {
332     EcmaVM* vm = runtimeCallInfo->GetVM();
333     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
334     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
335     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
336     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
337         Color color;
338     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
339         GetArkUINodeModifiers()->getSliderModifier()->resetSelectColor(nativeNode);
340     } else {
341         GetArkUINodeModifiers()->getSliderModifier()->setSelectColor(nativeNode, color.GetValue());
342     }
343     return panda::JSValueRef::Undefined(vm);
344 }
345 
ResetSelectColor(ArkUIRuntimeCallInfo * runtimeCallInfo)346 ArkUINativeModuleValue SliderBridge::ResetSelectColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
347 {
348     EcmaVM* vm = runtimeCallInfo->GetVM();
349     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
350     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
351     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
352     GetArkUINodeModifiers()->getSliderModifier()->resetSelectColor(nativeNode);
353     return panda::JSValueRef::Undefined(vm);
354 }
355 
SetShowSteps(ArkUIRuntimeCallInfo * runtimeCallInfo)356 ArkUINativeModuleValue SliderBridge::SetShowSteps(ArkUIRuntimeCallInfo* runtimeCallInfo)
357 {
358     EcmaVM* vm = runtimeCallInfo->GetVM();
359     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
360     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
361     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
362     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
363     bool flag = secondArg->ToBoolean(vm)->Value();
364     GetArkUINodeModifiers()->getSliderModifier()->setShowSteps(nativeNode, flag);
365     return panda::JSValueRef::Undefined(vm);
366 }
367 
ResetShowSteps(ArkUIRuntimeCallInfo * runtimeCallInfo)368 ArkUINativeModuleValue SliderBridge::ResetShowSteps(ArkUIRuntimeCallInfo* runtimeCallInfo)
369 {
370     EcmaVM* vm = runtimeCallInfo->GetVM();
371     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
372     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
373     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
374     GetArkUINodeModifiers()->getSliderModifier()->resetShowSteps(nativeNode);
375     return panda::JSValueRef::Undefined(vm);
376 }
377 
SetThickness(ArkUIRuntimeCallInfo * runtimeCallInfo)378 ArkUINativeModuleValue SliderBridge::SetThickness(ArkUIRuntimeCallInfo* runtimeCallInfo)
379 {
380     EcmaVM* vm = runtimeCallInfo->GetVM();
381     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
382     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
383     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
384     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
385 
386     CalcDimension thickness;
387     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, thickness, true)) {
388         GetArkUINodeModifiers()->getSliderModifier()->resetThickness(nativeNode);
389         return panda::JSValueRef::Undefined(vm);
390     }
391 
392     GetArkUINodeModifiers()->getSliderModifier()->setThickness(nativeNode,
393         thickness.Value(), static_cast<int>(thickness.Unit()));
394     return panda::JSValueRef::Undefined(vm);
395 }
396 
ResetThickness(ArkUIRuntimeCallInfo * runtimeCallInfo)397 ArkUINativeModuleValue SliderBridge::ResetThickness(ArkUIRuntimeCallInfo* runtimeCallInfo)
398 {
399     EcmaVM* vm = runtimeCallInfo->GetVM();
400     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
401     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
402     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
403     GetArkUINodeModifiers()->getSliderModifier()->resetThickness(nativeNode);
404     return panda::JSValueRef::Undefined(vm);
405 }
406 
SetBlockStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)407 ArkUINativeModuleValue SliderBridge::SetBlockStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
408 {
409     EcmaVM* vm = runtimeCallInfo->GetVM();
410     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
411     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
412     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
413     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
414     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
415     if (!info[1]->IsObject()) {
416         SliderBridge::ResetBlockStyle(runtimeCallInfo);
417         return panda::JSValueRef::Undefined(vm);
418     }
419     auto jsObj = Framework::JSRef<Framework::JSObject>::Cast(info[1]);
420     auto getType = jsObj->GetProperty("type");
421     if (getType->IsNull() || !getType->IsNumber()) {
422         SliderBridge::ResetBlockStyle(runtimeCallInfo);
423         return panda::JSValueRef::Undefined(vm);
424     }
425     auto type = static_cast<SliderModel::BlockStyleType>(getType->ToNumber<int32_t>());
426     if (type == SliderModel::BlockStyleType::IMAGE) {
427         std::string src;
428         auto image = jsObj->GetProperty("image");
429         if (!Framework::JSShapeAbstract::ParseJsMedia(image, src)) {
430             SliderBridge::ResetBlockStyle(runtimeCallInfo);
431             return panda::JSValueRef::Undefined(vm);
432         }
433         std::string bundleName;
434         std::string moduleName;
435         Framework::JSViewAbstract::GetJsMediaBundleInfo(image, bundleName, moduleName);
436         SliderModelNG::SetBlockImage(frameNode, src, bundleName, moduleName);
437     } else if (type == SliderModel::BlockStyleType::SHAPE) {
438         auto shape = jsObj->GetProperty("shape");
439         if (!shape->IsObject()) {
440             SliderBridge::ResetBlockStyle(runtimeCallInfo);
441             return panda::JSValueRef::Undefined(vm);
442         }
443         Framework::JSShapeAbstract* shapeAbstract =
444             Framework::JSRef<Framework::JSObject>::Cast(shape)->Unwrap<Framework::JSShapeAbstract>();
445         if (shapeAbstract == nullptr) {
446             SliderBridge::ResetBlockStyle(runtimeCallInfo);
447             return panda::JSValueRef::Undefined(vm);
448         }
449         SliderModelNG::SetBlockShape(frameNode, shapeAbstract->GetBasicShape());
450     }
451     SliderModelNG::SetBlockType(frameNode, type);
452     return panda::JSValueRef::Undefined(vm);
453 }
454 
ResetBlockStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)455 ArkUINativeModuleValue SliderBridge::ResetBlockStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
456 {
457     EcmaVM* vm = runtimeCallInfo->GetVM();
458     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
459     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
460     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
461     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
462     SliderModelNG::ResetBlockType(frameNode);
463     SliderModelNG::ResetBlockImage(frameNode);
464     SliderModelNG::ResetBlockShape(frameNode);
465     return panda::JSValueRef::Undefined(vm);
466 }
467 
SetValidSlideRange(ArkUIRuntimeCallInfo * runtimeCallInfo)468 ArkUINativeModuleValue SliderBridge::SetValidSlideRange(ArkUIRuntimeCallInfo* runtimeCallInfo)
469 {
470     EcmaVM* vm = runtimeCallInfo->GetVM();
471     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
472     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
473     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
474     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
475     if (!info[1]->IsObject()) {
476         GetArkUINodeModifiers()->getSliderModifier()->resetSliderValidSlideRange(nativeNode);
477         return panda::JSValueRef::Undefined(vm);
478     }
479     float from = std::numeric_limits<float>::infinity();
480     float to = std::numeric_limits<float>::infinity();
481     auto jsObj = Framework::JSRef<Framework::JSObject>::Cast(info[1]);
482     auto fromType = jsObj->GetProperty("from");
483     if (!fromType->IsEmpty() && fromType->IsNumber()) {
484         from = fromType->ToNumber<float>();
485     }
486     auto toType = jsObj->GetProperty("to");
487     if (!toType->IsEmpty() && toType->IsNumber()) {
488         to = toType->ToNumber<float>();
489     }
490     if ((std::isinf(from) && std::isinf(to)) || std::isnan(from) || std::isnan(to)) {
491         GetArkUINodeModifiers()->getSliderModifier()->resetSliderValidSlideRange(nativeNode);
492         return panda::JSValueRef::Undefined(vm);
493     }
494     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
495     SliderModelNG::SetValidSlideRange(frameNode, from, to);
496     return panda::JSValueRef::Undefined(vm);
497 }
498 
ResetValidSlideRange(ArkUIRuntimeCallInfo * runtimeCallInfo)499 ArkUINativeModuleValue SliderBridge::ResetValidSlideRange(ArkUIRuntimeCallInfo* runtimeCallInfo)
500 {
501     EcmaVM* vm = runtimeCallInfo->GetVM();
502     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
503     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
504     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
505     GetArkUINodeModifiers()->getSliderModifier()->resetSliderValidSlideRange(nativeNode);
506     return panda::JSValueRef::Undefined(vm);
507 }
508 
SetSelectedBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)509 ArkUINativeModuleValue SliderBridge::SetSelectedBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
510 {
511     EcmaVM* vm = runtimeCallInfo->GetVM();
512     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
513     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
514     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
515     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
516 
517     CalcDimension borderRadius;
518     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, borderRadius, true)) {
519         GetArkUINodeModifiers()->getSliderModifier()->resetSelectedBorderRadius(nativeNode);
520         return panda::JSValueRef::Undefined(vm);
521     }
522 
523     if (LessNotEqual(borderRadius.Value(), 0.0)) {
524         GetArkUINodeModifiers()->getSliderModifier()->resetSelectedBorderRadius(nativeNode);
525         return panda::JSValueRef::Undefined(vm);
526     }
527 
528     GetArkUINodeModifiers()->getSliderModifier()->setSelectedBorderRadius(nativeNode,
529         borderRadius.Value(), static_cast<int>(borderRadius.Unit()));
530     return panda::JSValueRef::Undefined(vm);
531 }
532 
ResetSelectedBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)533 ArkUINativeModuleValue SliderBridge::ResetSelectedBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
534 {
535     EcmaVM* vm = runtimeCallInfo->GetVM();
536     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
537     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
538     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
539     GetArkUINodeModifiers()->getSliderModifier()->resetSelectedBorderRadius(nativeNode);
540     return panda::JSValueRef::Undefined(vm);
541 }
542 
SetInteractionMode(ArkUIRuntimeCallInfo * runtimeCallInfo)543 ArkUINativeModuleValue SliderBridge::SetInteractionMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
544 {
545     EcmaVM* vm = runtimeCallInfo->GetVM();
546     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
547     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
548     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
549     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
550     if (!secondArg->IsNumber()) {
551         GetArkUINodeModifiers()->getSliderModifier()->resetInteractionMode(nativeNode);
552         return panda::JSValueRef::Undefined(vm);
553     }
554     int32_t interactionMode = secondArg->Int32Value(vm);
555     GetArkUINodeModifiers()->getSliderModifier()->setInteractionMode(nativeNode, interactionMode);
556     return panda::JSValueRef::Undefined(vm);
557 }
558 
ResetInteractionMode(ArkUIRuntimeCallInfo * runtimeCallInfo)559 ArkUINativeModuleValue SliderBridge::ResetInteractionMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
560 {
561     EcmaVM* vm = runtimeCallInfo->GetVM();
562     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
563     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
564     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
565     GetArkUINodeModifiers()->getSliderModifier()->resetInteractionMode(nativeNode);
566     return panda::JSValueRef::Undefined(vm);
567 }
568 
SetMinResponsiveDistance(ArkUIRuntimeCallInfo * runtimeCallInfo)569 ArkUINativeModuleValue SliderBridge::SetMinResponsiveDistance(ArkUIRuntimeCallInfo* runtimeCallInfo)
570 {
571     EcmaVM* vm = runtimeCallInfo->GetVM();
572     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
573     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
574     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
575     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
576     if (!secondArg->IsNumber()) {
577         GetArkUINodeModifiers()->getSliderModifier()->resetMinResponsiveDistance(nativeNode);
578         return panda::JSValueRef::Undefined(vm);
579     }
580     float distance = secondArg->ToNumber(vm)->Value();
581     GetArkUINodeModifiers()->getSliderModifier()->setMinResponsiveDistance(nativeNode, distance);
582     return panda::JSValueRef::Undefined(vm);
583 }
584 
ResetMinResponsiveDistance(ArkUIRuntimeCallInfo * runtimeCallInfo)585 ArkUINativeModuleValue SliderBridge::ResetMinResponsiveDistance(ArkUIRuntimeCallInfo* runtimeCallInfo)
586 {
587     EcmaVM* vm = runtimeCallInfo->GetVM();
588     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
589     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
590     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
591     GetArkUINodeModifiers()->getSliderModifier()->resetMinResponsiveDistance(nativeNode);
592     return panda::JSValueRef::Undefined(vm);
593 }
594 
SetContentModifierBuilder(ArkUIRuntimeCallInfo * runtimeCallInfo)595 ArkUINativeModuleValue SliderBridge::SetContentModifierBuilder(ArkUIRuntimeCallInfo* runtimeCallInfo)
596 {
597     EcmaVM* vm = runtimeCallInfo->GetVM();
598     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
599     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
600     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
601     auto* frameNode = reinterpret_cast<FrameNode*>(firstArg->ToNativePointer(vm)->Value());
602     if (!secondArg->IsObject(vm)) {
603         SliderModelNG::SetBuilderFunc(frameNode, nullptr);
604         return panda::JSValueRef::Undefined(vm);
605     }
606     panda::CopyableGlobal<panda::ObjectRef> obj(vm, secondArg);
607     auto containerId = Container::CurrentId();
608     SliderModelNG::SetBuilderFunc(frameNode,
609         [vm, frameNode, obj = std::move(obj), containerId](
610             SliderConfiguration config) -> RefPtr<FrameNode> {
611             ContainerScope scope(containerId);
612             auto context = ArkTSUtils::GetContext(vm);
613             const char* keyOfSlider[] = { "value", "min", "max", "step", "enabled", "triggerChange" };
614             Local<JSValueRef> valuesOfSlider[] = { panda::NumberRef::New(vm, config.value_),
615                 panda::NumberRef::New(vm, config.min_), panda::NumberRef::New(vm, config.max_),
616                 panda::NumberRef::New(vm, config.step_), panda::BooleanRef::New(vm, config.enabled_),
617                 panda::FunctionRef::New(vm, JsSliderChangeCallback) };
618             auto slider = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keyOfSlider),
619                 keyOfSlider, valuesOfSlider);
620             slider->SetNativePointerFieldCount(vm, 1);
621             slider->SetNativePointerField(vm, 0, static_cast<void*>(frameNode));
622             panda::Local<panda::JSValueRef> params[NUM_2] = { context, slider };
623             LocalScope pandaScope(vm);
624             panda::TryCatch trycatch(vm);
625             auto jsObject = obj.ToLocal();
626             auto makeFunc = jsObject->Get(vm, panda::StringRef::NewFromUtf8(vm, "makeContentModifierNode"));
627             CHECK_EQUAL_RETURN(makeFunc->IsFunction(vm), false, nullptr);
628             panda::Local<panda::FunctionRef> func = makeFunc;
629             auto result = func->Call(vm, jsObject, params, NUM_2);
630             JSNApi::ExecutePendingJob(vm);
631             CHECK_EQUAL_RETURN(result.IsEmpty() || trycatch.HasCaught() || !result->IsObject(vm), true, nullptr);
632             auto resultObj = result->ToObject(vm);
633             panda::Local<panda::JSValueRef> nodeptr =
634                 resultObj->Get(vm, panda::StringRef::NewFromUtf8(vm, SLIDER_NODEPTR_OF_UINODE));
635             CHECK_EQUAL_RETURN(nodeptr.IsEmpty() || nodeptr->IsUndefined() || nodeptr->IsNull(), true, nullptr);
636             auto* frameNode = reinterpret_cast<FrameNode*>(nodeptr->ToNativePointer(vm)->Value());
637             CHECK_NULL_RETURN(frameNode, nullptr);
638             return AceType::Claim(frameNode);
639         });
640     return panda::JSValueRef::Undefined(vm);
641 }
642 
SetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)643 ArkUINativeModuleValue SliderBridge::SetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
644 {
645     EcmaVM* vm = runtimeCallInfo->GetVM();
646     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
647     int32_t argsNumber = runtimeCallInfo->GetArgsNumber();
648     if (argsNumber != NUM_2) {
649         return panda::JSValueRef::Undefined(vm);
650     }
651     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
652     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(NUM_1);
653     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
654     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
655     CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
656     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
657         GetArkUINodeModifiers()->getToggleModifier()->resetToggleOnChange(nativeNode);
658         return panda::JSValueRef::Undefined(vm);
659     }
660     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
661     std::function<void(float, int32_t)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
662                                                        float number, int32_t mode) {
663         panda::LocalScope pandaScope(vm);
664         panda::TryCatch trycatch(vm);
665         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
666 
667         panda::Local<panda::NumberRef> numberParam = panda::NumberRef::New(vm, number);
668         panda::Local<panda::NumberRef> modeParam = panda::NumberRef::New(vm, mode);
669         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = { numberParam, modeParam };
670         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
671     };
672     GetArkUINodeModifiers()->getSliderModifier()->setOnChange(nativeNode, reinterpret_cast<void*>(&callback));
673     return panda::JSValueRef::Undefined(vm);
674 }
675 
ResetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)676 ArkUINativeModuleValue SliderBridge::ResetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
677 {
678     EcmaVM* vm = runtimeCallInfo->GetVM();
679     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
680     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
681     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
682     GetArkUINodeModifiers()->getSliderModifier()->resetOnChange(nativeNode);
683     return panda::JSValueRef::Undefined(vm);
684 }
685 
686 struct SliderOptions {
687     double value = 0;
688     double min = 0;
689     double max = 100;
690     double step = 1;
691     bool reverse = false;
692     int32_t style = 0;
693     int32_t direction = 1;
694 };
695 
GetStep(SliderOptions & options)696 static void GetStep(SliderOptions& options)
697 {
698     if (LessOrEqual(options.step, 0.0) || options.step > options.max - options.min) {
699         options.step = 1;
700     }
701 }
702 
GetValue(SliderOptions & options)703 static void GetValue(SliderOptions& options)
704 {
705     if (options.value < options.min) {
706         options.value = options.min;
707     }
708 
709     if (options.value > options.max) {
710         options.value = options.max;
711     }
712 }
713 
ParseStyleOptions(ArkUIRuntimeCallInfo * runtimeCallInfo,SliderOptions & options)714 static void ParseStyleOptions(ArkUIRuntimeCallInfo* runtimeCallInfo, SliderOptions& options)
715 {
716     EcmaVM* vm = runtimeCallInfo->GetVM();
717     CHECK_NULL_VOID(vm);
718     Local<JSValueRef> styleArg = runtimeCallInfo->GetCallArgRef(5);     // 5: parameter index
719     Local<JSValueRef> directionArg = runtimeCallInfo->GetCallArgRef(6); // 6: parameter index
720     Local<JSValueRef> reverseArg = runtimeCallInfo->GetCallArgRef(7);   // 7: parameter index
721 
722     if (!reverseArg.IsNull() && !reverseArg->IsUndefined() && reverseArg->IsBoolean()) {
723         options.reverse = reverseArg->ToBoolean(vm)->Value();
724     }
725     if (!styleArg.IsNull() && !styleArg->IsUndefined() && styleArg->IsNumber()) {
726         auto tempStyle = styleArg->Int32Value(vm);
727         if (tempStyle >= static_cast<int32_t>(SliderMode::OUTSET) &&
728                 tempStyle <= static_cast<int32_t>(SliderMode::CAPSULE)) {
729             options.style = tempStyle;
730         }
731     }
732     if (!directionArg.IsNull() && !directionArg->IsUndefined() && directionArg->IsNumber()) {
733         auto tempDirection = directionArg->Int32Value(vm);
734         if (tempDirection >= static_cast<int32_t>(Axis::VERTICAL) &&
735                 tempDirection <= static_cast<int32_t>(Axis::HORIZONTAL)) {
736             options.direction = tempDirection;
737         }
738     }
739 }
740 
ParseOptions(ArkUIRuntimeCallInfo * runtimeCallInfo,SliderOptions & options)741 static void ParseOptions(ArkUIRuntimeCallInfo* runtimeCallInfo, SliderOptions& options)
742 {
743     static const double valueMin = -1000000.0f;
744     options.value = valueMin;
745     EcmaVM* vm = runtimeCallInfo->GetVM();
746     CHECK_NULL_VOID(vm);
747     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1); // 1: parameter index
748     Local<JSValueRef> minArg = runtimeCallInfo->GetCallArgRef(2);   // 2: parameter index
749     Local<JSValueRef> maxArg = runtimeCallInfo->GetCallArgRef(3);   // 3: parameter index
750     Local<JSValueRef> stepArg = runtimeCallInfo->GetCallArgRef(4);  // 4: parameter index
751     if (!valueArg.IsNull() && !valueArg->IsUndefined() && valueArg->IsNumber()) {
752         options.value = valueArg->ToNumber(vm)->Value();
753     }
754     if (!minArg.IsNull() && !minArg->IsUndefined() && minArg->IsNumber()) {
755         options.min = minArg->ToNumber(vm)->Value();
756     }
757     if (!maxArg.IsNull() && !maxArg->IsUndefined() && maxArg->IsNumber()) {
758         options.max = maxArg->ToNumber(vm)->Value();
759     }
760     if (!stepArg.IsNull() && !stepArg->IsUndefined() && stepArg->IsNumber()) {
761         options.step = stepArg->ToNumber(vm)->Value();
762     }
763 
764     if (GreatOrEqual(options.min, options.max)) {
765         options.min = SLIDER_MIN;
766         options.max = SLIDER_MAX;
767     }
768 
769     GetStep(options);
770     GetValue(options);
771     ParseStyleOptions(runtimeCallInfo, options);
772 }
773 
SetSliderOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)774 ArkUINativeModuleValue SliderBridge::SetSliderOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
775 {
776     auto sliderModifier = GetArkUINodeModifiers()->getSliderModifier();
777     EcmaVM* vm = runtimeCallInfo->GetVM();
778     CHECK_EQUAL_RETURN(runtimeCallInfo->GetArgsNumber() != NUM_8, true, panda::JSValueRef::Undefined(vm));
779     SliderOptions options;
780     ParseOptions(runtimeCallInfo, options);
781     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
782     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
783     auto pointer = nodeArg->ToNativePointer(vm);
784     CHECK_EQUAL_RETURN(pointer.IsEmpty(), true, panda::JSValueRef::Undefined(vm));
785     auto nativeNode = nodePtr(pointer->Value());
786     CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
787     sliderModifier->setStep(nativeNode, options.step);
788     sliderModifier->setMinLabel(nativeNode, options.min);
789     sliderModifier->setMaxLabel(nativeNode, options.max);
790     sliderModifier->setSliderValue(nativeNode, options.value);
791     sliderModifier->setSliderStyle(nativeNode, options.style);
792     sliderModifier->setDirection(nativeNode, options.direction);
793     sliderModifier->setReverse(nativeNode, options.reverse);
794     return panda::JSValueRef::Undefined(vm);
795 }
796 
SetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)797 ArkUINativeModuleValue SliderBridge::SetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
798 {
799     EcmaVM* vm = runtimeCallInfo->GetVM();
800     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
801     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
802     Local<JSValueRef> enableHapticFeedbackArg = runtimeCallInfo->GetCallArgRef(NUM_1);
803     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
804     CHECK_NULL_RETURN(nativeNode, panda::NativePointerRef::New(vm, nullptr));
805     auto nodeModifiers = GetArkUINodeModifiers();
806     CHECK_NULL_RETURN(nodeModifiers, panda::NativePointerRef::New(vm, nullptr));
807     auto SliderModifier = nodeModifiers->getSliderModifier();
808     CHECK_NULL_RETURN(SliderModifier, panda::NativePointerRef::New(vm, nullptr));
809     if (enableHapticFeedbackArg->IsBoolean()) {
810         bool value = enableHapticFeedbackArg->ToBoolean(vm)->Value();
811         SliderModifier->setEnableHapticFeedback(nativeNode, value);
812     } else {
813         SliderModifier->resetEnableHapticFeedback(nativeNode);
814     }
815     return panda::JSValueRef::Undefined(vm);
816 }
817 
ResetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)818 ArkUINativeModuleValue SliderBridge::ResetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
819 {
820     EcmaVM* vm = runtimeCallInfo->GetVM();
821     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
822     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
823     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
824     CHECK_NULL_RETURN(nativeNode, panda::NativePointerRef::New(vm, nullptr));
825     auto nodeModifiers = GetArkUINodeModifiers();
826     CHECK_NULL_RETURN(nodeModifiers, panda::NativePointerRef::New(vm, nullptr));
827     auto SliderModifier = nodeModifiers->getSliderModifier();
828     CHECK_NULL_RETURN(SliderModifier, panda::NativePointerRef::New(vm, nullptr));
829     SliderModifier->resetEnableHapticFeedback(nativeNode);
830     return panda::JSValueRef::Undefined(vm);
831 }
832 } // namespace OHOS::Ace::NG
833