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_swiper_bridge.h"
16
17 #include <string>
18
19 #include "base/geometry/calc_dimension.h"
20 #include "base/geometry/dimension.h"
21 #include "base/log/log_wrapper.h"
22 #include "base/utils/utils.h"
23 #include "base/log/ace_scoring_log.h"
24 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
25 #include "bridge/declarative_frontend/engine/functions/js_swiper_function.h"
26 #include "bridge/declarative_frontend/jsview/js_indicator.h"
27 #include "bridge/declarative_frontend/jsview/js_swiper.h"
28 #include "core/components_ng/pattern/swiper/swiper_model_ng.h"
29
30 namespace OHOS::Ace::NG {
31 namespace {
32 constexpr int32_t CALL_ARG_NODE_INDEX = 0;
33 constexpr int32_t CALL_ARG_VALUE_INDEX = 1;
34 constexpr int32_t CALL_ARG_TYPE_INDEX = 2;
35 constexpr int32_t DISPLAY_ARROW_VALUE = 1;
36 constexpr int32_t ARROW_IS_SHOW_BACKGROUND = 2;
37 constexpr int32_t ARROW_IS_SIDE_BAR_MIDDLE = 3;
38 constexpr int32_t ARROW_BACKGROUND_SIZE = 4;
39 constexpr int32_t ARROW_BACKGROUND_COLOR = 5;
40 constexpr int32_t ARROW_SIZE = 6;
41 constexpr int32_t ARROW_COLOR = 7;
42 constexpr int32_t DISPLAY_ARROW_IS_HOVER_SHOW_INDEX = 8;
43 constexpr int32_t INDICATOR_VALUE_INDEX = 2;
44 constexpr int32_t DIGIT_INDICATOR_FONT_COLOR = 2;
45 constexpr int32_t DIGIT_INDICATOR_SELECTED_FONT_COLOR = 3;
46 constexpr int32_t DIGIT_INDICATOR_DIGIT_FONT_SIZE = 4;
47 constexpr int32_t DIGIT_INDICATOR_DIGIT_FONT_WEIGHT = 5;
48 constexpr int32_t DIGIT_INDICATOR_SELECTED_DIGIT_FONT_SIZE = 6;
49 constexpr int32_t DIGIT_INDICATOR_SELECTED_DIGIT_FONT_WEIGHT = 7;
50 constexpr int32_t DIGIT_INDICATOR_LEFT = 8;
51 constexpr int32_t DIGIT_INDICATOR_TOP = 9;
52 constexpr int32_t DIGIT_INDICATOR_RIGHT = 10;
53 constexpr int32_t DIGIT_INDICATOR_BOTTOM = 11;
54 constexpr int32_t DIGIT_INDICATOR_IGNORE_SIZE = 12;
55 constexpr int32_t DIGIT_INDICATOR_SET_IGNORE_SIZE = 13;
56 constexpr int32_t DOT_INDICATOR_ITEM_WIDTH = 2;
57 constexpr int32_t DOT_INDICATOR_ITEM_HEIGHT = 3;
58 constexpr int32_t DOT_INDICATOR_SELECTED_ITEM_WIDTH = 4;
59 constexpr int32_t DOT_INDICATOR_SELECTED_ITEM_HEIGHT = 5;
60 constexpr int32_t DOT_INDICATOR_MASK = 6;
61 constexpr int32_t DOT_INDICATOR_COLOR = 7;
62 constexpr int32_t DOT_INDICATOR_SELECTED_COLOR = 8;
63 constexpr int32_t DOT_INDICATOR_LEFT = 9;
64 constexpr int32_t DOT_INDICATOR_TOP = 10;
65 constexpr int32_t DOT_INDICATOR_RIGHT = 11;
66 constexpr int32_t DOT_INDICATOR_BOTTOM = 12;
67 constexpr int32_t DOT_INDICATOR_MAX_DISPLAY_COUNT = 13;
68 constexpr int32_t DOT_INDICATOR_SPACE = 14;
69 constexpr int32_t DOT_INDICATOR_IGNORE_SIZE = 15;
70 constexpr int32_t DOT_INDICATOR_SET_IGNORE_SIZE = 16;
71 constexpr double DEFAULT_PERCENT_VALUE = 100.0;
72 constexpr int32_t DEFAULT_ANIMATION_MODE = 0;
73 constexpr int32_t STOP_WHEN_TOUCHED = 2;
74 } // namespace
75
SetSwiperInitialize(ArkUIRuntimeCallInfo * runtimeCallInfo)76 ArkUINativeModuleValue SwiperBridge::SetSwiperInitialize(ArkUIRuntimeCallInfo* runtimeCallInfo)
77 {
78 EcmaVM* vm = runtimeCallInfo->GetVM();
79 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
80 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
81 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
82 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
83
84 auto nodePtr = GetArkUINodeModifiers()->getSwiperModifier()->getSwiperController(nativeNode);
85 auto node = AceType::Claim(reinterpret_cast<OHOS::Ace::SwiperController*>(nodePtr));
86
87 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
88 Framework::JSSwiperController* jsController =
89 Framework::JSRef<Framework::JSObject>::Cast(info[1])->Unwrap<Framework::JSSwiperController>();
90 if (jsController) {
91 jsController->SetInstanceId(Container::CurrentId());
92 jsController->SetController(node);
93 }
94 return panda::JSValueRef::Undefined(vm);
95 }
ResetSwiperInitialize(ArkUIRuntimeCallInfo * runtimeCallInfo)96 ArkUINativeModuleValue SwiperBridge::ResetSwiperInitialize(ArkUIRuntimeCallInfo* runtimeCallInfo)
97 {
98 EcmaVM* vm = runtimeCallInfo->GetVM();
99 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
100 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
101 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
102 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
103 GetArkUINodeModifiers()->getSwiperModifier()->getSwiperController(nativeNode);
104 return panda::JSValueRef::Undefined(vm);
105 }
SetSwiperNextMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)106 ArkUINativeModuleValue SwiperBridge::SetSwiperNextMargin(ArkUIRuntimeCallInfo* runtimeCallInfo)
107 {
108 EcmaVM* vm = runtimeCallInfo->GetVM();
109 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
110 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
111 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
112 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
113 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
114 Ace::CalcDimension nextMargin;
115 if (valueArg->IsUndefined() || valueArg->IsNull() ||
116 !ArkTSUtils::ParseJsDimension(vm, valueArg, nextMargin, DimensionUnit::VP) ||
117 LessNotEqual(nextMargin.Value(), 0.0)) {
118 nextMargin.SetValue(0.0);
119 }
120 int32_t nextMarginUnit = static_cast<int32_t>(nextMargin.Unit());
121 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperNextMargin(
122 nativeNode, nextMargin.Value(), nextMarginUnit, 0);
123 return panda::JSValueRef::Undefined(vm);
124 }
ResetSwiperNextMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)125 ArkUINativeModuleValue SwiperBridge::ResetSwiperNextMargin(ArkUIRuntimeCallInfo* runtimeCallInfo)
126 {
127 EcmaVM* vm = runtimeCallInfo->GetVM();
128 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
129 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
130 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
131 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
132 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperNextMargin(nativeNode);
133 return panda::JSValueRef::Undefined(vm);
134 }
SetSwiperPrevMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)135 ArkUINativeModuleValue SwiperBridge::SetSwiperPrevMargin(ArkUIRuntimeCallInfo* runtimeCallInfo)
136 {
137 EcmaVM* vm = runtimeCallInfo->GetVM();
138 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
139 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
140 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
141 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
142 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
143 Ace::CalcDimension prevMargin;
144 if (valueArg->IsUndefined() || valueArg->IsNull() ||
145 !ArkTSUtils::ParseJsDimension(vm, valueArg, prevMargin, DimensionUnit::VP) ||
146 LessNotEqual(prevMargin.Value(), 0.0)) {
147 prevMargin.SetValue(0.0);
148 }
149 int32_t prevMarginUnit = static_cast<int32_t>(prevMargin.Unit());
150 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperPrevMargin(
151 nativeNode, prevMargin.Value(), prevMarginUnit, 0);
152 return panda::JSValueRef::Undefined(vm);
153 }
ResetSwiperPrevMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)154 ArkUINativeModuleValue SwiperBridge::ResetSwiperPrevMargin(ArkUIRuntimeCallInfo* runtimeCallInfo)
155 {
156 EcmaVM* vm = runtimeCallInfo->GetVM();
157 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
158 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
159 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
160 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
161 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperPrevMargin(nativeNode);
162 return panda::JSValueRef::Undefined(vm);
163 }
164
SetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)165 ArkUINativeModuleValue SwiperBridge::SetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
166 {
167 EcmaVM* vm = runtimeCallInfo->GetVM();
168 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
169 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
170 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
171 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
172 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
173 if (valueArg->IsNumber()) {
174 int32_t index = valueArg->Int32Value(vm);
175 int32_t values[1] = { 0 };
176 values[0] = index;
177 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperNestedScroll(nativeNode, &values);
178 } else {
179 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperNestedScroll(nativeNode);
180 }
181 return panda::JSValueRef::Undefined(vm);
182 }
183
ResetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)184 ArkUINativeModuleValue SwiperBridge::ResetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
185 {
186 EcmaVM* vm = runtimeCallInfo->GetVM();
187 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
188 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
189 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
190 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
191 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperNestedScroll(nativeNode);
192 return panda::JSValueRef::Undefined(vm);
193 }
194
SetIndicatorInteractive(ArkUIRuntimeCallInfo * runtimeCallInfo)195 ArkUINativeModuleValue SwiperBridge::SetIndicatorInteractive(ArkUIRuntimeCallInfo* runtimeCallInfo)
196 {
197 EcmaVM* vm = runtimeCallInfo->GetVM();
198 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
199 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
200 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
201 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
202 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
203 bool interactive = valueArg->ToBoolean(vm)->Value();
204 GetArkUINodeModifiers()->getSwiperModifier()->setIndicatorInteractive(nativeNode, interactive);
205 return panda::JSValueRef::Undefined(vm);
206 }
207
ResetIndicatorInteractive(ArkUIRuntimeCallInfo * runtimeCallInfo)208 ArkUINativeModuleValue SwiperBridge::ResetIndicatorInteractive(ArkUIRuntimeCallInfo* runtimeCallInfo)
209 {
210 EcmaVM* vm = runtimeCallInfo->GetVM();
211 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
212 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
213 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
214 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
215 GetArkUINodeModifiers()->getSwiperModifier()->resetIndicatorInteractive(nativeNode);
216 return panda::JSValueRef::Undefined(vm);
217 }
218
SetSwiperDisplayCount(ArkUIRuntimeCallInfo * runtimeCallInfo)219 ArkUINativeModuleValue SwiperBridge::SetSwiperDisplayCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
220 {
221 EcmaVM* vm = runtimeCallInfo->GetVM();
222 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
223 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
224 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
225 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
226 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
227 if (valueArg->IsNumber() || valueArg->IsString(vm)) {
228 Local<JSValueRef> typeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_TYPE_INDEX);
229 std::string displayCountValue;
230 std::string type = typeArg->ToString(vm)->ToString(vm);
231 if (type == "number") {
232 displayCountValue = std::to_string(valueArg->Int32Value(vm));
233 } else {
234 displayCountValue = valueArg->ToString(vm)->ToString(vm);
235 }
236 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperDisplayCount(
237 nativeNode, displayCountValue.c_str(), type.c_str());
238 } else {
239 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDisplayCount(nativeNode);
240 }
241 return panda::JSValueRef::Undefined(vm);
242 }
ResetSwiperDisplayCount(ArkUIRuntimeCallInfo * runtimeCallInfo)243 ArkUINativeModuleValue SwiperBridge::ResetSwiperDisplayCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
244 {
245 EcmaVM* vm = runtimeCallInfo->GetVM();
246 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
247 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
248 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
249 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
250 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDisplayCount(nativeNode);
251 return panda::JSValueRef::Undefined(vm);
252 }
253
SetSwiperSwipeByGroup(ArkUIRuntimeCallInfo * runtimeCallInfo)254 ArkUINativeModuleValue SwiperBridge::SetSwiperSwipeByGroup(ArkUIRuntimeCallInfo* runtimeCallInfo)
255 {
256 EcmaVM* vm = runtimeCallInfo->GetVM();
257 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
258 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
259 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
260 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
261 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
262 bool swipeByGroup = valueArg->ToBoolean(vm)->Value();
263 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperSwipeByGroup(nativeNode, swipeByGroup);
264 return panda::JSValueRef::Undefined(vm);
265 }
266
ResetSwiperSwipeByGroup(ArkUIRuntimeCallInfo * runtimeCallInfo)267 ArkUINativeModuleValue SwiperBridge::ResetSwiperSwipeByGroup(ArkUIRuntimeCallInfo* runtimeCallInfo)
268 {
269 EcmaVM* vm = runtimeCallInfo->GetVM();
270 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
271 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
272 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
273 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
274 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperSwipeByGroup(nativeNode);
275 return panda::JSValueRef::Undefined(vm);
276 }
GetDimensionUnitString(DimensionUnit unit)277 std::string GetDimensionUnitString(DimensionUnit unit)
278 {
279 switch (unit) {
280 case DimensionUnit::VP:
281 return "vp";
282 case DimensionUnit::PX:
283 return "px";
284 case DimensionUnit::FP:
285 return "fp";
286 case DimensionUnit::CALC:
287 return "calc";
288 default:
289 return "px";
290 }
291 }
SetSwiperDisplayArrow(ArkUIRuntimeCallInfo * runtimeCallInfo)292 ArkUINativeModuleValue SwiperBridge::SetSwiperDisplayArrow(ArkUIRuntimeCallInfo* runtimeCallInfo)
293 {
294 EcmaVM* vm = runtimeCallInfo->GetVM();
295 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
296 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
297 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
298 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
299 Local<JSValueRef> displayArrowValue = runtimeCallInfo->GetCallArgRef(DISPLAY_ARROW_VALUE);
300 Local<JSValueRef> showBackground = runtimeCallInfo->GetCallArgRef(ARROW_IS_SHOW_BACKGROUND);
301 Local<JSValueRef> isSidebarMiddle = runtimeCallInfo->GetCallArgRef(ARROW_IS_SIDE_BAR_MIDDLE);
302 Local<JSValueRef> backgroundSize = runtimeCallInfo->GetCallArgRef(ARROW_BACKGROUND_SIZE);
303 Local<JSValueRef> backgroundColor = runtimeCallInfo->GetCallArgRef(ARROW_BACKGROUND_COLOR);
304 Local<JSValueRef> arrowSize = runtimeCallInfo->GetCallArgRef(ARROW_SIZE);
305 Local<JSValueRef> arrowColor = runtimeCallInfo->GetCallArgRef(ARROW_COLOR);
306 Local<JSValueRef> isHoverShow = runtimeCallInfo->GetCallArgRef(DISPLAY_ARROW_IS_HOVER_SHOW_INDEX);
307 std::string displayArrowValueStr = std::to_string(displayArrowValue->Int32Value(vm));
308 std::string showBackgroundStr = "2";
309 if (!showBackground->IsUndefined()) {
310 showBackgroundStr = showBackground->ToBoolean(vm)->Value() ? "1" : "0";
311 }
312 std::string isSidebarMiddleStr = "2";
313 if (!isSidebarMiddle->IsUndefined()) {
314 isSidebarMiddleStr = isSidebarMiddle->ToBoolean(vm)->Value() ? "1" : "0";
315 }
316 CalcDimension lengthValue;
317 Color color;
318 std::string backgroundSizeStr =
319 ArkTSUtils::ParseJsDimension(vm, backgroundSize, lengthValue, DimensionUnit::VP, false)
320 ? std::to_string(lengthValue.Value()) + GetDimensionUnitString(lengthValue.Unit())
321 : "-";
322 std::string backgroundColorStr =
323 ArkTSUtils::ParseJsColorAlpha(vm, backgroundColor, color) ? std::to_string(color.GetValue()) : "-";
324 std::string arrowSizeStr = ArkTSUtils::ParseJsDimensionNG(vm, arrowSize, lengthValue, DimensionUnit::VP, false)
325 ? std::to_string(lengthValue.Value()) + GetDimensionUnitString(lengthValue.Unit())
326 : "-";
327 std::string arrowColorStr =
328 ArkTSUtils::ParseJsColorAlpha(vm, arrowColor, color) ? std::to_string(color.GetValue()) : "-";
329 std::string isHoverShowStr = "2";
330 if (!isHoverShow->IsUndefined()) {
331 isHoverShowStr = isHoverShow->ToBoolean(vm)->Value() ? "1" : "0";
332 }
333 std::string displayArrowStr = displayArrowValueStr + "|" + showBackgroundStr + "|" + isSidebarMiddleStr + "|" +
334 backgroundSizeStr + "|" + backgroundColorStr + "|" + arrowSizeStr + "|" +
335 arrowColorStr + "|" + isHoverShowStr + "|";
336 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperDisplayArrow(nativeNode, displayArrowStr.c_str());
337 return panda::JSValueRef::Undefined(vm);
338 }
ResetSwiperDisplayArrow(ArkUIRuntimeCallInfo * runtimeCallInfo)339 ArkUINativeModuleValue SwiperBridge::ResetSwiperDisplayArrow(ArkUIRuntimeCallInfo* runtimeCallInfo)
340 {
341 EcmaVM* vm = runtimeCallInfo->GetVM();
342 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
343 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
344 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
345 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
346 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDisplayArrow(nativeNode);
347 return panda::JSValueRef::Undefined(vm);
348 }
SetSwiperCurve(ArkUIRuntimeCallInfo * runtimeCallInfo)349 ArkUINativeModuleValue SwiperBridge::SetSwiperCurve(ArkUIRuntimeCallInfo* runtimeCallInfo)
350 {
351 EcmaVM* vm = runtimeCallInfo->GetVM();
352 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
353 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
354 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
355 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
356 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
357 if (valueArg->IsString(vm)) {
358 std::string curve = valueArg->ToString(vm)->ToString(vm);
359 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperCurve(nativeNode, curve.c_str());
360 } else {
361 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperCurve(nativeNode);
362 }
363 return panda::JSValueRef::Undefined(vm);
364 }
ResetSwiperCurve(ArkUIRuntimeCallInfo * runtimeCallInfo)365 ArkUINativeModuleValue SwiperBridge::ResetSwiperCurve(ArkUIRuntimeCallInfo* runtimeCallInfo)
366 {
367 EcmaVM* vm = runtimeCallInfo->GetVM();
368 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
369 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
370 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
371 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
372 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperCurve(nativeNode);
373 return panda::JSValueRef::Undefined(vm);
374 }
SetSwiperDisableSwipe(ArkUIRuntimeCallInfo * runtimeCallInfo)375 ArkUINativeModuleValue SwiperBridge::SetSwiperDisableSwipe(ArkUIRuntimeCallInfo* runtimeCallInfo)
376 {
377 EcmaVM* vm = runtimeCallInfo->GetVM();
378 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
379 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
380 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
381 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
382 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
383 if (valueArg->IsBoolean()) {
384 bool disableswipe = valueArg->ToBoolean(vm)->Value();
385 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperDisableSwipe(nativeNode, disableswipe);
386 } else {
387 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDisableSwipe(nativeNode);
388 }
389 return panda::JSValueRef::Undefined(vm);
390 }
ResetSwiperDisableSwipe(ArkUIRuntimeCallInfo * runtimeCallInfo)391 ArkUINativeModuleValue SwiperBridge::ResetSwiperDisableSwipe(ArkUIRuntimeCallInfo* runtimeCallInfo)
392 {
393 EcmaVM* vm = runtimeCallInfo->GetVM();
394 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
395 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
396 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
397 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
398 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDisableSwipe(nativeNode);
399 return panda::JSValueRef::Undefined(vm);
400 }
SetSwiperEffectMode(ArkUIRuntimeCallInfo * runtimeCallInfo)401 ArkUINativeModuleValue SwiperBridge::SetSwiperEffectMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
402 {
403 EcmaVM* vm = runtimeCallInfo->GetVM();
404 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
405 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
406 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
407 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
408 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
409 if (valueArg->IsNumber()) {
410 auto edgeEffect = valueArg->Int32Value(vm);
411 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperEffectMode(nativeNode, edgeEffect);
412 } else {
413 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperEffectMode(nativeNode);
414 }
415 return panda::JSValueRef::Undefined(vm);
416 }
ResetSwiperEffectMode(ArkUIRuntimeCallInfo * runtimeCallInfo)417 ArkUINativeModuleValue SwiperBridge::ResetSwiperEffectMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
418 {
419 EcmaVM* vm = runtimeCallInfo->GetVM();
420 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
421 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
422 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
423 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
424 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperEffectMode(nativeNode);
425 return panda::JSValueRef::Undefined(vm);
426 }
SetSwiperCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)427 ArkUINativeModuleValue SwiperBridge::SetSwiperCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
428 {
429 EcmaVM* vm = runtimeCallInfo->GetVM();
430 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
431 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
432 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
433 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
434 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
435 if (valueArg->IsNumber()) {
436 int32_t cachedCount = valueArg->Int32Value(vm);
437 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperCachedCount(nativeNode, cachedCount);
438 } else {
439 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperCachedCount(nativeNode);
440 }
441 return panda::JSValueRef::Undefined(vm);
442 }
ResetSwiperCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)443 ArkUINativeModuleValue SwiperBridge::ResetSwiperCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
444 {
445 EcmaVM* vm = runtimeCallInfo->GetVM();
446 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
447 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
448 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
449 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
450 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperCachedCount(nativeNode);
451 return panda::JSValueRef::Undefined(vm);
452 }
SetSwiperIsShown(ArkUIRuntimeCallInfo * runtimeCallInfo)453 ArkUINativeModuleValue SwiperBridge::SetSwiperIsShown(ArkUIRuntimeCallInfo* runtimeCallInfo)
454 {
455 EcmaVM* vm = runtimeCallInfo->GetVM();
456 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
457 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
458 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
459 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
460 bool isShown = valueArg->ToBoolean(vm)->Value();
461 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperIsShown(nativeNode, isShown);
462 return panda::JSValueRef::Undefined(vm);
463 }
ResetSwiperIsShown(ArkUIRuntimeCallInfo * runtimeCallInfo)464 ArkUINativeModuleValue SwiperBridge::ResetSwiperIsShown(ArkUIRuntimeCallInfo* runtimeCallInfo)
465 {
466 EcmaVM* vm = runtimeCallInfo->GetVM();
467 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
468 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
469 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
470 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperIsShown(nativeNode);
471 return panda::JSValueRef::Undefined(vm);
472 }
SetSwiperDisplayMode(ArkUIRuntimeCallInfo * runtimeCallInfo)473 ArkUINativeModuleValue SwiperBridge::SetSwiperDisplayMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
474 {
475 EcmaVM* vm = runtimeCallInfo->GetVM();
476 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
477 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
478 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
479 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
480 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
481 if (valueArg->IsNumber()) {
482 int32_t index = valueArg->Int32Value(vm);
483 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperDisplayMode(nativeNode, index);
484 } else {
485 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDisplayMode(nativeNode);
486 }
487 return panda::JSValueRef::Undefined(vm);
488 }
ResetSwiperDisplayMode(ArkUIRuntimeCallInfo * runtimeCallInfo)489 ArkUINativeModuleValue SwiperBridge::ResetSwiperDisplayMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
490 {
491 EcmaVM* vm = runtimeCallInfo->GetVM();
492 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
493 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
494 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
495 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
496 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDisplayMode(nativeNode);
497 return panda::JSValueRef::Undefined(vm);
498 }
SetSwiperItemSpace(ArkUIRuntimeCallInfo * runtimeCallInfo)499 ArkUINativeModuleValue SwiperBridge::SetSwiperItemSpace(ArkUIRuntimeCallInfo* runtimeCallInfo)
500 {
501 EcmaVM* vm = runtimeCallInfo->GetVM();
502 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
503 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
504 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
505 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
506 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
507 Ace::CalcDimension itemSpace;
508 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, valueArg, itemSpace) || LessNotEqual(itemSpace.Value(), 0.0)) {
509 itemSpace.SetValue(0.0);
510 }
511 int32_t itemSpaceUnit = static_cast<int32_t>(itemSpace.Unit());
512 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperItemSpace(nativeNode, itemSpace.Value(), itemSpaceUnit);
513 return panda::JSValueRef::Undefined(vm);
514 }
ResetSwiperItemSpace(ArkUIRuntimeCallInfo * runtimeCallInfo)515 ArkUINativeModuleValue SwiperBridge::ResetSwiperItemSpace(ArkUIRuntimeCallInfo* runtimeCallInfo)
516 {
517 EcmaVM* vm = runtimeCallInfo->GetVM();
518 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
519 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
520 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
521 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
522 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperItemSpace(nativeNode);
523 return panda::JSValueRef::Undefined(vm);
524 }
SetSwiperVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)525 ArkUINativeModuleValue SwiperBridge::SetSwiperVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
526 {
527 EcmaVM* vm = runtimeCallInfo->GetVM();
528 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
529 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
530 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
531 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
532 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
533 if (valueArg->IsBoolean()) {
534 bool isVertical = valueArg->ToBoolean(vm)->Value();
535 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperVertical(nativeNode, isVertical);
536 } else {
537 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperVertical(nativeNode);
538 }
539 return panda::JSValueRef::Undefined(vm);
540 }
ResetSwiperVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)541 ArkUINativeModuleValue SwiperBridge::ResetSwiperVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
542 {
543 EcmaVM* vm = runtimeCallInfo->GetVM();
544 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
545 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
546 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
547 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
548 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperVertical(nativeNode);
549 return panda::JSValueRef::Undefined(vm);
550 }
SetSwiperLoop(ArkUIRuntimeCallInfo * runtimeCallInfo)551 ArkUINativeModuleValue SwiperBridge::SetSwiperLoop(ArkUIRuntimeCallInfo* runtimeCallInfo)
552 {
553 EcmaVM* vm = runtimeCallInfo->GetVM();
554 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
555 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
556 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
557 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
558 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
559 if (valueArg->IsBoolean()) {
560 bool loop = valueArg->ToBoolean(vm)->Value();
561 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperLoop(nativeNode, loop);
562 } else {
563 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperLoop(nativeNode);
564 }
565 return panda::JSValueRef::Undefined(vm);
566 }
ResetSwiperLoop(ArkUIRuntimeCallInfo * runtimeCallInfo)567 ArkUINativeModuleValue SwiperBridge::ResetSwiperLoop(ArkUIRuntimeCallInfo* runtimeCallInfo)
568 {
569 EcmaVM* vm = runtimeCallInfo->GetVM();
570 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
571 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
572 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
573 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
574 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperLoop(nativeNode);
575 return panda::JSValueRef::Undefined(vm);
576 }
SetSwiperInterval(ArkUIRuntimeCallInfo * runtimeCallInfo)577 ArkUINativeModuleValue SwiperBridge::SetSwiperInterval(ArkUIRuntimeCallInfo* runtimeCallInfo)
578 {
579 EcmaVM* vm = runtimeCallInfo->GetVM();
580 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
581 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
582 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
583 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
584 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
585 if (valueArg->IsNumber()) {
586 int32_t interval = valueArg->Int32Value(vm);
587 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperInterval(nativeNode, interval);
588 } else {
589 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperInterval(nativeNode);
590 }
591 return panda::JSValueRef::Undefined(vm);
592 }
ResetSwiperInterval(ArkUIRuntimeCallInfo * runtimeCallInfo)593 ArkUINativeModuleValue SwiperBridge::ResetSwiperInterval(ArkUIRuntimeCallInfo* runtimeCallInfo)
594 {
595 EcmaVM* vm = runtimeCallInfo->GetVM();
596 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
597 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
598 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
599 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
600 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperInterval(nativeNode);
601 return panda::JSValueRef::Undefined(vm);
602 }
SetSwiperAutoPlay(ArkUIRuntimeCallInfo * runtimeCallInfo)603 ArkUINativeModuleValue SwiperBridge::SetSwiperAutoPlay(ArkUIRuntimeCallInfo* runtimeCallInfo)
604 {
605 EcmaVM* vm = runtimeCallInfo->GetVM();
606 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
607 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
608 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
609 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
610 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
611 if (valueArg->IsBoolean()) {
612 bool autoPlay = valueArg->ToBoolean(vm)->Value();
613 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperAutoPlay(nativeNode, autoPlay);
614 } else {
615 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperAutoPlay(nativeNode);
616 return panda::JSValueRef::Undefined(vm);
617 }
618
619 Local<JSValueRef> jsStopWhenTouchedArg = runtimeCallInfo->GetCallArgRef(STOP_WHEN_TOUCHED);
620 bool neddStopWhenTouched = true;
621 if (!jsStopWhenTouchedArg->IsNull() && !jsStopWhenTouchedArg->IsUndefined() && jsStopWhenTouchedArg->IsBoolean()) {
622 neddStopWhenTouched = jsStopWhenTouchedArg->ToBoolean(vm)->Value();
623 }
624 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperStopWhenTouched(nativeNode, neddStopWhenTouched);
625 return panda::JSValueRef::Undefined(vm);
626 }
ResetSwiperAutoPlay(ArkUIRuntimeCallInfo * runtimeCallInfo)627 ArkUINativeModuleValue SwiperBridge::ResetSwiperAutoPlay(ArkUIRuntimeCallInfo* runtimeCallInfo)
628 {
629 EcmaVM* vm = runtimeCallInfo->GetVM();
630 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
631 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
632 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
633 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
634 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperAutoPlay(nativeNode);
635 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperStopWhenTouched(nativeNode);
636 return panda::JSValueRef::Undefined(vm);
637 }
SetSwiperIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)638 ArkUINativeModuleValue SwiperBridge::SetSwiperIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
639 {
640 EcmaVM* vm = runtimeCallInfo->GetVM();
641 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
642 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
643 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
644 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
645 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
646 if (valueArg->IsNumber()) {
647 int32_t index = valueArg->Int32Value(vm);
648 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperIndex(nativeNode, index, DEFAULT_ANIMATION_MODE);
649 } else {
650 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperIndex(nativeNode);
651 }
652 return panda::JSValueRef::Undefined(vm);
653 }
ResetSwiperIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)654 ArkUINativeModuleValue SwiperBridge::ResetSwiperIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
655 {
656 EcmaVM* vm = runtimeCallInfo->GetVM();
657 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
658 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
659 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
660 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
661 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperIndex(nativeNode);
662 return panda::JSValueRef::Undefined(vm);
663 }
GetStringByValueRef(const EcmaVM * vm,const Local<JSValueRef> & jsValue)664 std::string GetStringByValueRef(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
665 {
666 std::string result = "-";
667 if (jsValue->IsUndefined()) {
668 return result;
669 }
670 CalcDimension calc;
671 result = ArkTSUtils::ParseJsDimension(vm, jsValue, calc, DimensionUnit::VP, true)
672 ? (calc.Unit() == DimensionUnit::PERCENT
673 ? (std::to_string(calc.Value() * DEFAULT_PERCENT_VALUE) + "%")
674 : (std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())))
675 : "0.0_vp";
676 return result;
677 }
GetIntStringByValueRef(const EcmaVM * vm,const Local<JSValueRef> & jsValue)678 std::string GetIntStringByValueRef(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
679 {
680 std::string result = "-";
681 if (jsValue->IsUndefined()) {
682 return result;
683 }
684 int32_t intValue;
685 result = ArkTSUtils::ParseJsInteger(vm, jsValue, intValue) ? std::to_string(intValue) : "0";
686 return result;
687 }
688
ParseBottom(const EcmaVM * vm,const Local<JSValueRef> & jsValue,bool hasIgnoreSize)689 std::string ParseBottom(const EcmaVM* vm, const Local<JSValueRef>& jsValue, bool hasIgnoreSize)
690 {
691 std::string bottom = "-";
692 if (jsValue->IsUndefined()) {
693 return bottom;
694 }
695 if (hasIgnoreSize) {
696 CalcDimension bottomcCalc;
697 bool parseOK = ArkTSUtils::ParseJsLengthMetrics(vm, jsValue, bottomcCalc);
698 if (!parseOK) {
699 bottom = GetIntStringByValueRef(vm, jsValue);
700 return bottom;
701 } else {
702 bottomcCalc = bottomcCalc > 0.0_vp ? bottomcCalc : 0.0_vp;
703 bottom = bottomcCalc.ToString();
704 return bottom;
705 }
706 } else {
707 bottom = GetIntStringByValueRef(vm, jsValue);
708 return bottom;
709 }
710 }
711
ParseIgrnoreSize(const EcmaVM * vm,const Local<JSValueRef> & jsValue,bool hasIgrnoreSize)712 std::optional<bool> ParseIgrnoreSize(const EcmaVM* vm, const Local<JSValueRef>& jsValue, bool hasIgrnoreSize)
713 {
714 std::optional<bool> ignoreSize;
715 if (!hasIgrnoreSize) {
716 return ignoreSize;
717 }
718 ignoreSize = false;
719 if (!jsValue->IsNull() && !jsValue->IsUndefined() && jsValue->IsBoolean()) {
720 ignoreSize = jsValue->ToBoolean(vm)->Value();
721 }
722 return ignoreSize;
723 }
724
ParseSpace(const EcmaVM * vm,const Local<JSValueRef> & jsValue)725 std::string ParseSpace(const EcmaVM* vm, const Local<JSValueRef>& jsValue)
726 {
727 std::string result = "-";
728 if (jsValue->IsUndefined()) {
729 return result;
730 }
731 CalcDimension calc;
732 bool parseOK = ArkTSUtils::ParseJsLengthMetrics(vm, jsValue, calc);
733 calc = (parseOK && !(calc < 0.0_vp) && calc.Unit() != DimensionUnit::PERCENT) ?
734 calc : 8.0_vp;
735 return calc.ToString();
736 }
737
GetSpaceAndBottom(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::string & bottom,std::string & spaceAndIgnoreSize)738 void GetSpaceAndBottom(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm, std::string& bottom,
739 std::string& spaceAndIgnoreSize)
740 {
741 Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_BOTTOM);
742 Local<JSValueRef> spaceArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SPACE);
743 Local<JSValueRef> ignoreSizeArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_IGNORE_SIZE);
744 Local<JSValueRef> setIgnoreSizeArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SET_IGNORE_SIZE);
745
746 auto hasIgnoreSize = (setIgnoreSizeArg->IsBoolean() && setIgnoreSizeArg->ToBoolean(vm)->Value()) ? true : false;
747 std::optional<bool> ignoreSize = ParseIgrnoreSize(vm, ignoreSizeArg, hasIgnoreSize);
748 std::string ignoreSizeStr = "-";
749 if (ignoreSize.has_value()) {
750 ignoreSizeStr = ignoreSize.value() ? "1" : "0";
751 }
752
753 std::string setIgnoreSizeStr = "-";
754 if (!setIgnoreSizeArg->IsUndefined()) {
755 setIgnoreSizeStr = setIgnoreSizeArg->ToBoolean(vm)->Value() ? "1" : "0";
756 }
757
758 bottom = ParseBottom(vm, bottomArg, hasIgnoreSize);
759 std::string space = ParseSpace(vm, spaceArg);
760 spaceAndIgnoreSize = space + "|" + ignoreSizeStr + "|" + setIgnoreSizeStr;
761 }
762
GetSwiperDotIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm)763 std::string GetSwiperDotIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm)
764 {
765 Local<JSValueRef> itemWidthArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_ITEM_WIDTH);
766 Local<JSValueRef> itemHeightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_ITEM_HEIGHT);
767 Local<JSValueRef> selectedItemWidthArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_ITEM_WIDTH);
768 Local<JSValueRef> selectedItemHeightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_ITEM_HEIGHT);
769 Local<JSValueRef> maskArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_MASK);
770 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_COLOR);
771 Local<JSValueRef> selectedColorArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_SELECTED_COLOR);
772 Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_LEFT);
773 Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_TOP);
774 Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_RIGHT);
775
776 CalcDimension calc;
777 std::string itemWidth = ArkTSUtils::ParseJsDimension(vm, itemWidthArg, calc, DimensionUnit::VP, false)
778 ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
779 : "-";
780 std::string itemHeight = ArkTSUtils::ParseJsDimension(vm, itemHeightArg, calc, DimensionUnit::VP, false)
781 ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
782 : "-";
783 std::string selectedItemWidth =
784 ArkTSUtils::ParseJsDimension(vm, selectedItemWidthArg, calc, DimensionUnit::VP, false)
785 ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
786 : "-";
787 std::string selectedItemHeight =
788 ArkTSUtils::ParseJsDimension(vm, selectedItemHeightArg, calc, DimensionUnit::VP, false)
789 ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
790 : "-";
791 std::string mask = "2";
792 if (!maskArg->IsUndefined()) {
793 mask = maskArg->ToBoolean(vm)->Value() ? "1" : "0";
794 }
795 Color color;
796 std::string colorStr = ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color) ? std::to_string(color.GetValue()) : "-";
797 std::string selectedColor =
798 ArkTSUtils::ParseJsColorAlpha(vm, selectedColorArg, color) ? std::to_string(color.GetValue()) : "-";
799 std::string left = GetStringByValueRef(vm, leftArg);
800 std::string top = GetStringByValueRef(vm, topArg);
801 std::string right = GetStringByValueRef(vm, rightArg);
802 Local<JSValueRef> maxDisplayCountArg = runtimeCallInfo->GetCallArgRef(DOT_INDICATOR_MAX_DISPLAY_COUNT);
803 auto maxDisplayCount = GetIntStringByValueRef(vm, maxDisplayCountArg);
804 std::string bottom = "-";
805 std::string spaceAndIgnoreSize = "-";
806 GetSpaceAndBottom(runtimeCallInfo, vm, bottom, spaceAndIgnoreSize);
807 std::string indicatorStr = itemWidth + "|" + itemHeight + "|" + selectedItemWidth + "|" +
808 selectedItemHeight + "|" + mask + "|" + colorStr + "|" + selectedColor + "|" + left +
809 "|" + top + "|" + right + "|" + bottom + "|" + maxDisplayCount + "|" +
810 spaceAndIgnoreSize;
811 return indicatorStr;
812 }
GetSwiperDigitIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm)813 std::string GetSwiperDigitIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm)
814 {
815 Local<JSValueRef> fontColorArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_FONT_COLOR);
816 Local<JSValueRef> selectedFontColorArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_FONT_COLOR);
817 Local<JSValueRef> digitFontSizeArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_DIGIT_FONT_SIZE);
818 Local<JSValueRef> digitFontWeightArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_DIGIT_FONT_WEIGHT);
819 Local<JSValueRef> selectedDigitFontSizeArg =
820 runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_DIGIT_FONT_SIZE);
821 Local<JSValueRef> selectedDigitFontWeightArg =
822 runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SELECTED_DIGIT_FONT_WEIGHT);
823 Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_LEFT);
824 Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_TOP);
825 Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_RIGHT);
826 Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_BOTTOM);
827 Local<JSValueRef> ignoreSizeArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_IGNORE_SIZE);
828 Local<JSValueRef> setIgnoreSizeArg = runtimeCallInfo->GetCallArgRef(DIGIT_INDICATOR_SET_IGNORE_SIZE);
829 Color color;
830 CalcDimension calc;
831 std::string fontColor =
832 ArkTSUtils::ParseJsColorAlpha(vm, fontColorArg, color) ? std::to_string(color.GetValue()) : "-";
833 std::string selectedFontColor =
834 ArkTSUtils::ParseJsColorAlpha(vm, selectedFontColorArg, color) ? std::to_string(color.GetValue()) : "-";
835 std::string digitFontSize = ArkTSUtils::ParseJsDimension(vm, digitFontSizeArg, calc, DimensionUnit::FP, false)
836 ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
837 : "-";
838 std::string digitFontWeight = digitFontWeightArg->ToString(vm)->ToString(vm);
839 std::string selectedDigitFontSize =
840 ArkTSUtils::ParseJsDimension(vm, selectedDigitFontSizeArg, calc, DimensionUnit::FP, false)
841 ? std::to_string(calc.Value()) + GetDimensionUnitString(calc.Unit())
842 : "-";
843 std::string selectedDigitFontWeight = selectedDigitFontWeightArg->ToString(vm)->ToString(vm);
844 std::string left = GetStringByValueRef(vm, leftArg);
845 std::string top = GetStringByValueRef(vm, topArg);
846 std::string right = GetStringByValueRef(vm, rightArg);
847
848 std::string setIgnoreSize = "-";
849 if (!setIgnoreSizeArg->IsUndefined()) {
850 setIgnoreSize = setIgnoreSizeArg->ToBoolean(vm)->Value() ? "1" : "0";
851 }
852
853 auto hasIgnoreSize = (setIgnoreSizeArg->IsBoolean() && setIgnoreSizeArg->ToBoolean(vm)->Value()) ? true : false;
854 std::optional<bool> ignoreSize = ParseIgrnoreSize(vm, ignoreSizeArg, hasIgnoreSize);
855 std::string ignoreSizeStr = "-";
856 if (ignoreSize.has_value()) {
857 ignoreSizeStr = ignoreSize.value() ? "1" : "0";
858 }
859 std::string bottom = ParseBottom(vm, bottomArg, hasIgnoreSize);
860 std::string indicatorStr = fontColor + "|" + selectedFontColor + "|" + digitFontSize + "|" + digitFontWeight +
861 "|" + selectedDigitFontSize + "|" + selectedDigitFontWeight + "|" + left + "|" + top + "|" + right +
862 "|" + bottom + "|" + ignoreSizeStr + "|" + setIgnoreSize;
863 return indicatorStr;
864 }
SetSwiperIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo)865 ArkUINativeModuleValue SwiperBridge::SetSwiperIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo)
866 {
867 EcmaVM* vm = runtimeCallInfo->GetVM();
868 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
869 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
870 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
871 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
872 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
873 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
874 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
875
876 std::string type = valueArg->ToString(vm)->ToString(vm);
877 std::string indicatorStr = "";
878 if (type == "boolean") {
879 Local<JSValueRef> indicatorArg = runtimeCallInfo->GetCallArgRef(INDICATOR_VALUE_INDEX);
880 std::string indicator = indicatorArg->ToBoolean(vm)->Value() ? "1" : "0";
881 indicatorStr = type + "|" + indicator;
882 } else if (type == "ArkDotIndicator") {
883 indicatorStr = type + "|" + GetSwiperDotIndicator(runtimeCallInfo, vm);
884 } else if (type == "ArkDigitIndicator") {
885 indicatorStr = type + "|" + GetSwiperDigitIndicator(runtimeCallInfo, vm);
886 } else if (type == "IndicatorComponentController") {
887 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
888 Framework::JSIndicatorController* jsController =
889 Framework::JSRef<Framework::JSObject>::Cast(info[INDICATOR_VALUE_INDEX])
890 ->Unwrap<Framework::JSIndicatorController>();
891 if (jsController) {
892 WeakPtr<NG::UINode> targetNode = AceType::WeakClaim(frameNode);
893 jsController->SetSwiperNode(targetNode);
894 }
895 indicatorStr = "IndicatorComponentController|";
896 } else {
897 indicatorStr = "boolean|1";
898 }
899 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperIndicator(nativeNode, indicatorStr.c_str());
900 return panda::JSValueRef::Undefined(vm);
901 }
ResetSwiperIndicator(ArkUIRuntimeCallInfo * runtimeCallInfo)902 ArkUINativeModuleValue SwiperBridge::ResetSwiperIndicator(ArkUIRuntimeCallInfo* runtimeCallInfo)
903 {
904 EcmaVM* vm = runtimeCallInfo->GetVM();
905 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
906 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
907 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
908 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
909 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperIndicator(nativeNode);
910 return panda::JSValueRef::Undefined(vm);
911 }
SetSwiperDuration(ArkUIRuntimeCallInfo * runtimeCallInfo)912 ArkUINativeModuleValue SwiperBridge::SetSwiperDuration(ArkUIRuntimeCallInfo* runtimeCallInfo)
913 {
914 EcmaVM* vm = runtimeCallInfo->GetVM();
915 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
916 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
917 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
918 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
919 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
920 if (valueArg->IsNumber()) {
921 int32_t duration = valueArg->Int32Value(vm);
922 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperDuration(nativeNode, duration);
923 } else {
924 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDuration(nativeNode);
925 }
926 return panda::JSValueRef::Undefined(vm);
927 }
928
ResetSwiperDuration(ArkUIRuntimeCallInfo * runtimeCallInfo)929 ArkUINativeModuleValue SwiperBridge::ResetSwiperDuration(ArkUIRuntimeCallInfo* runtimeCallInfo)
930 {
931 EcmaVM* vm = runtimeCallInfo->GetVM();
932 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
933 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
934 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
935 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
936 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperDuration(nativeNode);
937 return panda::JSValueRef::Undefined(vm);
938 }
939
SetSwiperEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)940 ArkUINativeModuleValue SwiperBridge::SetSwiperEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
941 {
942 EcmaVM* vm = runtimeCallInfo->GetVM();
943 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
944 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
945 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
946 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
947 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
948 if (valueArg->IsBoolean()) {
949 bool enabled = valueArg->ToBoolean(vm)->Value();
950 GetArkUINodeModifiers()->getCommonModifier()->setEnabled(nativeNode, enabled);
951 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperEnabled(nativeNode, enabled);
952 } else {
953 GetArkUINodeModifiers()->getCommonModifier()->resetEnabled(nativeNode);
954 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperEnabled(nativeNode);
955 }
956 return panda::JSValueRef::Undefined(vm);
957 }
958
ResetSwiperEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)959 ArkUINativeModuleValue SwiperBridge::ResetSwiperEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
960 {
961 EcmaVM* vm = runtimeCallInfo->GetVM();
962 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
963 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
964 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
965 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
966 GetArkUINodeModifiers()->getCommonModifier()->resetEnabled(nativeNode);
967 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperEnabled(nativeNode);
968 return panda::JSValueRef::Undefined(vm);
969 }
970
SetSwiperOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)971 ArkUINativeModuleValue SwiperBridge::SetSwiperOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
972 {
973 EcmaVM* vm = runtimeCallInfo->GetVM();
974 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
975 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
976 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
977 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
978 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
979 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
980 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnChange(nativeNode);
981 return panda::JSValueRef::Undefined(vm);
982 }
983 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
984 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
985 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
986 std::function<void(const BaseEventInfo* info)> callback =
987 [vm, frameNode, func = panda::CopyableGlobal(vm, func)](const BaseEventInfo* info) {
988 panda::LocalScope pandaScope(vm);
989 panda::TryCatch trycatch(vm);
990 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
991 const auto* swiperInfo = TypeInfoHelper::DynamicCast<SwiperChangeEvent>(info);
992 if (!swiperInfo) {
993 TAG_LOGW(AceLogTag::ACE_SWIPER, "Swiper onChange callback execute failed.");
994 return;
995 }
996 panda::Local<panda::NumberRef> indexParam = panda::NumberRef::New(vm, swiperInfo->GetIndex());
997 panda::Local<panda::JSValueRef> params[1] = { indexParam }; // 1: Array length
998 func->Call(vm, func.ToLocal(), params, 1); // 1: Array length
999 };
1000 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnChange(nativeNode, reinterpret_cast<void*>(&callback));
1001 return panda::JSValueRef::Undefined(vm);
1002 }
1003
ResetSwiperOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1004 ArkUINativeModuleValue SwiperBridge::ResetSwiperOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1005 {
1006 EcmaVM* vm = runtimeCallInfo->GetVM();
1007 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1008 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1009 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1010 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1011 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnChange(nativeNode);
1012 return panda::JSValueRef::Undefined(vm);
1013 }
1014
SetSwiperOnSelected(ArkUIRuntimeCallInfo * runtimeCallInfo)1015 ArkUINativeModuleValue SwiperBridge::SetSwiperOnSelected(ArkUIRuntimeCallInfo* runtimeCallInfo)
1016 {
1017 EcmaVM* vm = runtimeCallInfo->GetVM();
1018 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1019 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1020 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1021 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1022 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1023 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnSelected(nativeNode);
1024 return panda::JSValueRef::Undefined(vm);
1025 }
1026 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1027 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1028 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1029 std::function<void(const BaseEventInfo* info)> callback =
1030 [vm, frameNode, func = panda::CopyableGlobal(vm, func)](const BaseEventInfo* info) {
1031 panda::LocalScope pandaScope(vm);
1032 panda::TryCatch trycatch(vm);
1033 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1034 const auto* swiperInfo = TypeInfoHelper::DynamicCast<SwiperChangeEvent>(info);
1035 if (!swiperInfo) {
1036 TAG_LOGW(AceLogTag::ACE_SWIPER, "Swiper onSelected callback execute failed.");
1037 return;
1038 }
1039 panda::Local<panda::NumberRef> indexParam = panda::NumberRef::New(vm, swiperInfo->GetIndex());
1040 panda::Local<panda::JSValueRef> params[1] = { indexParam }; // 1: Array length
1041 func->Call(vm, func.ToLocal(), params, 1); // 1: Array length
1042 };
1043 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnSelected(nativeNode, reinterpret_cast<void*>(&callback));
1044 return panda::JSValueRef::Undefined(vm);
1045 }
1046
ResetSwiperOnSelected(ArkUIRuntimeCallInfo * runtimeCallInfo)1047 ArkUINativeModuleValue SwiperBridge::ResetSwiperOnSelected(ArkUIRuntimeCallInfo* runtimeCallInfo)
1048 {
1049 EcmaVM* vm = runtimeCallInfo->GetVM();
1050 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1051 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1052 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1053 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnSelected(nativeNode);
1054 return panda::JSValueRef::Undefined(vm);
1055 }
1056
SetSwiperOnAnimationStart(ArkUIRuntimeCallInfo * runtimeCallInfo)1057 ArkUINativeModuleValue SwiperBridge::SetSwiperOnAnimationStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
1058 {
1059 EcmaVM* vm = runtimeCallInfo->GetVM();
1060 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1061 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1062 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1063 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1064 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1065 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1066 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnAnimationStart(nativeNode);
1067 return panda::JSValueRef::Undefined(vm);
1068 }
1069 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1070 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1071 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1072 std::function<void(int32_t, int32_t, const AnimationCallbackInfo&)> callback =
1073 [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
1074 int32_t index, int32_t targetIndex, const AnimationCallbackInfo& extraInfo) {
1075 panda::LocalScope pandaScope(vm);
1076 panda::TryCatch trycatch(vm);
1077 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1078 panda::Local<panda::NumberRef> indexParam = panda::NumberRef::New(vm, index);
1079 panda::Local<panda::NumberRef> targetIndexParam = panda::NumberRef::New(vm, targetIndex);
1080 const char* keys[] = {"currentOffset", "targetOffset", "velocity"};
1081 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, extraInfo.currentOffset.value()),
1082 panda::NumberRef::New(vm, extraInfo.targetOffset.value()),
1083 panda::NumberRef::New(vm, extraInfo.velocity.value()) };
1084 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1085 panda::Local<panda::JSValueRef> params[3] = { indexParam, targetIndexParam, eventObject }; // 3: Array length
1086 func->Call(vm, func.ToLocal(), params, 3); // 3: Array length
1087 };
1088 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnAnimationStart(nativeNode,
1089 reinterpret_cast<void*>(&callback));
1090 return panda::JSValueRef::Undefined(vm);
1091 }
1092
ResetSwiperOnAnimationStart(ArkUIRuntimeCallInfo * runtimeCallInfo)1093 ArkUINativeModuleValue SwiperBridge::ResetSwiperOnAnimationStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
1094 {
1095 EcmaVM* vm = runtimeCallInfo->GetVM();
1096 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1097 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1098 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1099 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1100 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnAnimationStart(nativeNode);
1101 return panda::JSValueRef::Undefined(vm);
1102 }
1103
SetSwiperOnAnimationEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)1104 ArkUINativeModuleValue SwiperBridge::SetSwiperOnAnimationEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
1105 {
1106 EcmaVM* vm = runtimeCallInfo->GetVM();
1107 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1108 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1109 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1110 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1111 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1112 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1113 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnAnimationEnd(nativeNode);
1114 return panda::JSValueRef::Undefined(vm);
1115 }
1116 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1117 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1118 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1119 std::function<void(int32_t, const AnimationCallbackInfo&)> callback = [vm, frameNode,
1120 func = panda::CopyableGlobal(vm, func)](int32_t index, const AnimationCallbackInfo& extraInfo) {
1121 panda::LocalScope pandaScope(vm);
1122 panda::TryCatch trycatch(vm);
1123 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1124 panda::Local<panda::NumberRef> indexParam = panda::NumberRef::New(vm, index);
1125 const char* keys[] = {"currentOffset", "targetOffset", "velocity"};
1126 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, extraInfo.currentOffset.value()),
1127 panda::NumberRef::New(vm, 0),
1128 panda::NumberRef::New(vm, 0) };
1129 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1130 panda::Local<panda::JSValueRef> params[2] = { indexParam, eventObject }; // 2: Array length
1131 func->Call(vm, func.ToLocal(), params, 2); // 2: Array length
1132 };
1133 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnAnimationEnd(nativeNode,
1134 reinterpret_cast<void*>(&callback));
1135 return panda::JSValueRef::Undefined(vm);
1136 }
1137
ResetSwiperOnAnimationEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)1138 ArkUINativeModuleValue SwiperBridge::ResetSwiperOnAnimationEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
1139 {
1140 EcmaVM* vm = runtimeCallInfo->GetVM();
1141 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1142 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1143 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1144 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1145 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnAnimationEnd(nativeNode);
1146 return panda::JSValueRef::Undefined(vm);
1147 }
1148
SetSwiperOnGestureSwipe(ArkUIRuntimeCallInfo * runtimeCallInfo)1149 ArkUINativeModuleValue SwiperBridge::SetSwiperOnGestureSwipe(ArkUIRuntimeCallInfo* runtimeCallInfo)
1150 {
1151 EcmaVM* vm = runtimeCallInfo->GetVM();
1152 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1153 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1154 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1155 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1156 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1157 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1158 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnGestureSwipe(nativeNode);
1159 return panda::JSValueRef::Undefined(vm);
1160 }
1161 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1162 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1163 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1164 std::function<void(int32_t, const AnimationCallbackInfo&)> callback = [vm, frameNode,
1165 func = panda::CopyableGlobal(vm, func)](int32_t index, const AnimationCallbackInfo& extraInfo) {
1166 panda::LocalScope pandaScope(vm);
1167 panda::TryCatch trycatch(vm);
1168 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1169 panda::Local<panda::NumberRef> indexParam = panda::NumberRef::New(vm, index);
1170 const char* keys[] = {"currentOffset", "targetOffset", "velocity"};
1171 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, extraInfo.currentOffset.value()),
1172 panda::NumberRef::New(vm, 0),
1173 panda::NumberRef::New(vm, 0) };
1174 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1175 panda::Local<panda::JSValueRef> params[2] = { indexParam, eventObject }; // 2: Array length
1176 func->Call(vm, func.ToLocal(), params, 2); // 2: Array length
1177 };
1178 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnGestureSwipe(nativeNode,
1179 reinterpret_cast<void*>(&callback));
1180 return panda::JSValueRef::Undefined(vm);
1181 }
1182
ResetSwiperOnGestureSwipe(ArkUIRuntimeCallInfo * runtimeCallInfo)1183 ArkUINativeModuleValue SwiperBridge::ResetSwiperOnGestureSwipe(ArkUIRuntimeCallInfo* runtimeCallInfo)
1184 {
1185 EcmaVM* vm = runtimeCallInfo->GetVM();
1186 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1187 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1188 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1189 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1190 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnGestureSwipe(nativeNode);
1191 return panda::JSValueRef::Undefined(vm);
1192 }
1193
SetSwiperOnUnselected(ArkUIRuntimeCallInfo * runtimeCallInfo)1194 ArkUINativeModuleValue SwiperBridge::SetSwiperOnUnselected(ArkUIRuntimeCallInfo* runtimeCallInfo)
1195 {
1196 EcmaVM* vm = runtimeCallInfo->GetVM();
1197 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1198 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1199 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1200 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1201 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1202 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnUnselected(nativeNode);
1203 return panda::JSValueRef::Undefined(vm);
1204 }
1205 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1206 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1207 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1208 std::function<void(const BaseEventInfo* info)> callback =
1209 [vm, frameNode, func = panda::CopyableGlobal(vm, func)](const BaseEventInfo* info) {
1210 panda::LocalScope pandaScope(vm);
1211 panda::TryCatch trycatch(vm);
1212 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1213 const auto* swiperInfo = TypeInfoHelper::DynamicCast<SwiperChangeEvent>(info);
1214 if (!swiperInfo) {
1215 TAG_LOGW(AceLogTag::ACE_SWIPER, "Swiper OnUnselected callback execute failed.");
1216 return;
1217 }
1218 panda::Local<panda::NumberRef> indexParam = panda::NumberRef::New(vm, swiperInfo->GetIndex());
1219 panda::Local<panda::JSValueRef> params[1] = { indexParam }; // 1: Array length
1220 func->Call(vm, func.ToLocal(), params, 1); // 1: Array length
1221 };
1222 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnUnselected(nativeNode, reinterpret_cast<void*>(&callback));
1223 return panda::JSValueRef::Undefined(vm);
1224 }
1225
ResetSwiperOnUnselected(ArkUIRuntimeCallInfo * runtimeCallInfo)1226 ArkUINativeModuleValue SwiperBridge::ResetSwiperOnUnselected(ArkUIRuntimeCallInfo* runtimeCallInfo)
1227 {
1228 EcmaVM* vm = runtimeCallInfo->GetVM();
1229 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1230 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1231 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1232 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnUnselected(nativeNode);
1233 return panda::JSValueRef::Undefined(vm);
1234 }
1235
SetSwiperCustomContentTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)1236 ArkUINativeModuleValue SwiperBridge::SetSwiperCustomContentTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
1237 {
1238 EcmaVM* vm = runtimeCallInfo->GetVM();
1239 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1240 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1241 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1242 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1243 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1244 using namespace OHOS::Ace::Framework;
1245 JsiCallbackInfo info = JsiCallbackInfo(runtimeCallInfo);
1246 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1247 if (info.Length() < 2 || !info[1]->IsObject()) { // 2: Array length
1248 return panda::JSValueRef::Undefined(vm);
1249 }
1250
1251 SwiperContentAnimatedTransition transitionInfo;
1252 auto transitionObj = JSRef<JSObject>::Cast(info[1]);
1253 JSRef<JSVal> timeoutProperty = transitionObj->GetProperty("timeout");
1254 if (timeoutProperty->IsNumber()) {
1255 auto timeout = timeoutProperty->ToNumber<int32_t>();
1256 transitionInfo.timeout = timeout < 0 ? 0 : timeout;
1257 } else {
1258 transitionInfo.timeout = 0;
1259 }
1260
1261 JSRef<JSVal> transition = transitionObj->GetProperty("transition");
1262 if (transition->IsFunction()) {
1263 auto jsOnTransition =
1264 AceType::MakeRefPtr<JsSwiperFunction>(JSRef<JSFunc>::Cast(transition));
1265 auto onTransition = [execCtx = info.GetExecutionContext(), func = std::move(jsOnTransition)](
1266 const RefPtr<SwiperContentTransitionProxy>& proxy) {
1267 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx);
1268 ACE_SCORING_EVENT("Swiper.customContentTransition");
1269 func->Execute(proxy);
1270 };
1271 transitionInfo.transition = std::move(onTransition);
1272 }
1273 SwiperModelNG::SetCustomContentTransition(frameNode, transitionInfo);
1274 return panda::JSValueRef::Undefined(vm);
1275 }
1276
ResetSwiperCustomContentTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)1277 ArkUINativeModuleValue SwiperBridge::ResetSwiperCustomContentTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
1278 {
1279 EcmaVM* vm = runtimeCallInfo->GetVM();
1280 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1281 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1282 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1283 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1284 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1285 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1286 SwiperContentAnimatedTransition transitionInfo;
1287 SwiperModelNG::SetCustomContentTransition(frameNode, transitionInfo);
1288 return panda::JSValueRef::Undefined(vm);
1289 }
1290
SetOnContentDidScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1291 ArkUINativeModuleValue SwiperBridge::SetOnContentDidScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1292 {
1293 EcmaVM* vm = runtimeCallInfo->GetVM();
1294 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1295 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1296 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1297 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1298 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1299 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1300 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnContentDidScroll(nativeNode);
1301 return panda::JSValueRef::Undefined(vm);
1302 }
1303 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1304 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1305 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1306 std::function<void(int32_t, int32_t, float_t, float_t)> callback = [vm, frameNode,
1307 func = panda::CopyableGlobal(vm, func)](int32_t selectedIndex, int32_t index,
1308 float position, float mainAxisLength) {
1309 panda::LocalScope pandaScope(vm);
1310 panda::TryCatch trycatch(vm);
1311 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1312 panda::Local<panda::NumberRef> selectedIndexParam = panda::NumberRef::New(vm, selectedIndex);
1313 panda::Local<panda::NumberRef> indexParam = panda::NumberRef::New(vm, index);
1314 panda::Local<panda::NumberRef> positionParam = panda::NumberRef::New(vm, position);
1315 panda::Local<panda::NumberRef> mainAxisLengthParam = panda::NumberRef::New(vm, mainAxisLength);
1316 panda::Local<panda::JSValueRef> params[4] = { selectedIndexParam, indexParam, // 4: Array length
1317 positionParam, mainAxisLengthParam };
1318 func->Call(vm, func.ToLocal(), params, 4); // 4: Array length
1319 };
1320 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnContentDidScroll(nativeNode,
1321 reinterpret_cast<void*>(&callback));
1322 return panda::JSValueRef::Undefined(vm);
1323 }
1324
ResetOnContentDidScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1325 ArkUINativeModuleValue SwiperBridge::ResetOnContentDidScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1326 {
1327 EcmaVM* vm = runtimeCallInfo->GetVM();
1328 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1329 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1330 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1331 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1332 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnContentDidScroll(nativeNode);
1333 return panda::JSValueRef::Undefined(vm);
1334 }
1335
SetSwiperPageFlipMode(ArkUIRuntimeCallInfo * runtimeCallInfo)1336 ArkUINativeModuleValue SwiperBridge::SetSwiperPageFlipMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
1337 {
1338 EcmaVM* vm = runtimeCallInfo->GetVM();
1339 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1340 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1341 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1342 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1343 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1344 if (valueArg->IsNumber()) {
1345 int32_t pageFlipMode = valueArg->Int32Value(vm);
1346 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperPageFlipMode(nativeNode, pageFlipMode);
1347 } else {
1348 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperPageFlipMode(nativeNode);
1349 }
1350 return panda::JSValueRef::Undefined(vm);
1351 }
1352
ResetSwiperPageFlipMode(ArkUIRuntimeCallInfo * runtimeCallInfo)1353 ArkUINativeModuleValue SwiperBridge::ResetSwiperPageFlipMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
1354 {
1355 EcmaVM* vm = runtimeCallInfo->GetVM();
1356 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1357 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1358 CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1359 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1360 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperPageFlipMode(nativeNode);
1361 return panda::JSValueRef::Undefined(vm);
1362 }
1363
SetSwiperOnContentWillScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1364 ArkUINativeModuleValue SwiperBridge::SetSwiperOnContentWillScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1365 {
1366 EcmaVM* vm = runtimeCallInfo->GetVM();
1367 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1368 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_NODE_INDEX);
1369 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_VALUE_INDEX);
1370 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1371 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1372 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1373 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnContentWillScroll(nativeNode);
1374 return panda::JSValueRef::Undefined(vm);
1375 }
1376 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1377 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1378 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1379 std::function<bool(const SwiperContentWillScrollResult&)> callback =
1380 [vm, frameNode, func = panda::CopyableGlobal(vm, func)](const SwiperContentWillScrollResult& result) -> bool {
1381 panda::LocalScope pandaScope(vm);
1382 panda::TryCatch trycatch(vm);
1383 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1384 const char* keys[] = { "currentIndex", "comingIndex", "offset" };
1385 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, result.currentIndex),
1386 panda::NumberRef::New(vm, result.comingIndex), panda::NumberRef::New(vm, result.offset) };
1387 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1388 panda::Local<panda::JSValueRef> params[1] = { eventObject };
1389 auto ret = func->Call(vm, func.ToLocal(), params, 1);
1390 if (ret->IsBoolean()) {
1391 return ret->ToBoolean(vm)->Value();
1392 }
1393 return true;
1394 };
1395 GetArkUINodeModifiers()->getSwiperModifier()->setSwiperOnContentWillScroll(
1396 nativeNode, reinterpret_cast<bool*>(&callback));
1397 return panda::JSValueRef::Undefined(vm);
1398 }
1399
ResetSwiperOnContentWillScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1400 ArkUINativeModuleValue SwiperBridge::ResetSwiperOnContentWillScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1401 {
1402 EcmaVM* vm = runtimeCallInfo->GetVM();
1403 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1404 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1405 CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1406 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1407 GetArkUINodeModifiers()->getSwiperModifier()->resetSwiperOnContentWillScroll(nativeNode);
1408 return panda::JSValueRef::Undefined(vm);
1409 }
1410 } // namespace OHOS::Ace::NG