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 const char* SLIDER_NODEPTR_OF_UINODE = "nodePtr_";
JsSliderChangeCallback(panda::JsiRuntimeCallInfo * runtimeCallInfo)27 panda::Local<panda::JSValueRef> JsSliderChangeCallback(panda::JsiRuntimeCallInfo* runtimeCallInfo)
28 {
29 auto vm = runtimeCallInfo->GetVM();
30 int32_t argc = static_cast<int32_t>(runtimeCallInfo->GetArgsNumber());
31 if (argc != NUM_2) {
32 return panda::JSValueRef::Undefined(vm);
33 }
34 auto valueArg = runtimeCallInfo->GetCallArgRef(NUM_0);
35 auto modeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
36 if (!valueArg->IsNumber() || !modeArg->IsNumber()) {
37 return panda::JSValueRef::Undefined(vm);
38 }
39 double value = valueArg->ToNumber(vm)->Value();
40 int32_t mode = modeArg->ToNumber(vm)->Value();
41 auto ref = runtimeCallInfo->GetThisRef();
42 auto obj = ref->ToObject(vm);
43 if (obj->GetNativePointerFieldCount(vm) < NUM_1) {
44 return panda::JSValueRef::Undefined(vm);
45 }
46 auto frameNode = static_cast<FrameNode*>(obj->GetNativePointerField(vm, 0));
47 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
48 SliderModelNG::SetChangeValue(frameNode, value, mode);
49 return panda::JSValueRef::Undefined(vm);
50 }
51
SetShowTips(ArkUIRuntimeCallInfo * runtimeCallInfo)52 ArkUINativeModuleValue SliderBridge::SetShowTips(ArkUIRuntimeCallInfo* runtimeCallInfo)
53 {
54 EcmaVM* vm = runtimeCallInfo->GetVM();
55 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
56 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
57 Local<JSValueRef> showTipArg = runtimeCallInfo->GetCallArgRef(NUM_1);
58 Local<JSValueRef> contentArg = runtimeCallInfo->GetCallArgRef(NUM_2);
59 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
60
61 bool showTips = false;
62 if (showTipArg->IsBoolean()) {
63 showTips = showTipArg->ToBoolean(vm)->Value();
64 }
65
66 std::string content;
67 if (ArkTSUtils::ParseJsString(vm, contentArg, content)) {
68 GetArkUINodeModifiers()->getSliderModifier()->setShowTips(nativeNode, showTips, content.c_str());
69 } else {
70 GetArkUINodeModifiers()->getSliderModifier()->setShowTips(nativeNode, showTips, nullptr);
71 }
72 return panda::JSValueRef::Undefined(vm);
73 }
74
ResetShowTips(ArkUIRuntimeCallInfo * runtimeCallInfo)75 ArkUINativeModuleValue SliderBridge::ResetShowTips(ArkUIRuntimeCallInfo* runtimeCallInfo)
76 {
77 EcmaVM* vm = runtimeCallInfo->GetVM();
78 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
79 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
80 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
81 GetArkUINodeModifiers()->getSliderModifier()->resetShowTips(nativeNode);
82 return panda::JSValueRef::Undefined(vm);
83 }
84
SetSliderStepSize(ArkUIRuntimeCallInfo * runtimeCallInfo)85 ArkUINativeModuleValue SliderBridge::SetSliderStepSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
86 {
87 EcmaVM* vm = runtimeCallInfo->GetVM();
88 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
89 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
90 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
91 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
92 CalcDimension stepSize;
93 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, stepSize, false)) {
94 GetArkUINodeModifiers()->getSliderModifier()->resetSliderStepSize(nativeNode);
95 return panda::JSValueRef::Undefined(vm);
96 } else {
97 if (LessNotEqual(stepSize.Value(), 0.0)) {
98 GetArkUINodeModifiers()->getSliderModifier()->resetSliderStepSize(nativeNode);
99 return panda::JSValueRef::Undefined(vm);
100 }
101
102 GetArkUINodeModifiers()->getSliderModifier()->setSliderStepSize(
103 nativeNode, stepSize.Value(), static_cast<int>(stepSize.Unit()));
104 }
105
106 return panda::JSValueRef::Undefined(vm);
107 }
108
ResetSliderStepSize(ArkUIRuntimeCallInfo * runtimeCallInfo)109 ArkUINativeModuleValue SliderBridge::ResetSliderStepSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
110 {
111 EcmaVM* vm = runtimeCallInfo->GetVM();
112 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
113 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
114 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
115 GetArkUINodeModifiers()->getSliderModifier()->resetSliderStepSize(nativeNode);
116 return panda::JSValueRef::Undefined(vm);
117 }
118
SetBlockSize(ArkUIRuntimeCallInfo * runtimeCallInfo)119 ArkUINativeModuleValue SliderBridge::SetBlockSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
120 {
121 EcmaVM* vm = runtimeCallInfo->GetVM();
122 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
123 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
124 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
125 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
126 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
127
128 CalcDimension blockWidth;
129 CalcDimension blockHeight;
130 bool hasBlockWidth = ArkTSUtils::ParseJsDimensionVp(vm, secondArg, blockWidth);
131 bool hasBlockHeight = ArkTSUtils::ParseJsDimensionVp(vm, thirdArg, blockHeight);
132 if (!hasBlockWidth && !hasBlockHeight) {
133 GetArkUINodeModifiers()->getSliderModifier()->resetBlockSize(nativeNode);
134 return panda::JSValueRef::Undefined(vm);
135 }
136
137 GetArkUINodeModifiers()->getSliderModifier()->setBlockSize(nativeNode,
138 blockWidth.Value(), static_cast<int>(blockWidth.Unit()),
139 blockHeight.Value(), static_cast<int>(blockHeight.Unit()));
140 return panda::JSValueRef::Undefined(vm);
141 }
142
ResetBlockSize(ArkUIRuntimeCallInfo * runtimeCallInfo)143 ArkUINativeModuleValue SliderBridge::ResetBlockSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
144 {
145 EcmaVM* vm = runtimeCallInfo->GetVM();
146 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
147 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
148 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
149 GetArkUINodeModifiers()->getSliderModifier()->resetBlockSize(nativeNode);
150 return panda::JSValueRef::Undefined(vm);
151 }
152
SetTrackBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)153 ArkUINativeModuleValue SliderBridge::SetTrackBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
154 {
155 EcmaVM* vm = runtimeCallInfo->GetVM();
156 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
157 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
158 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
159 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
160
161 CalcDimension trackBorderRadius;
162 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, trackBorderRadius, true)) {
163 GetArkUINodeModifiers()->getSliderModifier()->resetTrackBorderRadius(nativeNode);
164 return panda::JSValueRef::Undefined(vm);
165 }
166
167 if (LessNotEqual(trackBorderRadius.Value(), 0.0)) {
168 GetArkUINodeModifiers()->getSliderModifier()->resetTrackBorderRadius(nativeNode);
169 return panda::JSValueRef::Undefined(vm);
170 }
171
172 GetArkUINodeModifiers()->getSliderModifier()->setTrackBorderRadius(nativeNode,
173 trackBorderRadius.Value(), static_cast<int>(trackBorderRadius.Unit()));
174 return panda::JSValueRef::Undefined(vm);
175 }
176
ResetTrackBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)177 ArkUINativeModuleValue SliderBridge::ResetTrackBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
178 {
179 EcmaVM* vm = runtimeCallInfo->GetVM();
180 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
181 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
182 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
183 GetArkUINodeModifiers()->getSliderModifier()->resetTrackBorderRadius(nativeNode);
184 return panda::JSValueRef::Undefined(vm);
185 }
186
SetStepColor(ArkUIRuntimeCallInfo * runtimeCallInfo)187 ArkUINativeModuleValue SliderBridge::SetStepColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
188 {
189 EcmaVM* vm = runtimeCallInfo->GetVM();
190 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
191 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
192 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
193 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
194 Color color;
195 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
196 GetArkUINodeModifiers()->getSliderModifier()->resetStepColor(nativeNode);
197 } else {
198 GetArkUINodeModifiers()->getSliderModifier()->setStepColor(nativeNode, color.GetValue());
199 }
200
201 return panda::JSValueRef::Undefined(vm);
202 }
203
ResetStepColor(ArkUIRuntimeCallInfo * runtimeCallInfo)204 ArkUINativeModuleValue SliderBridge::ResetStepColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
205 {
206 EcmaVM* vm = runtimeCallInfo->GetVM();
207 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
208 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
209 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
210 GetArkUINodeModifiers()->getSliderModifier()->resetStepColor(nativeNode);
211 return panda::JSValueRef::Undefined(vm);
212 }
213
SetBlockBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)214 ArkUINativeModuleValue SliderBridge::SetBlockBorderColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
215 {
216 EcmaVM* vm = runtimeCallInfo->GetVM();
217 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
218 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
219 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
220 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
221 Color color;
222 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
223 GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderColor(nativeNode);
224 } else {
225 GetArkUINodeModifiers()->getSliderModifier()->setBlockBorderColor(nativeNode, color.GetValue());
226 }
227 return panda::JSValueRef::Undefined(vm);
228 }
229
ResetBlockBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)230 ArkUINativeModuleValue SliderBridge::ResetBlockBorderColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
231 {
232 EcmaVM* vm = runtimeCallInfo->GetVM();
233 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
234 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
235 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
236 GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderColor(nativeNode);
237 return panda::JSValueRef::Undefined(vm);
238 }
239
SetBlockBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)240 ArkUINativeModuleValue SliderBridge::SetBlockBorderWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
241 {
242 EcmaVM* vm = runtimeCallInfo->GetVM();
243 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
244 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
245 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
246 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
247
248 CalcDimension blockBorderWidth;
249 if (!ArkTSUtils::ParseJsDimensionVp(vm, secondArg, blockBorderWidth)) {
250 GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderWidth(nativeNode);
251 return panda::JSValueRef::Undefined(vm);
252 }
253
254 if (LessNotEqual(blockBorderWidth.Value(), 0.0)) {
255 GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderWidth(nativeNode);
256 return panda::JSValueRef::Undefined(vm);
257 }
258
259 GetArkUINodeModifiers()->getSliderModifier()->setBlockBorderWidth(nativeNode,
260 blockBorderWidth.Value(), static_cast<int>(blockBorderWidth.Unit()));
261 return panda::JSValueRef::Undefined(vm);
262 }
263
ResetBlockBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)264 ArkUINativeModuleValue SliderBridge::ResetBlockBorderWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
265 {
266 EcmaVM* vm = runtimeCallInfo->GetVM();
267 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
268 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
269 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
270 GetArkUINodeModifiers()->getSliderModifier()->resetBlockBorderWidth(nativeNode);
271 return panda::JSValueRef::Undefined(vm);
272 }
273
SetBlockColor(ArkUIRuntimeCallInfo * runtimeCallInfo)274 ArkUINativeModuleValue SliderBridge::SetBlockColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
275 {
276 EcmaVM* vm = runtimeCallInfo->GetVM();
277 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
278 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
279 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
280 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
281 Color color;
282 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
283 GetArkUINodeModifiers()->getSliderModifier()->resetBlockColor(nativeNode);
284 } else {
285 GetArkUINodeModifiers()->getSliderModifier()->setBlockColor(nativeNode, color.GetValue());
286 }
287 return panda::JSValueRef::Undefined(vm);
288 }
289
ResetBlockColor(ArkUIRuntimeCallInfo * runtimeCallInfo)290 ArkUINativeModuleValue SliderBridge::ResetBlockColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
291 {
292 EcmaVM* vm = runtimeCallInfo->GetVM();
293 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
294 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
295 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
296 GetArkUINodeModifiers()->getSliderModifier()->resetBlockColor(nativeNode);
297 return panda::JSValueRef::Undefined(vm);
298 }
299
SetTrackBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)300 ArkUINativeModuleValue SliderBridge::SetTrackBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
301 {
302 EcmaVM* vm = runtimeCallInfo->GetVM();
303 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
304 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
305 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
306 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
307 Color color;
308 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
309 GetArkUINodeModifiers()->getSliderModifier()->resetTrackBackgroundColor(nativeNode);
310 } else {
311 GetArkUINodeModifiers()->getSliderModifier()->setTrackBackgroundColor(nativeNode, color.GetValue());
312 }
313 return panda::JSValueRef::Undefined(vm);
314 }
315
ResetTrackBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)316 ArkUINativeModuleValue SliderBridge::ResetTrackBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
317 {
318 EcmaVM* vm = runtimeCallInfo->GetVM();
319 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
320 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
321 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
322 GetArkUINodeModifiers()->getSliderModifier()->resetTrackBackgroundColor(nativeNode);
323 return panda::JSValueRef::Undefined(vm);
324 }
325
SetSelectColor(ArkUIRuntimeCallInfo * runtimeCallInfo)326 ArkUINativeModuleValue SliderBridge::SetSelectColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
327 {
328 EcmaVM* vm = runtimeCallInfo->GetVM();
329 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
330 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
331 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
332 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
333 Color color;
334 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
335 GetArkUINodeModifiers()->getSliderModifier()->resetSelectColor(nativeNode);
336 } else {
337 GetArkUINodeModifiers()->getSliderModifier()->setSelectColor(nativeNode, color.GetValue());
338 }
339 return panda::JSValueRef::Undefined(vm);
340 }
341
ResetSelectColor(ArkUIRuntimeCallInfo * runtimeCallInfo)342 ArkUINativeModuleValue SliderBridge::ResetSelectColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
343 {
344 EcmaVM* vm = runtimeCallInfo->GetVM();
345 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
346 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
347 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
348 GetArkUINodeModifiers()->getSliderModifier()->resetSelectColor(nativeNode);
349 return panda::JSValueRef::Undefined(vm);
350 }
351
SetShowSteps(ArkUIRuntimeCallInfo * runtimeCallInfo)352 ArkUINativeModuleValue SliderBridge::SetShowSteps(ArkUIRuntimeCallInfo* runtimeCallInfo)
353 {
354 EcmaVM* vm = runtimeCallInfo->GetVM();
355 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
356 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
357 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
358 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
359 bool flag = secondArg->ToBoolean(vm)->Value();
360 GetArkUINodeModifiers()->getSliderModifier()->setShowSteps(nativeNode, flag);
361 return panda::JSValueRef::Undefined(vm);
362 }
363
ResetShowSteps(ArkUIRuntimeCallInfo * runtimeCallInfo)364 ArkUINativeModuleValue SliderBridge::ResetShowSteps(ArkUIRuntimeCallInfo* runtimeCallInfo)
365 {
366 EcmaVM* vm = runtimeCallInfo->GetVM();
367 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
368 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
369 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
370 GetArkUINodeModifiers()->getSliderModifier()->resetShowSteps(nativeNode);
371 return panda::JSValueRef::Undefined(vm);
372 }
373
SetThickness(ArkUIRuntimeCallInfo * runtimeCallInfo)374 ArkUINativeModuleValue SliderBridge::SetThickness(ArkUIRuntimeCallInfo* runtimeCallInfo)
375 {
376 EcmaVM* vm = runtimeCallInfo->GetVM();
377 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
378 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
379 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
380 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
381
382 CalcDimension thickness;
383 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, thickness, true)) {
384 GetArkUINodeModifiers()->getSliderModifier()->resetThickness(nativeNode);
385 return panda::JSValueRef::Undefined(vm);
386 }
387
388 GetArkUINodeModifiers()->getSliderModifier()->setThickness(nativeNode,
389 thickness.Value(), static_cast<int>(thickness.Unit()));
390 return panda::JSValueRef::Undefined(vm);
391 }
392
ResetThickness(ArkUIRuntimeCallInfo * runtimeCallInfo)393 ArkUINativeModuleValue SliderBridge::ResetThickness(ArkUIRuntimeCallInfo* runtimeCallInfo)
394 {
395 EcmaVM* vm = runtimeCallInfo->GetVM();
396 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
397 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
398 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
399 GetArkUINodeModifiers()->getSliderModifier()->resetThickness(nativeNode);
400 return panda::JSValueRef::Undefined(vm);
401 }
402
SetBlockStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)403 ArkUINativeModuleValue SliderBridge::SetBlockStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
404 {
405 EcmaVM* vm = runtimeCallInfo->GetVM();
406 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
407 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
408 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
409 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
410 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
411 if (!info[1]->IsObject()) {
412 SliderBridge::ResetBlockStyle(runtimeCallInfo);
413 return panda::JSValueRef::Undefined(vm);
414 }
415 auto jsObj = Framework::JSRef<Framework::JSObject>::Cast(info[1]);
416 auto getType = jsObj->GetProperty("type");
417 if (getType->IsNull() || !getType->IsNumber()) {
418 SliderBridge::ResetBlockStyle(runtimeCallInfo);
419 return panda::JSValueRef::Undefined(vm);
420 }
421 auto type = static_cast<SliderModel::BlockStyleType>(getType->ToNumber<int32_t>());
422 if (type == SliderModel::BlockStyleType::IMAGE) {
423 std::string src;
424 auto image = jsObj->GetProperty("image");
425 if (!Framework::JSShapeAbstract::ParseJsMedia(image, src)) {
426 SliderBridge::ResetBlockStyle(runtimeCallInfo);
427 return panda::JSValueRef::Undefined(vm);
428 }
429 std::string bundleName;
430 std::string moduleName;
431 Framework::JSViewAbstract::GetJsMediaBundleInfo(image, bundleName, moduleName);
432 SliderModelNG::SetBlockImage(frameNode, src, bundleName, moduleName);
433 } else if (type == SliderModel::BlockStyleType::SHAPE) {
434 auto shape = jsObj->GetProperty("shape");
435 if (!shape->IsObject()) {
436 SliderBridge::ResetBlockStyle(runtimeCallInfo);
437 return panda::JSValueRef::Undefined(vm);
438 }
439 Framework::JSShapeAbstract* shapeAbstract =
440 Framework::JSRef<Framework::JSObject>::Cast(shape)->Unwrap<Framework::JSShapeAbstract>();
441 if (shapeAbstract == nullptr) {
442 SliderBridge::ResetBlockStyle(runtimeCallInfo);
443 return panda::JSValueRef::Undefined(vm);
444 }
445 SliderModelNG::SetBlockShape(frameNode, shapeAbstract->GetBasicShape());
446 }
447 SliderModelNG::SetBlockType(frameNode, type);
448 return panda::JSValueRef::Undefined(vm);
449 }
450
ResetBlockStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)451 ArkUINativeModuleValue SliderBridge::ResetBlockStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
452 {
453 EcmaVM* vm = runtimeCallInfo->GetVM();
454 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
455 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
456 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
457 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
458 SliderModelNG::ResetBlockType(frameNode);
459 SliderModelNG::ResetBlockImage(frameNode);
460 SliderModelNG::ResetBlockShape(frameNode);
461 return panda::JSValueRef::Undefined(vm);
462 }
463
SetValidSlideRange(ArkUIRuntimeCallInfo * runtimeCallInfo)464 ArkUINativeModuleValue SliderBridge::SetValidSlideRange(ArkUIRuntimeCallInfo* runtimeCallInfo)
465 {
466 EcmaVM* vm = runtimeCallInfo->GetVM();
467 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
468 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
469 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
470 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
471 if (!info[1]->IsObject()) {
472 GetArkUINodeModifiers()->getSliderModifier()->resetSliderValidSlideRange(nativeNode);
473 return panda::JSValueRef::Undefined(vm);
474 }
475 float from = std::numeric_limits<float>::infinity();
476 float to = std::numeric_limits<float>::infinity();
477 auto jsObj = Framework::JSRef<Framework::JSObject>::Cast(info[1]);
478 auto fromType = jsObj->GetProperty("from");
479 if (!fromType->IsEmpty() && fromType->IsNumber()) {
480 from = fromType->ToNumber<float>();
481 }
482 auto toType = jsObj->GetProperty("to");
483 if (!toType->IsEmpty() && toType->IsNumber()) {
484 to = toType->ToNumber<float>();
485 }
486 if ((std::isinf(from) && std::isinf(to)) || std::isnan(from) || std::isnan(to)) {
487 GetArkUINodeModifiers()->getSliderModifier()->resetSliderValidSlideRange(nativeNode);
488 return panda::JSValueRef::Undefined(vm);
489 }
490 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
491 SliderModelNG::SetValidSlideRange(frameNode, from, to);
492 return panda::JSValueRef::Undefined(vm);
493 }
494
ResetValidSlideRange(ArkUIRuntimeCallInfo * runtimeCallInfo)495 ArkUINativeModuleValue SliderBridge::ResetValidSlideRange(ArkUIRuntimeCallInfo* runtimeCallInfo)
496 {
497 EcmaVM* vm = runtimeCallInfo->GetVM();
498 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
499 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
500 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
501 GetArkUINodeModifiers()->getSliderModifier()->resetSliderValidSlideRange(nativeNode);
502 return panda::JSValueRef::Undefined(vm);
503 }
504
SetSelectedBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)505 ArkUINativeModuleValue SliderBridge::SetSelectedBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
506 {
507 EcmaVM* vm = runtimeCallInfo->GetVM();
508 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
509 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
510 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
511 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
512
513 CalcDimension borderRadius;
514 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, secondArg, borderRadius, true)) {
515 GetArkUINodeModifiers()->getSliderModifier()->resetSelectedBorderRadius(nativeNode);
516 return panda::JSValueRef::Undefined(vm);
517 }
518
519 if (LessNotEqual(borderRadius.Value(), 0.0)) {
520 GetArkUINodeModifiers()->getSliderModifier()->resetSelectedBorderRadius(nativeNode);
521 return panda::JSValueRef::Undefined(vm);
522 }
523
524 GetArkUINodeModifiers()->getSliderModifier()->setSelectedBorderRadius(nativeNode,
525 borderRadius.Value(), static_cast<int>(borderRadius.Unit()));
526 return panda::JSValueRef::Undefined(vm);
527 }
528
ResetSelectedBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)529 ArkUINativeModuleValue SliderBridge::ResetSelectedBorderRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
530 {
531 EcmaVM* vm = runtimeCallInfo->GetVM();
532 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
533 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
534 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
535 GetArkUINodeModifiers()->getSliderModifier()->resetSelectedBorderRadius(nativeNode);
536 return panda::JSValueRef::Undefined(vm);
537 }
538
SetInteractionMode(ArkUIRuntimeCallInfo * runtimeCallInfo)539 ArkUINativeModuleValue SliderBridge::SetInteractionMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
540 {
541 EcmaVM* vm = runtimeCallInfo->GetVM();
542 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
543 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
544 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
545 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
546 if (!secondArg->IsNumber()) {
547 GetArkUINodeModifiers()->getSliderModifier()->resetInteractionMode(nativeNode);
548 return panda::JSValueRef::Undefined(vm);
549 }
550 int32_t interactionMode = secondArg->Int32Value(vm);
551 GetArkUINodeModifiers()->getSliderModifier()->setInteractionMode(nativeNode, interactionMode);
552 return panda::JSValueRef::Undefined(vm);
553 }
554
ResetInteractionMode(ArkUIRuntimeCallInfo * runtimeCallInfo)555 ArkUINativeModuleValue SliderBridge::ResetInteractionMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
556 {
557 EcmaVM* vm = runtimeCallInfo->GetVM();
558 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
559 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
560 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
561 GetArkUINodeModifiers()->getSliderModifier()->resetInteractionMode(nativeNode);
562 return panda::JSValueRef::Undefined(vm);
563 }
564
SetMinResponsiveDistance(ArkUIRuntimeCallInfo * runtimeCallInfo)565 ArkUINativeModuleValue SliderBridge::SetMinResponsiveDistance(ArkUIRuntimeCallInfo* runtimeCallInfo)
566 {
567 EcmaVM* vm = runtimeCallInfo->GetVM();
568 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
569 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
570 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
571 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
572 if (!secondArg->IsNumber()) {
573 GetArkUINodeModifiers()->getSliderModifier()->resetMinResponsiveDistance(nativeNode);
574 return panda::JSValueRef::Undefined(vm);
575 }
576 float distance = secondArg->ToNumber(vm)->Value();
577 GetArkUINodeModifiers()->getSliderModifier()->setMinResponsiveDistance(nativeNode, distance);
578 return panda::JSValueRef::Undefined(vm);
579 }
580
ResetMinResponsiveDistance(ArkUIRuntimeCallInfo * runtimeCallInfo)581 ArkUINativeModuleValue SliderBridge::ResetMinResponsiveDistance(ArkUIRuntimeCallInfo* runtimeCallInfo)
582 {
583 EcmaVM* vm = runtimeCallInfo->GetVM();
584 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
585 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
586 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
587 GetArkUINodeModifiers()->getSliderModifier()->resetMinResponsiveDistance(nativeNode);
588 return panda::JSValueRef::Undefined(vm);
589 }
590
SetContentModifierBuilder(ArkUIRuntimeCallInfo * runtimeCallInfo)591 ArkUINativeModuleValue SliderBridge::SetContentModifierBuilder(ArkUIRuntimeCallInfo* runtimeCallInfo)
592 {
593 EcmaVM* vm = runtimeCallInfo->GetVM();
594 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
595 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
596 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
597 auto* frameNode = reinterpret_cast<FrameNode*>(firstArg->ToNativePointer(vm)->Value());
598 if (!secondArg->IsObject(vm)) {
599 SliderModelNG::SetBuilderFunc(frameNode, nullptr);
600 return panda::JSValueRef::Undefined(vm);
601 }
602 panda::CopyableGlobal<panda::ObjectRef> obj(vm, secondArg);
603 auto containerId = Container::CurrentId();
604 SliderModelNG::SetBuilderFunc(frameNode,
605 [vm, frameNode, obj = std::move(obj), containerId](
606 SliderConfiguration config) -> RefPtr<FrameNode> {
607 ContainerScope scope(containerId);
608 auto context = ArkTSUtils::GetContext(vm);
609 const char* keyOfSlider[] = { "value", "min", "max", "step", "enabled", "triggerChange" };
610 Local<JSValueRef> valuesOfSlider[] = { panda::NumberRef::New(vm, config.value_),
611 panda::NumberRef::New(vm, config.min_), panda::NumberRef::New(vm, config.max_),
612 panda::NumberRef::New(vm, config.step_), panda::BooleanRef::New(vm, config.enabled_),
613 panda::FunctionRef::New(vm, JsSliderChangeCallback) };
614 auto slider = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keyOfSlider),
615 keyOfSlider, valuesOfSlider);
616 slider->SetNativePointerFieldCount(vm, 1);
617 slider->SetNativePointerField(vm, 0, static_cast<void*>(frameNode));
618 panda::Local<panda::JSValueRef> params[NUM_2] = { context, slider };
619 LocalScope pandaScope(vm);
620 panda::TryCatch trycatch(vm);
621 auto jsObject = obj.ToLocal();
622 auto makeFunc = jsObject->Get(vm, panda::StringRef::NewFromUtf8(vm, "makeContentModifierNode"));
623 CHECK_EQUAL_RETURN(makeFunc->IsFunction(vm), false, nullptr);
624 panda::Local<panda::FunctionRef> func = makeFunc;
625 auto result = func->Call(vm, jsObject, params, NUM_2);
626 JSNApi::ExecutePendingJob(vm);
627 CHECK_EQUAL_RETURN(result.IsEmpty() || trycatch.HasCaught() || !result->IsObject(vm), true, nullptr);
628 auto resultObj = result->ToObject(vm);
629 panda::Local<panda::JSValueRef> nodeptr =
630 resultObj->Get(vm, panda::StringRef::NewFromUtf8(vm, SLIDER_NODEPTR_OF_UINODE));
631 CHECK_EQUAL_RETURN(nodeptr.IsEmpty() || nodeptr->IsUndefined() || nodeptr->IsNull(), true, nullptr);
632 auto* frameNode = reinterpret_cast<FrameNode*>(nodeptr->ToNativePointer(vm)->Value());
633 CHECK_NULL_RETURN(frameNode, nullptr);
634 return AceType::Claim(frameNode);
635 });
636 return panda::JSValueRef::Undefined(vm);
637 }
638 } // namespace OHOS::Ace::NG
639