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