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_list_bridge.h"
16
17 #include "core/interfaces/native/node/node_api.h"
18 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19 #include "frameworks/bridge/declarative_frontend/jsview/js_list.h"
20 #include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h"
21 #include "frameworks/core/components/list/list_theme.h"
22 #include "frameworks/core/components_ng/pattern/list/list_model.h"
23 #include "frameworks/core/components_ng/pattern/list/list_model_ng.h"
24 #include "frameworks/core/components_ng/pattern/scroll_bar/proxy/scroll_bar_proxy.h"
25 #include "frameworks/core/components_ng/base/view_stack_model.h"
26 using namespace OHOS::Ace::Framework;
27
28 namespace OHOS::Ace::NG {
29 constexpr int32_t LIST_ARG_INDEX_0 = 0;
30 constexpr int32_t LIST_ARG_INDEX_1 = 1;
31 constexpr int32_t LIST_ARG_INDEX_2 = 2;
32 constexpr int32_t LIST_ARG_INDEX_3 = 3;
33 constexpr int32_t LIST_ARG_INDEX_4 = 4;
34 constexpr int32_t LIST_ARG_INDEX_5 = 5;
35 constexpr int32_t LIST_ARG_INDEX_6 = 6;
36 constexpr int32_t LIST_ARG_INDEX_7 = 7;
37 constexpr int32_t DEFAULT_CACHED_COUNT = 1;
38
39 constexpr int32_t ARG_LENGTH = 3;
40
SetListLanes(ArkUIRuntimeCallInfo * runtimeCallInfo)41 ArkUINativeModuleValue ListBridge::SetListLanes(ArkUIRuntimeCallInfo* runtimeCallInfo)
42 {
43 EcmaVM* vm = runtimeCallInfo->GetVM();
44 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
45 Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0); // 0: index of parameter frameNode
46 Local<JSValueRef> laneNumArg = runtimeCallInfo->GetCallArgRef(1); // 1: index of parameter laneNum
47 Local<JSValueRef> minLengthArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of parameter minLength
48 Local<JSValueRef> maxLengthArg = runtimeCallInfo->GetCallArgRef(3); // 3: index of parameter maxLength
49 Local<JSValueRef> gutterArg = runtimeCallInfo->GetCallArgRef(4); // 4: index of parameter gutter
50 auto nativeNode = nodePtr(frameNodeArg->ToNativePointer(vm)->Value());
51 ArkUIDimensionType gutterType;
52 ArkUIDimensionType minLengthType;
53 ArkUIDimensionType maxLengthType;
54
55 CalcDimension gutter = Dimension(0.0);
56 int32_t laneNum = 1;
57 CalcDimension minLength = -1.0_vp;
58 CalcDimension maxLength = -1.0_vp;
59 if (!gutterArg->IsUndefined() && ArkTSUtils::ParseJsDimensionVp(vm, gutterArg, gutter)) {
60 if (gutter.IsNegative()) {
61 gutter.Reset();
62 }
63 gutterType.value = gutter.Value();
64 gutterType.units = static_cast<int32_t>(gutter.Unit());
65 }
66 if (!laneNumArg->IsUndefined() && ArkTSUtils::ParseJsInteger(vm, laneNumArg, laneNum)) {
67 minLengthType.value = minLength.Value();
68 minLengthType.units = static_cast<int32_t>(minLength.Unit());
69 maxLengthType.value = maxLength.Value();
70 maxLengthType.units = static_cast<int32_t>(maxLength.Unit());
71 }
72 if (!minLengthArg->IsUndefined() && !maxLengthArg->IsUndefined() &&
73 ArkTSUtils::ParseJsDimensionVp(vm, minLengthArg, minLength) &&
74 ArkTSUtils::ParseJsDimensionVp(vm, maxLengthArg, maxLength)) {
75 laneNum = -1;
76 minLengthType.value = minLength.Value();
77 minLengthType.units = static_cast<int32_t>(minLength.Unit());
78 maxLengthType.value = maxLength.Value();
79 maxLengthType.units = static_cast<int32_t>(maxLength.Unit());
80 }
81 GetArkUINodeModifiers()->getListModifier()->setListLanes(
82 nativeNode, laneNum, &minLengthType, &maxLengthType, &gutterType);
83 return panda::JSValueRef::Undefined(vm);
84 }
85
ResetListLanes(ArkUIRuntimeCallInfo * runtimeCallInfo)86 ArkUINativeModuleValue ListBridge::ResetListLanes(ArkUIRuntimeCallInfo* runtimeCallInfo)
87 {
88 EcmaVM* vm = runtimeCallInfo->GetVM();
89 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
90 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
91 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
92 GetArkUINodeModifiers()->getListModifier()->resetListLanes(nativeNode);
93
94 return panda::JSValueRef::Undefined(vm);
95 }
SetEditMode(ArkUIRuntimeCallInfo * runtimeCallInfo)96 ArkUINativeModuleValue ListBridge::SetEditMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
97 {
98 EcmaVM* vm = runtimeCallInfo->GetVM();
99 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
100 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
101 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
102 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
103 if (secondArg->IsUndefined()) {
104 GetArkUINodeModifiers()->getListModifier()->resetEditMode(nativeNode);
105 } else {
106 bool editMode = secondArg->ToBoolean(vm)->Value();
107 GetArkUINodeModifiers()->getListModifier()->setEditMode(nativeNode, editMode);
108 }
109
110 return panda::JSValueRef::Undefined(vm);
111 }
112
ResetEditMode(ArkUIRuntimeCallInfo * runtimeCallInfo)113 ArkUINativeModuleValue ListBridge::ResetEditMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
114 {
115 EcmaVM* vm = runtimeCallInfo->GetVM();
116 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
117 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
118 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
119 GetArkUINodeModifiers()->getListModifier()->resetEditMode(nativeNode);
120
121 return panda::JSValueRef::Undefined(vm);
122 }
123
SetMultiSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)124 ArkUINativeModuleValue ListBridge::SetMultiSelectable(ArkUIRuntimeCallInfo* runtimeCallInfo)
125 {
126 EcmaVM* vm = runtimeCallInfo->GetVM();
127 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
128 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
129 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
130 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
131 if (secondArg->IsUndefined()) {
132 GetArkUINodeModifiers()->getListModifier()->resetMultiSelectable(nativeNode);
133 } else {
134 bool selectable = secondArg->ToBoolean(vm)->Value();
135 GetArkUINodeModifiers()->getListModifier()->setMultiSelectable(nativeNode, selectable);
136 }
137
138 return panda::JSValueRef::Undefined(vm);
139 }
140
ResetMultiSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)141 ArkUINativeModuleValue ListBridge::ResetMultiSelectable(ArkUIRuntimeCallInfo* runtimeCallInfo)
142 {
143 EcmaVM* vm = runtimeCallInfo->GetVM();
144 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
145 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
146 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
147 GetArkUINodeModifiers()->getListModifier()->resetMultiSelectable(nativeNode);
148
149 return panda::JSValueRef::Undefined(vm);
150 }
151
SetChainAnimation(ArkUIRuntimeCallInfo * runtimeCallInfo)152 ArkUINativeModuleValue ListBridge::SetChainAnimation(ArkUIRuntimeCallInfo* runtimeCallInfo)
153 {
154 EcmaVM* vm = runtimeCallInfo->GetVM();
155 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
156 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
157 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
158 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
159 bool chainAnimation = secondArg->ToBoolean(vm)->Value();
160 GetArkUINodeModifiers()->getListModifier()->setChainAnimation(nativeNode, chainAnimation);
161
162 return panda::JSValueRef::Undefined(vm);
163 }
164
ResetChainAnimation(ArkUIRuntimeCallInfo * runtimeCallInfo)165 ArkUINativeModuleValue ListBridge::ResetChainAnimation(ArkUIRuntimeCallInfo* runtimeCallInfo)
166 {
167 EcmaVM* vm = runtimeCallInfo->GetVM();
168 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
169 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
170 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
171 GetArkUINodeModifiers()->getListModifier()->resetChainAnimation(nativeNode);
172
173 return panda::JSValueRef::Undefined(vm);
174 }
175
SetCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)176 ArkUINativeModuleValue ListBridge::SetCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
177 {
178 EcmaVM* vm = runtimeCallInfo->GetVM();
179 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
180 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
181 Local<JSValueRef> cacheCountArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
182 Local<JSValueRef> cacheShowArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_2);
183
184 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
185
186 auto cacheCount = DEFAULT_CACHED_COUNT;
187 if (!cacheCountArg->IsUndefined()) {
188 ArkTSUtils::ParseJsInteger(vm, cacheCountArg, cacheCount);
189 if (cacheCount < 0) {
190 cacheCount = DEFAULT_CACHED_COUNT;
191 }
192 }
193 GetArkUINodeModifiers()->getListModifier()->setCachedCount(nativeNode, cacheCount);
194
195 bool show = !cacheShowArg.IsNull() && cacheShowArg->IsTrue();
196 GetArkUINodeModifiers()->getListModifier()->setShowCached(nativeNode, show);
197
198 return panda::JSValueRef::Undefined(vm);
199 }
200
ResetCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)201 ArkUINativeModuleValue ListBridge::ResetCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
202 {
203 EcmaVM* vm = runtimeCallInfo->GetVM();
204 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
205 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
206 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
207 GetArkUINodeModifiers()->getListModifier()->resetCachedCount(nativeNode);
208 GetArkUINodeModifiers()->getListModifier()->resetShowCached(nativeNode);
209
210 return panda::JSValueRef::Undefined(vm);
211 }
212
SetEnableScrollInteraction(ArkUIRuntimeCallInfo * runtimeCallInfo)213 ArkUINativeModuleValue ListBridge::SetEnableScrollInteraction(ArkUIRuntimeCallInfo* runtimeCallInfo)
214 {
215 EcmaVM* vm = runtimeCallInfo->GetVM();
216 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
217 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
218 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
219 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
220 if (secondArg->IsBoolean()) {
221 bool enableScrollInteraction = secondArg->ToBoolean(vm)->Value();
222 GetArkUINodeModifiers()->getListModifier()->setEnableScrollInteraction(nativeNode, enableScrollInteraction);
223 } else {
224 GetArkUINodeModifiers()->getListModifier()->resetEnableScrollInteraction(nativeNode);
225 }
226
227 return panda::JSValueRef::Undefined(vm);
228 }
229
ResetEnableScrollInteraction(ArkUIRuntimeCallInfo * runtimeCallInfo)230 ArkUINativeModuleValue ListBridge::ResetEnableScrollInteraction(ArkUIRuntimeCallInfo* runtimeCallInfo)
231 {
232 EcmaVM* vm = runtimeCallInfo->GetVM();
233 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
234 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
235 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
236 GetArkUINodeModifiers()->getListModifier()->resetEnableScrollInteraction(nativeNode);
237
238 return panda::JSValueRef::Undefined(vm);
239 }
240
SetSticky(ArkUIRuntimeCallInfo * runtimeCallInfo)241 ArkUINativeModuleValue ListBridge::SetSticky(ArkUIRuntimeCallInfo* runtimeCallInfo)
242 {
243 EcmaVM* vm = runtimeCallInfo->GetVM();
244 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
245 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
246 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
247 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
248 if (secondArg->IsUndefined()) {
249 GetArkUINodeModifiers()->getListModifier()->resetSticky(nativeNode);
250 } else {
251 int32_t stickyStyle = secondArg->ToNumber(vm)->Value();
252 GetArkUINodeModifiers()->getListModifier()->setSticky(nativeNode, stickyStyle);
253 }
254
255 return panda::JSValueRef::Undefined(vm);
256 }
257
ResetSticky(ArkUIRuntimeCallInfo * runtimeCallInfo)258 ArkUINativeModuleValue ListBridge::ResetSticky(ArkUIRuntimeCallInfo* runtimeCallInfo)
259 {
260 EcmaVM* vm = runtimeCallInfo->GetVM();
261 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
262 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
263 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
264 GetArkUINodeModifiers()->getListModifier()->resetSticky(nativeNode);
265
266 return panda::JSValueRef::Undefined(vm);
267 }
268
SetListDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)269 ArkUINativeModuleValue ListBridge::SetListDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
270 {
271 EcmaVM* vm = runtimeCallInfo->GetVM();
272 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
273 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
274 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
275 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
276 if (secondArg->IsUndefined()) {
277 GetArkUINodeModifiers()->getListModifier()->resetListDirection(nativeNode);
278 } else {
279 int32_t direction = secondArg->ToNumber(vm)->Value();
280 GetArkUINodeModifiers()->getListModifier()->setListDirection(nativeNode, direction);
281 }
282
283 return panda::JSValueRef::Undefined(vm);
284 }
ResetListDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)285 ArkUINativeModuleValue ListBridge::ResetListDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
286 {
287 EcmaVM* vm = runtimeCallInfo->GetVM();
288 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
289 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
290 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
291 GetArkUINodeModifiers()->getListModifier()->resetListDirection(nativeNode);
292
293 return panda::JSValueRef::Undefined(vm);
294 }
295
SetListFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)296 ArkUINativeModuleValue ListBridge::SetListFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
297 {
298 EcmaVM* vm = runtimeCallInfo->GetVM();
299 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
300 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
301 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
302
303 double friction = -1.0;
304 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
305 if (secondArg->IsUndefined() || secondArg->IsNull() || !ArkTSUtils::ParseJsDouble(vm, secondArg, friction)) {
306 friction = -1.0;
307 }
308 GetArkUINodeModifiers()->getListModifier()->setListFriction(nativeNode, friction);
309 return panda::JSValueRef::Undefined(vm);
310 }
311
ResetListFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)312 ArkUINativeModuleValue ListBridge::ResetListFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
313 {
314 EcmaVM* vm = runtimeCallInfo->GetVM();
315 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
316 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
317 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
318 GetArkUINodeModifiers()->getListModifier()->resetListFriction(nativeNode);
319 return panda::JSValueRef::Undefined(vm);
320 }
321
SetListMaintainVisibleContentPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)322 ArkUINativeModuleValue ListBridge::SetListMaintainVisibleContentPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
323 {
324 EcmaVM* vm = runtimeCallInfo->GetVM();
325 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
326 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
327 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
328 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
329
330 if (secondArg->IsBoolean()) {
331 bool enabled = secondArg->ToBoolean(vm)->Value();
332 GetArkUINodeModifiers()->getListModifier()->setListMaintainVisibleContentPosition(nativeNode, enabled);
333 } else {
334 GetArkUINodeModifiers()->getListModifier()->resetListMaintainVisibleContentPosition(nativeNode);
335 }
336
337 return panda::JSValueRef::Undefined(vm);
338 }
339
ResetListMaintainVisibleContentPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)340 ArkUINativeModuleValue ListBridge::ResetListMaintainVisibleContentPosition(ArkUIRuntimeCallInfo* runtimeCallInfo)
341 {
342 EcmaVM* vm = runtimeCallInfo->GetVM();
343 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
344 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
345 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
346 GetArkUINodeModifiers()->getListModifier()->resetListMaintainVisibleContentPosition(nativeNode);
347 return panda::JSValueRef::Undefined(vm);
348 }
349
SetListStackFromEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)350 ArkUINativeModuleValue ListBridge::SetListStackFromEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
351 {
352 EcmaVM* vm = runtimeCallInfo->GetVM();
353 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
354 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
355 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
356 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
357
358 if (secondArg->IsBoolean()) {
359 bool enabled = secondArg->ToBoolean(vm)->Value();
360 GetArkUINodeModifiers()->getListModifier()->setListStackFromEnd(nativeNode, enabled);
361 } else {
362 GetArkUINodeModifiers()->getListModifier()->resetListStackFromEnd(nativeNode);
363 }
364
365 return panda::JSValueRef::Undefined(vm);
366 }
367
ResetListStackFromEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)368 ArkUINativeModuleValue ListBridge::ResetListStackFromEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
369 {
370 EcmaVM* vm = runtimeCallInfo->GetVM();
371 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
372 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
373 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
374 GetArkUINodeModifiers()->getListModifier()->resetListStackFromEnd(nativeNode);
375 return panda::JSValueRef::Undefined(vm);
376 }
377
SetListNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)378 ArkUINativeModuleValue ListBridge::SetListNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
379 {
380 EcmaVM* vm = runtimeCallInfo->GetVM();
381 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
382 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
383 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
384 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_2);
385
386 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
387 int32_t forward = 0;
388 int32_t backward = 0;
389 if (!secondArg->IsUndefined()) {
390 forward = secondArg->Int32Value(vm);
391 }
392 if (!thirdArg->IsUndefined()) {
393 backward = thirdArg->Int32Value(vm);
394 }
395
396 if (forward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
397 forward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
398 forward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
399 }
400
401 if (backward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
402 backward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
403 backward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
404 }
405
406 GetArkUINodeModifiers()->getListModifier()->setListNestedScroll(nativeNode, forward, backward);
407
408 return panda::JSValueRef::Undefined(vm);
409 }
410
ResetListNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)411 ArkUINativeModuleValue ListBridge::ResetListNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
412 {
413 EcmaVM* vm = runtimeCallInfo->GetVM();
414 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
415 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
416 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
417 GetArkUINodeModifiers()->getListModifier()->resetListNestedScroll(nativeNode);
418 return panda::JSValueRef::Undefined(vm);
419 }
420
SetListScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)421 ArkUINativeModuleValue ListBridge::SetListScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
422 {
423 EcmaVM* vm = runtimeCallInfo->GetVM();
424 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
425 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
426 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
427 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
428 if (secondArg->IsUndefined()) {
429 GetArkUINodeModifiers()->getListModifier()->resetListScrollBar(nativeNode);
430 } else {
431 int32_t barState = secondArg->ToNumber(vm)->Value();
432 GetArkUINodeModifiers()->getListModifier()->setListScrollBar(nativeNode, barState);
433 }
434
435 return panda::JSValueRef::Undefined(vm);
436 }
437
ResetListScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)438 ArkUINativeModuleValue ListBridge::ResetListScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
439 {
440 EcmaVM* vm = runtimeCallInfo->GetVM();
441 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
442 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
443 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
444 GetArkUINodeModifiers()->getListModifier()->resetListScrollBar(nativeNode);
445
446 return panda::JSValueRef::Undefined(vm);
447 }
448
SetListScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)449 ArkUINativeModuleValue ListBridge::SetListScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
450 {
451 EcmaVM* vm = runtimeCallInfo->GetVM();
452 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
453 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
454 Local<JSValueRef> scrollBarArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
455 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
456
457 CalcDimension scrollBarWidth;
458 if (!ArkTSUtils::ParseJsDimension(vm, scrollBarArg, scrollBarWidth, DimensionUnit::VP) || scrollBarArg->IsNull() ||
459 scrollBarArg->IsUndefined() || (scrollBarArg->IsString(vm) && scrollBarWidth.ToString().empty()) ||
460 LessNotEqual(scrollBarWidth.Value(), 0.0) || scrollBarWidth.Unit() == DimensionUnit::PERCENT) {
461 GetArkUINodeModifiers()->getListModifier()->resetListScrollBarWidth(nativeNode);
462 } else {
463 GetArkUINodeModifiers()->getListModifier()->setListScrollBarWidth(
464 nativeNode, scrollBarWidth.ToString().c_str());
465 }
466 return panda::JSValueRef::Undefined(vm);
467 }
468
ResetListScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)469 ArkUINativeModuleValue ListBridge::ResetListScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
470 {
471 EcmaVM* vm = runtimeCallInfo->GetVM();
472 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
473 Local<JSValueRef> argNode = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
474 auto nativeNode = nodePtr(argNode->ToNativePointer(vm)->Value());
475 GetArkUINodeModifiers()->getListModifier()->resetListScrollBarWidth(nativeNode);
476 return panda::JSValueRef::Undefined(vm);
477 }
478
SetListScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)479 ArkUINativeModuleValue ListBridge::SetListScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
480 {
481 EcmaVM* vm = runtimeCallInfo->GetVM();
482 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
483 Local<JSValueRef> argNode = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
484 Local<JSValueRef> argColor = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
485 auto nativeNode = nodePtr(argNode->ToNativePointer(vm)->Value());
486 std::string color = "";
487 if (!ArkTSUtils::ParseJsString(vm, argColor, color) || argColor->IsUndefined() || color.empty()) {
488 GetArkUINodeModifiers()->getListModifier()->resetListScrollBarColor(nativeNode);
489 } else {
490 GetArkUINodeModifiers()->getListModifier()->setListScrollBarColor(nativeNode, color.c_str());
491 }
492 return panda::JSValueRef::Undefined(vm);
493 }
494
ResetListScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)495 ArkUINativeModuleValue ListBridge::ResetListScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
496 {
497 EcmaVM* vm = runtimeCallInfo->GetVM();
498 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
499 Local<JSValueRef> argNode = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
500 auto nativeNode = nodePtr(argNode->ToNativePointer(vm)->Value());
501 GetArkUINodeModifiers()->getListModifier()->resetListScrollBarColor(nativeNode);
502 return panda::JSValueRef::Undefined(vm);
503 }
504
SetAlignListItem(ArkUIRuntimeCallInfo * runtimeCallInfo)505 ArkUINativeModuleValue ListBridge::SetAlignListItem(ArkUIRuntimeCallInfo* runtimeCallInfo)
506 {
507 EcmaVM* vm = runtimeCallInfo->GetVM();
508 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
509 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
510 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
511 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
512 int32_t listItemAlign = secondArg->Int32Value(vm);
513 GetArkUINodeModifiers()->getListModifier()->setAlignListItem(nativeNode, listItemAlign);
514
515 return panda::JSValueRef::Undefined(vm);
516 }
517
ResetAlignListItem(ArkUIRuntimeCallInfo * runtimeCallInfo)518 ArkUINativeModuleValue ListBridge::ResetAlignListItem(ArkUIRuntimeCallInfo* runtimeCallInfo)
519 {
520 EcmaVM* vm = runtimeCallInfo->GetVM();
521 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
522 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
523 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
524 GetArkUINodeModifiers()->getListModifier()->resetAlignListItem(nativeNode);
525 return panda::JSValueRef::Undefined(vm);
526 }
527
SetScrollSnapAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)528 ArkUINativeModuleValue ListBridge::SetScrollSnapAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
529 {
530 EcmaVM* vm = runtimeCallInfo->GetVM();
531 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
532 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
533 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
534 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
535 if (secondArg->IsUndefined()) {
536 GetArkUINodeModifiers()->getListModifier()->resetScrollSnapAlign(nativeNode);
537 } else {
538 int32_t scrollSnapAlign = secondArg->Int32Value(vm);
539 GetArkUINodeModifiers()->getListModifier()->setScrollSnapAlign(nativeNode, scrollSnapAlign);
540 }
541
542 return panda::JSValueRef::Undefined(vm);
543 }
544
ResetScrollSnapAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)545 ArkUINativeModuleValue ListBridge::ResetScrollSnapAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
546 {
547 EcmaVM* vm = runtimeCallInfo->GetVM();
548 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
549 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
550 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
551 GetArkUINodeModifiers()->getListModifier()->resetScrollSnapAlign(nativeNode);
552 return panda::JSValueRef::Undefined(vm);
553 }
554
SetContentStartOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)555 ArkUINativeModuleValue ListBridge::SetContentStartOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
556 {
557 EcmaVM* vm = runtimeCallInfo->GetVM();
558 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
559 Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
560 Local<JSValueRef> startOffsetArg = runtimeCallInfo->GetCallArgRef(1);
561 auto nativeNode = nodePtr(frameNodeArg->ToNativePointer(vm)->Value());
562 double startOffset = 0.0;
563 ArkTSUtils::ParseJsDouble(vm, startOffsetArg, startOffset);
564
565 GetArkUINodeModifiers()->getListModifier()->setContentStartOffset(nativeNode, startOffset);
566
567 return panda::JSValueRef::Undefined(vm);
568 }
569
ResetContentStartOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)570 ArkUINativeModuleValue ListBridge::ResetContentStartOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
571 {
572 EcmaVM* vm = runtimeCallInfo->GetVM();
573 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
574 Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
575 auto nativeNode = nodePtr(frameNodeArg->ToNativePointer(vm)->Value());
576 GetArkUINodeModifiers()->getListModifier()->resetContentStartOffset(nativeNode);
577
578 return panda::JSValueRef::Undefined(vm);
579 }
580
SetContentEndOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)581 ArkUINativeModuleValue ListBridge::SetContentEndOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
582 {
583 EcmaVM* vm = runtimeCallInfo->GetVM();
584 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
585 Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
586 Local<JSValueRef> endOffsetArg = runtimeCallInfo->GetCallArgRef(1);
587 auto nativeNode = nodePtr(frameNodeArg->ToNativePointer(vm)->Value());
588 double endOffset = 0.0;
589 ArkTSUtils::ParseJsDouble(vm, endOffsetArg, endOffset);
590
591 GetArkUINodeModifiers()->getListModifier()->setContentEndOffset(nativeNode, endOffset);
592
593 return panda::JSValueRef::Undefined(vm);
594 }
595
ResetContentEndOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)596 ArkUINativeModuleValue ListBridge::ResetContentEndOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
597 {
598 EcmaVM* vm = runtimeCallInfo->GetVM();
599 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
600 Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
601 auto nativeNode = nodePtr(frameNodeArg->ToNativePointer(vm)->Value());
602 GetArkUINodeModifiers()->getListModifier()->resetContentEndOffset(nativeNode);
603
604 return panda::JSValueRef::Undefined(vm);
605 }
606
SetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)607 ArkUINativeModuleValue ListBridge::SetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
608 {
609 EcmaVM* vm = runtimeCallInfo->GetVM();
610 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
611 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
612 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
613 Local<JSValueRef> dividerStrokeWidthArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
614 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_2);
615 Local<JSValueRef> dividerStartMarginArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_3);
616 Local<JSValueRef> dividerEndMarginArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_4);
617 if (dividerStrokeWidthArgs->IsUndefined() && dividerStartMarginArgs->IsUndefined() &&
618 dividerEndMarginArgs->IsUndefined() && colorArg->IsUndefined()) {
619 GetArkUINodeModifiers()->getListModifier()->listResetDivider(nativeNode);
620 return panda::JSValueRef::Undefined(vm);
621 }
622
623 CalcDimension dividerStrokeWidth;
624 CalcDimension dividerStartMargin;
625 CalcDimension dividerEndMargin;
626 uint32_t color;
627 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
628 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
629 auto context = frameNode->GetContext();
630 CHECK_NULL_RETURN(context, panda::NativePointerRef::New(vm, nullptr));
631 auto themeManager = context->GetThemeManager();
632 CHECK_NULL_RETURN(themeManager, panda::NativePointerRef::New(vm, nullptr));
633 auto listTheme = themeManager->GetTheme<ListTheme>();
634 CHECK_NULL_RETURN(listTheme, panda::NativePointerRef::New(vm, nullptr));
635
636 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, dividerStrokeWidthArgs, dividerStrokeWidth) ||
637 LessNotEqual(dividerStrokeWidth.Value(), 0.0f) || dividerStrokeWidth.Unit() == DimensionUnit::PERCENT) {
638 dividerStrokeWidth.Reset();
639 }
640 Color colorObj;
641 if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, colorObj)) {
642 color = listTheme->GetDividerColor().GetValue();
643 } else {
644 color = colorObj.GetValue();
645 }
646 if (!ArkTSUtils::ParseJsDimensionVp(vm, dividerStartMarginArgs, dividerStartMargin) ||
647 LessNotEqual(dividerStartMargin.Value(), 0.0f) || dividerStartMargin.Unit() == DimensionUnit::PERCENT) {
648 dividerStartMargin.Reset();
649 }
650 if (!ArkTSUtils::ParseJsDimensionVp(vm, dividerEndMarginArgs, dividerEndMargin) ||
651 LessNotEqual(dividerEndMargin.Value(), 0.0f) || dividerEndMargin.Unit() == DimensionUnit::PERCENT) {
652 dividerEndMargin.Reset();
653 }
654 uint32_t size = ARG_LENGTH;
655 ArkUI_Float32 values[size];
656 int32_t units[size];
657 values[LIST_ARG_INDEX_0] = static_cast<ArkUI_Float32>(dividerStrokeWidth.Value());
658 values[LIST_ARG_INDEX_1] = static_cast<ArkUI_Float32>(dividerStartMargin.Value());
659 values[LIST_ARG_INDEX_2] = static_cast<ArkUI_Float32>(dividerEndMargin.Value());
660 units[LIST_ARG_INDEX_0] = static_cast<int32_t>(dividerStrokeWidth.Unit());
661 units[LIST_ARG_INDEX_1] = static_cast<int32_t>(dividerStartMargin.Unit());
662 units[LIST_ARG_INDEX_2] = static_cast<int32_t>(dividerEndMargin.Unit());
663 GetArkUINodeModifiers()->getListModifier()->listSetDivider(nativeNode, color, values, units, size);
664
665 return panda::JSValueRef::Undefined(vm);
666 }
667
ResetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)668 ArkUINativeModuleValue ListBridge::ResetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
669 {
670 EcmaVM* vm = runtimeCallInfo->GetVM();
671 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
672 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
673 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
674 GetArkUINodeModifiers()->getListModifier()->listResetDivider(nativeNode);
675 return panda::JSValueRef::Undefined(vm);
676 }
677
SetChainAnimationOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)678 ArkUINativeModuleValue ListBridge::SetChainAnimationOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
679 {
680 EcmaVM* vm = runtimeCallInfo->GetVM();
681 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
682 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
683 Local<JSValueRef> minSpaceArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_1);
684 Local<JSValueRef> maxSpaceArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_2);
685 Local<JSValueRef> conductivityArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_3);
686 Local<JSValueRef> intensityArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_4);
687 Local<JSValueRef> edgeEffectArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_5);
688 Local<JSValueRef> stiffnessArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_6);
689 Local<JSValueRef> dampingArgs = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_7);
690
691 CalcDimension minSpace;
692 CalcDimension maxSpace;
693
694 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
695 if (minSpaceArgs->IsUndefined() && maxSpaceArgs->IsUndefined() && conductivityArgs->IsUndefined() &&
696 intensityArgs->IsUndefined() && edgeEffectArgs->IsUndefined() && stiffnessArgs->IsUndefined() &&
697 dampingArgs->IsUndefined()) {
698 GetArkUINodeModifiers()->getListModifier()->resetChainAnimationOptions(nativeNode);
699 return panda::JSValueRef::Undefined(vm);
700 } else {
701 RefPtr<ListTheme> listTheme = ArkTSUtils::GetTheme<ListTheme>();
702 CHECK_NULL_RETURN(listTheme, panda::NativePointerRef::New(vm, nullptr));
703
704 minSpace = listTheme->GetChainMinSpace();
705 maxSpace = listTheme->GetChainMaxSpace();
706 ArkUIChainAnimationOptionsType chainAnimationOptions;
707
708 double conductivity;
709 double intensity;
710
711 chainAnimationOptions.conductivity = listTheme->GetChainConductivity();
712 chainAnimationOptions.intensity = listTheme->GetChainIntensity();
713 chainAnimationOptions.edgeEffect = 0;
714 chainAnimationOptions.stiffness = listTheme->GetChainStiffness();
715 chainAnimationOptions.damping = listTheme->GetChainDamping();
716
717 ArkTSUtils::ParseJsDimension(vm, minSpaceArgs, minSpace, DimensionUnit::VP);
718 ArkTSUtils::ParseJsDimension(vm, maxSpaceArgs, maxSpace, DimensionUnit::VP);
719 ArkTSUtils::ParseJsDouble(vm, conductivityArgs, conductivity);
720 chainAnimationOptions.conductivity = static_cast<ArkUI_Float32>(conductivity);
721
722 ArkTSUtils::ParseJsDouble(vm, intensityArgs, intensity);
723 chainAnimationOptions.intensity = static_cast<ArkUI_Float32>(intensity);
724
725 if (edgeEffectArgs->IsNumber()) {
726 chainAnimationOptions.edgeEffect = edgeEffectArgs->ToNumber(vm)->Value();
727 }
728
729 double stiffness;
730 double damping;
731
732 ArkTSUtils::ParseJsDouble(vm, stiffnessArgs, stiffness);
733 chainAnimationOptions.stiffness = static_cast<ArkUI_Float32>(stiffness);
734
735 ArkTSUtils::ParseJsDouble(vm, dampingArgs, damping);
736 chainAnimationOptions.damping = static_cast<ArkUI_Float32>(damping);
737
738 chainAnimationOptions.minSpace = minSpace.Value();
739 chainAnimationOptions.minSpaceUnits = static_cast<int32_t>(minSpace.Unit());
740 chainAnimationOptions.maxSpace = maxSpace.Value();
741 chainAnimationOptions.maxSpaceUnits = static_cast<int32_t>(maxSpace.Unit());
742
743 GetArkUINodeModifiers()->getListModifier()->setChainAnimationOptions(nativeNode, &chainAnimationOptions);
744 }
745
746 return panda::JSValueRef::Undefined(vm);
747 }
748
ResetChainAnimationOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)749 ArkUINativeModuleValue ListBridge::ResetChainAnimationOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
750 {
751 EcmaVM* vm = runtimeCallInfo->GetVM();
752 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
753 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
754 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
755 GetArkUINodeModifiers()->getListModifier()->resetChainAnimationOptions(nativeNode);
756 return panda::JSValueRef::Undefined(vm);
757 }
758
SetListChildrenMainSize(ArkUIRuntimeCallInfo * runtimeCallInfo)759 ArkUINativeModuleValue ListBridge::SetListChildrenMainSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
760 {
761 EcmaVM* vm = runtimeCallInfo->GetVM();
762 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
763 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
764 // 2: argument count.
765 if (info.Length() != 2 || !(info[1]->IsObject())) {
766 return panda::JSValueRef::Undefined(vm);
767 }
768 JSList::SetChildrenMainSize(Framework::JSRef<Framework::JSObject>::Cast(info[1]));
769
770 return panda::JSValueRef::Undefined(vm);
771 }
772
ResetListChildrenMainSize(ArkUIRuntimeCallInfo * runtimeCallInfo)773 ArkUINativeModuleValue ListBridge::ResetListChildrenMainSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
774 {
775 EcmaVM* vm = runtimeCallInfo->GetVM();
776 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
777 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(LIST_ARG_INDEX_0);
778 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
779 GetArkUINodeModifiers()->getListModifier()->resetListChildrenMainSize(nativeNode);
780
781 return panda::JSValueRef::Undefined(vm);
782 }
783
SetInitialIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)784 ArkUINativeModuleValue ListBridge::SetInitialIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
785 {
786 EcmaVM* vm = runtimeCallInfo->GetVM();
787 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
788 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
789 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
790 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
791 int32_t index = secondArg->ToNumber(vm)->Value();
792 GetArkUINodeModifiers()->getListModifier()->setInitialIndex(nativeNode, index);
793 return panda::JSValueRef::Undefined(vm);
794 }
795
ResetInitialIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)796 ArkUINativeModuleValue ListBridge::ResetInitialIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
797 {
798 EcmaVM* vm = runtimeCallInfo->GetVM();
799 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
800 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
801 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
802 GetArkUINodeModifiers()->getListModifier()->resetInitialIndex(nativeNode);
803 return panda::JSValueRef::Undefined(vm);
804 }
805
SetSpace(ArkUIRuntimeCallInfo * runtimeCallInfo)806 ArkUINativeModuleValue ListBridge::SetSpace(ArkUIRuntimeCallInfo* runtimeCallInfo)
807 {
808 EcmaVM* vm = runtimeCallInfo->GetVM();
809 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
810 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
811 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
812 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
813 float space = secondArg->ToNumber(vm)->Value();
814 GetArkUINodeModifiers()->getListModifier()->setListSpace(nativeNode, space);
815 return panda::JSValueRef::Undefined(vm);
816 }
817
ResetSpace(ArkUIRuntimeCallInfo * runtimeCallInfo)818 ArkUINativeModuleValue ListBridge::ResetSpace(ArkUIRuntimeCallInfo* runtimeCallInfo)
819 {
820 EcmaVM* vm = runtimeCallInfo->GetVM();
821 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
822 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
823 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
824 GetArkUINodeModifiers()->getListModifier()->resetListSpace(nativeNode);
825 return panda::JSValueRef::Undefined(vm);
826 }
827
SetInitialScroller(ArkUIRuntimeCallInfo * runtimeCallInfo)828 ArkUINativeModuleValue ListBridge::SetInitialScroller(ArkUIRuntimeCallInfo* runtimeCallInfo)
829 {
830 EcmaVM* vm = runtimeCallInfo->GetVM();
831 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
832 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
833 Framework::JSRef<Framework::JSVal> args = info[1];
834 if (args->IsObject()) {
835 Framework::JSScroller* scroller =
836 Framework::JSRef<Framework::JSObject>::Cast(args)->Unwrap<Framework::JSScroller>();
837 RefPtr<Framework::JSScroller> jsScroller = Referenced::Claim(scroller);
838 jsScroller->SetInstanceId(Container::CurrentId());
839 SetScroller(runtimeCallInfo, jsScroller);
840 }
841 return panda::JSValueRef::Undefined(vm);
842 }
843
ResetInitialScroller(ArkUIRuntimeCallInfo * runtimeCallInfo)844 ArkUINativeModuleValue ListBridge::ResetInitialScroller(ArkUIRuntimeCallInfo* runtimeCallInfo)
845 {
846 EcmaVM* vm = runtimeCallInfo->GetVM();
847 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
848 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
849 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
850 GetArkUINodeModifiers()->getListModifier()->resetInitialScroller(nativeNode);
851 return panda::JSValueRef::Undefined(vm);
852 }
853
SetScroller(ArkUIRuntimeCallInfo * runtimeCallInfo,RefPtr<Framework::JSScroller> jsScroller)854 void ListBridge::SetScroller(ArkUIRuntimeCallInfo* runtimeCallInfo, RefPtr<Framework::JSScroller> jsScroller)
855 {
856 if (jsScroller) {
857 EcmaVM* vm = runtimeCallInfo->GetVM();
858 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
859 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
860 RefPtr<ScrollControllerBase> listController = ListModel::GetInstance()->CreateScrollController();
861 jsScroller->SetController(listController);
862 auto proxy = jsScroller->GetScrollBarProxy();
863 if (!proxy) {
864 proxy = AceType::MakeRefPtr<NG::ScrollBarProxy>();
865 jsScroller->SetScrollBarProxy(proxy);
866 }
867 auto controller = reinterpret_cast<ArkUINodeHandle>(AceType::RawPtr(listController));
868 auto proxyPtr = reinterpret_cast<ArkUINodeHandle>(AceType::RawPtr(proxy));
869 GetArkUINodeModifiers()->getListModifier()->setInitialScroller(nativeNode, controller, proxyPtr);
870 }
871 }
872
SetOnScrollIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)873 ArkUINativeModuleValue ListBridge::SetOnScrollIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
874 {
875 EcmaVM *vm = runtimeCallInfo->GetVM();
876 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
877 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
878 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
879 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
880 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
881 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollIndex(nativeNode);
882 return panda::JSValueRef::Undefined(vm);
883 }
884 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
885 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
886 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
887
888 std::function<void(int32_t, int32_t, int32_t)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
889 const int32_t start, const int32_t end,
890 const int32_t center) {
891 panda::LocalScope pandaScope(vm);
892 panda::TryCatch trycatch(vm);
893 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
894
895 panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, start);
896 panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, end);
897 panda::Local<panda::NumberRef> centerParam = panda::NumberRef::New(vm, center);
898 // 3: Array length
899 panda::Local<panda::JSValueRef> params[3] = { startParam, endParam, centerParam };
900 func->Call(vm, func.ToLocal(), params, 3); // 3: Array length
901 };
902 GetArkUINodeModifiers()->getListModifier()->setOnListScrollIndexCallBack(
903 nativeNode, reinterpret_cast<void*>(&callback));
904 return panda::JSValueRef::Undefined(vm);
905 }
906
SetListItemIndex(const EcmaVM * vm,const ListItemIndex indexInfo)907 Local<panda::ObjectRef> SetListItemIndex(const EcmaVM* vm, const ListItemIndex indexInfo)
908 {
909 const char* keys[] = { "index", "itemIndexInGroup", "itemGroupArea" };
910 auto indexInGroup = panda::NumberRef::Undefined(vm);
911 if (indexInfo.indexInGroup != -1) {
912 indexInGroup = panda::NumberRef::New(vm, static_cast<int32_t>(indexInfo.indexInGroup));
913 }
914 auto area = panda::NumberRef::Undefined(vm);
915 if (indexInfo.area != -1) {
916 area = panda::NumberRef::New(vm, static_cast<int32_t>(indexInfo.area));
917 }
918 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, static_cast<int32_t>(indexInfo.index)), indexInGroup,
919 area };
920 return panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
921 }
922
SetOnScrollVisibleContentChange(ArkUIRuntimeCallInfo * runtimeCallInfo)923 ArkUINativeModuleValue ListBridge::SetOnScrollVisibleContentChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
924 {
925 EcmaVM *vm = runtimeCallInfo->GetVM();
926 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
927 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
928 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
929 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
930 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
931 GetArkUINodeModifiers()->getListModifier()->resetOnScrollVisibleContentChange(nativeNode);
932 return panda::JSValueRef::Undefined(vm);
933 }
934 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
935 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
936 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
937
938 std::function<void(ListItemIndex, ListItemIndex)> callback =
939 [vm, frameNode, func = panda::CopyableGlobal(vm, func)](const ListItemIndex start, const ListItemIndex end) {
940 panda::LocalScope pandaScope(vm);
941 panda::TryCatch trycatch(vm);
942 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
943
944 auto startParam = SetListItemIndex(vm, start);
945 auto endParam = SetListItemIndex(vm, end);
946 startParam->SetNativePointerFieldCount(vm, 1);
947 startParam->SetNativePointerField(vm, 0, static_cast<void*>(&startParam));
948 endParam->SetNativePointerFieldCount(vm, 1);
949 endParam->SetNativePointerField(vm, 0, static_cast<void*>(&endParam));
950 // 2: Array length
951 panda::Local<panda::JSValueRef> params[2] = { startParam, endParam };
952 func->Call(vm, func.ToLocal(), params, 2); // 2: Array length
953 };
954 GetArkUINodeModifiers()->getListModifier()->setOnScrollVisibleContentChange(
955 nativeNode, reinterpret_cast<void*>(&callback));
956 return panda::JSValueRef::Undefined(vm);
957 }
958
SetOnItemMove(ArkUIRuntimeCallInfo * runtimeCallInfo)959 ArkUINativeModuleValue ListBridge::SetOnItemMove(ArkUIRuntimeCallInfo* runtimeCallInfo)
960 {
961 EcmaVM *vm = runtimeCallInfo->GetVM();
962 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
963 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
964 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
965 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
966 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
967 GetArkUINodeModifiers()->getListModifier()->resetOnItemMove(nativeNode);
968 return panda::JSValueRef::Undefined(vm);
969 }
970 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
971 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
972 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
973
974 std::function<bool(int32_t, int32_t)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
975 int32_t start, int32_t end) -> bool {
976 panda::LocalScope pandaScope(vm);
977 panda::TryCatch trycatch(vm);
978 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
979
980 panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, start);
981 panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, end);
982 // 2: Array length
983 panda::Local<panda::JSValueRef> params[2] = { startParam, endParam};
984 auto result = func->Call(vm, func.ToLocal(), params, 2); // 2: Array length
985 if (result->IsBoolean()) {
986 return result->ToBoolean(vm)->Value();
987 }
988 return false;
989 };
990 GetArkUINodeModifiers()->getListModifier()->setOnItemMove(
991 nativeNode, reinterpret_cast<void*>(&callback));
992 return panda::JSValueRef::Undefined(vm);
993 }
994
SetOnItemDragStart(ArkUIRuntimeCallInfo * runtimeCallInfo)995 ArkUINativeModuleValue ListBridge::SetOnItemDragStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
996 {
997 EcmaVM *vm = runtimeCallInfo->GetVM();
998 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
999 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1000 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1001 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1002 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1003
1004 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
1005 if (!info[1]->IsFunction()) {
1006 return panda::JSValueRef::Undefined(vm);
1007 }
1008
1009 RefPtr<JsDragFunction> jsOnDragFunc = AceType::MakeRefPtr<JsDragFunction>(JSRef<JSFunc>::Cast(info[1]));
1010 std::function<RefPtr<AceType>(const ItemDragInfo&, int32_t)> callback =
1011 [vm, frameNode, func = std::move(jsOnDragFunc), execCtx = info.GetExecutionContext()](
1012 const ItemDragInfo& dragInfo, int32_t itemIndex) -> RefPtr<AceType> {
1013 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx, nullptr);
1014 panda::LocalScope pandaScope(vm);
1015 panda::TryCatch trycatch(vm);
1016
1017 auto ret = func->ItemDragStartExecute(dragInfo, itemIndex);
1018 if (!ret->IsFunction()) {
1019 return nullptr;
1020 }
1021
1022 auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(ret));
1023 if (!builderFunc) {
1024 return nullptr;
1025 }
1026 // use another VSP instance while executing the builder function
1027 ViewStackModel::GetInstance()->NewScope();
1028 {
1029 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1030 builderFunc->Execute();
1031 }
1032 return ViewStackModel::GetInstance()->Finish();
1033 };
1034 GetArkUINodeModifiers()->getListModifier()->setOnItemDragStart(nativeNode, reinterpret_cast<void*>(&callback));
1035 return panda::JSValueRef::Undefined(vm);
1036 }
1037
SetOnItemDragEnter(ArkUIRuntimeCallInfo * runtimeCallInfo)1038 ArkUINativeModuleValue ListBridge::SetOnItemDragEnter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1039 {
1040 EcmaVM *vm = runtimeCallInfo->GetVM();
1041 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1042 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1043 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1044 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1045 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1046
1047 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
1048 if (!info[1]->IsFunction()) {
1049 return panda::JSValueRef::Undefined(vm);
1050 }
1051 RefPtr<JsDragFunction> jsOnDragFunc = AceType::MakeRefPtr<JsDragFunction>(JSRef<JSFunc>::Cast(info[1]));
1052
1053 std::function<void(const ItemDragInfo&)> callback = [vm, frameNode, func = std::move(jsOnDragFunc),
1054 execCtx = info.GetExecutionContext()](
1055 const ItemDragInfo& dragInfo) {
1056 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx);
1057 panda::LocalScope pandaScope(vm);
1058 panda::TryCatch trycatch(vm);
1059
1060 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1061 func->ItemDragEnterExecute(dragInfo);
1062 };
1063 GetArkUINodeModifiers()->getListModifier()->setOnItemDragEnter(nativeNode, reinterpret_cast<void*>(&callback));
1064 return panda::JSValueRef::Undefined(vm);
1065 }
1066
SetOnItemDragMove(ArkUIRuntimeCallInfo * runtimeCallInfo)1067 ArkUINativeModuleValue ListBridge::SetOnItemDragMove(ArkUIRuntimeCallInfo* runtimeCallInfo)
1068 {
1069 EcmaVM *vm = runtimeCallInfo->GetVM();
1070 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1071 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1072 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1073 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1074 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1075
1076 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
1077 if (!info[1]->IsFunction()) {
1078 return panda::JSValueRef::Undefined(vm);
1079 }
1080 RefPtr<JsDragFunction> jsOnDragFunc = AceType::MakeRefPtr<JsDragFunction>(JSRef<JSFunc>::Cast(info[1]));
1081
1082 std::function<void(const ItemDragInfo&, int32_t, int32_t)> callback =
1083 [vm, frameNode, func = std::move(jsOnDragFunc), execCtx = info.GetExecutionContext()](
1084 const ItemDragInfo& dragInfo, int32_t itemIndex, int32_t insertIndex) {
1085 JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx);
1086 panda::LocalScope pandaScope(vm);
1087 panda::TryCatch trycatch(vm);
1088
1089 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1090 func->ItemDragMoveExecute(dragInfo, itemIndex, insertIndex);
1091 };
1092 GetArkUINodeModifiers()->getListModifier()->setOnItemDragMove(
1093 nativeNode, reinterpret_cast<void*>(&callback));
1094 return panda::JSValueRef::Undefined(vm);
1095 }
1096
SetOnItemDragLeave(ArkUIRuntimeCallInfo * runtimeCallInfo)1097 ArkUINativeModuleValue ListBridge::SetOnItemDragLeave(ArkUIRuntimeCallInfo* runtimeCallInfo)
1098 {
1099 EcmaVM *vm = runtimeCallInfo->GetVM();
1100 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1101 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1102 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1103 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1104 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1105
1106 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
1107 if (!info[1]->IsFunction()) {
1108 return panda::JSValueRef::Undefined(vm);
1109 }
1110 RefPtr<JsDragFunction> jsOnDragFunc = AceType::MakeRefPtr<JsDragFunction>(JSRef<JSFunc>::Cast(info[1]));
1111
1112 std::function<void(const ItemDragInfo&, int32_t)> callback = [vm, frameNode, func = std::move(jsOnDragFunc)](
1113 const ItemDragInfo& dragInfo, int32_t itemIndex) {
1114 panda::LocalScope pandaScope(vm);
1115 panda::TryCatch trycatch(vm);
1116
1117 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1118 func->ItemDragLeaveExecute(dragInfo, itemIndex);
1119 };
1120 GetArkUINodeModifiers()->getListModifier()->setOnItemDragLeave(nativeNode, reinterpret_cast<void*>(&callback));
1121 return panda::JSValueRef::Undefined(vm);
1122 }
1123
SetOnItemDrop(ArkUIRuntimeCallInfo * runtimeCallInfo)1124 ArkUINativeModuleValue ListBridge::SetOnItemDrop(ArkUIRuntimeCallInfo* runtimeCallInfo)
1125 {
1126 EcmaVM *vm = runtimeCallInfo->GetVM();
1127 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1128 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1129 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1130 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1131 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1132
1133 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
1134 if (!info[1]->IsFunction()) {
1135 return panda::JSValueRef::Undefined(vm);
1136 }
1137 RefPtr<JsDragFunction> jsOnDragFunc = AceType::MakeRefPtr<JsDragFunction>(JSRef<JSFunc>::Cast(info[1]));
1138
1139 std::function<void(const ItemDragInfo&, int32_t, int32_t, bool)> callback =
1140 [vm, frameNode, func = std::move(jsOnDragFunc)](
1141 const ItemDragInfo& dragInfo, int32_t itemIndex, int32_t insertIndex, bool isSuccess) {
1142 panda::LocalScope pandaScope(vm);
1143 panda::TryCatch trycatch(vm);
1144
1145 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1146 func->ItemDropExecute(dragInfo, itemIndex, insertIndex, isSuccess);
1147 };
1148 GetArkUINodeModifiers()->getListModifier()->setOnItemDrop(nativeNode, reinterpret_cast<void*>(&callback));
1149 return panda::JSValueRef::Undefined(vm);
1150 }
1151
SetOnListScrollStart(ArkUIRuntimeCallInfo * runtimeCallInfo)1152 ArkUINativeModuleValue ListBridge::SetOnListScrollStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
1153 {
1154 EcmaVM *vm = runtimeCallInfo->GetVM();
1155 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1156 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1157 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1158 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1159 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1160 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollStart(nativeNode);
1161 return panda::JSValueRef::Undefined(vm);
1162 }
1163 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1164 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1165 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1166
1167 std::function<void()> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)]() {
1168 panda::LocalScope pandaScope(vm);
1169 panda::TryCatch trycatch(vm);
1170 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1171 func->Call(vm, func.ToLocal(), nullptr, 0);
1172 };
1173 GetArkUINodeModifiers()->getListModifier()->setOnListScrollStartCallBack(
1174 nativeNode, reinterpret_cast<void*>(&callback));
1175 return panda::JSValueRef::Undefined(vm);
1176 }
1177
SetOnListScrollStop(ArkUIRuntimeCallInfo * runtimeCallInfo)1178 ArkUINativeModuleValue ListBridge::SetOnListScrollStop(ArkUIRuntimeCallInfo* runtimeCallInfo)
1179 {
1180 EcmaVM *vm = runtimeCallInfo->GetVM();
1181 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1182 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1183 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1184 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1185 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1186 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollStop(nativeNode);
1187 return panda::JSValueRef::Undefined(vm);
1188 }
1189 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1190 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1191 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1192 std::function<void(void)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)]() {
1193 panda::LocalScope pandaScope(vm);
1194 panda::TryCatch trycatch(vm);
1195 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1196 func->Call(vm, func.ToLocal(), nullptr, 0);
1197 };
1198 GetArkUINodeModifiers()->getListModifier()->setOnListScrollStopCallBack(
1199 nativeNode, reinterpret_cast<void*>(&callback));
1200 return panda::JSValueRef::Undefined(vm);
1201 }
1202
SetOnListScrollFrameBegin(ArkUIRuntimeCallInfo * runtimeCallInfo)1203 ArkUINativeModuleValue ListBridge::SetOnListScrollFrameBegin(ArkUIRuntimeCallInfo* runtimeCallInfo)
1204 {
1205 EcmaVM* vm = runtimeCallInfo->GetVM();
1206 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1207 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1208 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1209 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1210 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1211 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollFrameBegin(nativeNode);
1212 return panda::JSValueRef::Undefined(vm);
1213 }
1214 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1215 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1216 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1217 std::function<ScrollFrameResult(Dimension, ScrollState)> callback = [vm, frameNode,
1218 func = panda::CopyableGlobal(vm, func)](Dimension offset, ScrollState state) -> ScrollFrameResult {
1219 panda::LocalScope pandaScope(vm);
1220 panda::TryCatch trycatch(vm);
1221 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1222
1223 panda::Local<panda::NumberRef> offsetParam = panda::NumberRef::New(
1224 vm, static_cast<double>(offset.ConvertToVp()));
1225 panda::Local<panda::NumberRef> stateParam = panda::NumberRef::New(vm, static_cast<double>(state));
1226 // 2: Array length
1227 panda::Local<panda::JSValueRef> params[2] = { offsetParam, stateParam };
1228 auto value = func->Call(vm, func.ToLocal(), params, 2); // 2: Array length
1229
1230 OHOS::Ace::ScrollFrameResult scrollRes { .offset = offset };
1231 if (value->IsNumber()) {
1232 scrollRes.offset = Dimension(value->ToNumber(vm)->Value(), DimensionUnit::VP);
1233 }
1234 if (value->IsObject(vm)) {
1235 auto resultObj = value->ToObject(vm);
1236 panda::Local<panda::JSValueRef> remain = resultObj->Get(vm, panda::StringRef::NewFromUtf8(vm,
1237 "offsetRemain"));
1238 if (remain->IsNumber()) {
1239 scrollRes.offset = Dimension(remain->ToNumber(vm)->Value(), DimensionUnit::VP);
1240 }
1241 }
1242 return scrollRes;
1243 };
1244 GetArkUINodeModifiers()->getListModifier()->setOnListScrollFrameBeginCallBack(
1245 nativeNode, reinterpret_cast<void*>(&callback));
1246 return panda::JSValueRef::Undefined(vm);
1247 }
1248
SetOnListWillScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1249 ArkUINativeModuleValue ListBridge::SetOnListWillScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1250 {
1251 EcmaVM* vm = runtimeCallInfo->GetVM();
1252 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1253 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1254 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1255 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1256 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1257 GetArkUINodeModifiers()->getListModifier()->resetOnListWillScroll(nativeNode);
1258 return panda::JSValueRef::Undefined(vm);
1259 }
1260 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1261 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1262 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1263 std::function<ScrollFrameResult(CalcDimension, ScrollState, ScrollSource)> callback =
1264 [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
1265 const CalcDimension& scrollOffset, const ScrollState& scrollState, ScrollSource scrollSource) {
1266 panda::LocalScope pandaScope(vm);
1267 panda::TryCatch trycatch(vm);
1268 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1269
1270 panda::Local<panda::NumberRef> offsetParam = panda::NumberRef::New(
1271 vm, static_cast<double>(scrollOffset.ConvertToVp()));
1272 panda::Local<panda::NumberRef> stateParam = panda::NumberRef::New(vm, static_cast<int32_t>(scrollState));
1273 panda::Local<panda::NumberRef> sourceParam = panda::NumberRef::New(vm, static_cast<int32_t>(scrollSource));
1274 // 3: Array length
1275 panda::Local<panda::JSValueRef> params[3] = { offsetParam, stateParam, sourceParam };
1276 auto result = func->Call(vm, func.ToLocal(), params, 3); // 4: Array length
1277 ScrollFrameResult scrollRes { .offset = scrollOffset };
1278
1279 if (result->IsObject(vm)) {
1280 auto resultObj = result->ToObject(vm);
1281 panda::Local<panda::JSValueRef> dxRemainValue =
1282 resultObj->Get(vm, panda::StringRef::NewFromUtf8(vm, "offsetRemain"));
1283 if (dxRemainValue->IsNumber()) {
1284 scrollRes.offset = Dimension(dxRemainValue->ToNumber(vm)->Value(), DimensionUnit::VP);
1285 }
1286 }
1287 return scrollRes;
1288 };
1289 GetArkUINodeModifiers()->getListModifier()->setOnListWillScrollCallBack(
1290 nativeNode, reinterpret_cast<void*>(&callback));
1291 return panda::JSValueRef::Undefined(vm);
1292 }
1293
SetOnListDidScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1294 ArkUINativeModuleValue ListBridge::SetOnListDidScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1295 {
1296 EcmaVM* vm = runtimeCallInfo->GetVM();
1297 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1298 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1299 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1300 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1301 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1302 GetArkUINodeModifiers()->getListModifier()->resetOnListDidScroll(nativeNode);
1303 return panda::JSValueRef::Undefined(vm);
1304 }
1305 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1306 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1307 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1308 std::function<void(Dimension, ScrollState)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
1309 const CalcDimension& scrollOffset, const ScrollState& scrollState) {
1310 panda::LocalScope pandaScope(vm);
1311 panda::TryCatch trycatch(vm);
1312 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1313
1314 panda::Local<panda::NumberRef> offsetParam =
1315 panda::NumberRef::New(vm, static_cast<double>(scrollOffset.ConvertToVp()));
1316 panda::Local<panda::NumberRef> stateParam = panda::NumberRef::New(vm, static_cast<int32_t>(scrollState));
1317 // 2: Array length
1318 panda::Local<panda::JSValueRef> params[2] = { offsetParam, stateParam };
1319 func->Call(vm, func.ToLocal(), params, 2); // 2: Array length
1320 };
1321 GetArkUINodeModifiers()->getListModifier()->setOnListDidScrollCallBack(
1322 nativeNode, reinterpret_cast<void*>(&callback));
1323 return panda::JSValueRef::Undefined(vm);
1324 }
1325
SetOnListReachStart(ArkUIRuntimeCallInfo * runtimeCallInfo)1326 ArkUINativeModuleValue ListBridge::SetOnListReachStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
1327 {
1328 EcmaVM* vm = runtimeCallInfo->GetVM();
1329 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1330 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1331 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1332 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1333 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1334 GetArkUINodeModifiers()->getListModifier()->resetOnListReachStart(nativeNode);
1335 return panda::JSValueRef::Undefined(vm);
1336 }
1337 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1338 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1339 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1340 std::function<void(void)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)]() {
1341 panda::LocalScope pandaScope(vm);
1342 panda::TryCatch trycatch(vm);
1343 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1344 func->Call(vm, func.ToLocal(), nullptr, 0);
1345 };
1346
1347 GetArkUINodeModifiers()->getListModifier()->setOnListReachStartCallBack(
1348 nativeNode, reinterpret_cast<void*>(&callback));
1349 return panda::JSValueRef::Undefined(vm);
1350 }
1351
SetOnListReachEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)1352 ArkUINativeModuleValue ListBridge::SetOnListReachEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
1353 {
1354 EcmaVM* vm = runtimeCallInfo->GetVM();
1355 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1356 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1357 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1358 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1359 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1360 GetArkUINodeModifiers()->getListModifier()->resetOnListReachEnd(nativeNode);
1361 return panda::JSValueRef::Undefined(vm);
1362 }
1363 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1364 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1365 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1366 std::function<void(void)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)]() {
1367 panda::LocalScope pandaScope(vm);
1368 panda::TryCatch trycatch(vm);
1369 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1370 func->Call(vm, func.ToLocal(), nullptr, 0);
1371 };
1372
1373 GetArkUINodeModifiers()->getListModifier()->setOnListReachEndCallBack(
1374 nativeNode, reinterpret_cast<void*>(&callback));
1375 return panda::JSValueRef::Undefined(vm);
1376 }
1377
ResetOnScrollIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)1378 ArkUINativeModuleValue ListBridge::ResetOnScrollIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
1379 {
1380 EcmaVM* vm = runtimeCallInfo->GetVM();
1381 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1382 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1383 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1384 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollIndex(nativeNode);
1385 return panda::JSValueRef::Undefined(vm);
1386 }
1387
ResetOnScrollVisibleContentChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1388 ArkUINativeModuleValue ListBridge::ResetOnScrollVisibleContentChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1389 {
1390 EcmaVM* vm = runtimeCallInfo->GetVM();
1391 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1392 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1393 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1394 GetArkUINodeModifiers()->getListModifier()->resetOnScrollVisibleContentChange(nativeNode);
1395 return panda::JSValueRef::Undefined(vm);
1396 }
1397
ResetOnItemMove(ArkUIRuntimeCallInfo * runtimeCallInfo)1398 ArkUINativeModuleValue ListBridge::ResetOnItemMove(ArkUIRuntimeCallInfo* runtimeCallInfo)
1399 {
1400 EcmaVM* vm = runtimeCallInfo->GetVM();
1401 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1402 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1403 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1404 GetArkUINodeModifiers()->getListModifier()->resetOnItemMove(nativeNode);
1405 return panda::JSValueRef::Undefined(vm);
1406 }
1407
ResetOnItemDragStart(ArkUIRuntimeCallInfo * runtimeCallInfo)1408 ArkUINativeModuleValue ListBridge::ResetOnItemDragStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
1409 {
1410 EcmaVM* vm = runtimeCallInfo->GetVM();
1411 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1412 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1413 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1414 GetArkUINodeModifiers()->getListModifier()->resetOnItemDragStart(nativeNode);
1415 return panda::JSValueRef::Undefined(vm);
1416 }
1417
ResetOnItemDragEnter(ArkUIRuntimeCallInfo * runtimeCallInfo)1418 ArkUINativeModuleValue ListBridge::ResetOnItemDragEnter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1419 {
1420 EcmaVM* vm = runtimeCallInfo->GetVM();
1421 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1422 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1423 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1424 GetArkUINodeModifiers()->getListModifier()->resetOnItemDragEnter(nativeNode);
1425 return panda::JSValueRef::Undefined(vm);
1426 }
1427
ResetOnItemDragMove(ArkUIRuntimeCallInfo * runtimeCallInfo)1428 ArkUINativeModuleValue ListBridge::ResetOnItemDragMove(ArkUIRuntimeCallInfo* runtimeCallInfo)
1429 {
1430 EcmaVM* vm = runtimeCallInfo->GetVM();
1431 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1432 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1433 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1434 GetArkUINodeModifiers()->getListModifier()->resetOnItemDragMove(nativeNode);
1435 return panda::JSValueRef::Undefined(vm);
1436 }
1437
ResetOnItemDragLeave(ArkUIRuntimeCallInfo * runtimeCallInfo)1438 ArkUINativeModuleValue ListBridge::ResetOnItemDragLeave(ArkUIRuntimeCallInfo* runtimeCallInfo)
1439 {
1440 EcmaVM* vm = runtimeCallInfo->GetVM();
1441 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1442 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1443 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1444 GetArkUINodeModifiers()->getListModifier()->resetOnItemDragLeave(nativeNode);
1445 return panda::JSValueRef::Undefined(vm);
1446 }
1447
ResetOnItemDrop(ArkUIRuntimeCallInfo * runtimeCallInfo)1448 ArkUINativeModuleValue ListBridge::ResetOnItemDrop(ArkUIRuntimeCallInfo* runtimeCallInfo)
1449 {
1450 EcmaVM* vm = runtimeCallInfo->GetVM();
1451 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1452 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1453 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1454 GetArkUINodeModifiers()->getListModifier()->resetOnItemDrop(nativeNode);
1455 return panda::JSValueRef::Undefined(vm);
1456 }
1457
ResetOnListScrollStart(ArkUIRuntimeCallInfo * runtimeCallInfo)1458 ArkUINativeModuleValue ListBridge::ResetOnListScrollStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
1459 {
1460 EcmaVM* vm = runtimeCallInfo->GetVM();
1461 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1462 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1463 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1464 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollStart(nativeNode);
1465 return panda::JSValueRef::Undefined(vm);
1466 }
1467
ResetOnListScrollStop(ArkUIRuntimeCallInfo * runtimeCallInfo)1468 ArkUINativeModuleValue ListBridge::ResetOnListScrollStop(ArkUIRuntimeCallInfo* runtimeCallInfo)
1469 {
1470 EcmaVM* vm = runtimeCallInfo->GetVM();
1471 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1472 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1473 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1474 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollStop(nativeNode);
1475 return panda::JSValueRef::Undefined(vm);
1476 }
1477
ResetOnListScrollFrameBegin(ArkUIRuntimeCallInfo * runtimeCallInfo)1478 ArkUINativeModuleValue ListBridge::ResetOnListScrollFrameBegin(ArkUIRuntimeCallInfo* runtimeCallInfo)
1479 {
1480 EcmaVM* vm = runtimeCallInfo->GetVM();
1481 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1482 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1483 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1484 GetArkUINodeModifiers()->getListModifier()->resetOnListScrollFrameBegin(nativeNode);
1485 return panda::JSValueRef::Undefined(vm);
1486 }
1487
ResetOnListWillScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1488 ArkUINativeModuleValue ListBridge::ResetOnListWillScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1489 {
1490 EcmaVM* vm = runtimeCallInfo->GetVM();
1491 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1492 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1493 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1494 GetArkUINodeModifiers()->getListModifier()->resetOnListWillScroll(nativeNode);
1495 return panda::JSValueRef::Undefined(vm);
1496 }
1497
ResetOnListDidScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1498 ArkUINativeModuleValue ListBridge::ResetOnListDidScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1499 {
1500 EcmaVM* vm = runtimeCallInfo->GetVM();
1501 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1502 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1503 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1504 GetArkUINodeModifiers()->getListModifier()->resetOnListDidScroll(nativeNode);
1505 return panda::JSValueRef::Undefined(vm);
1506 }
1507
ResetOnListReachStart(ArkUIRuntimeCallInfo * runtimeCallInfo)1508 ArkUINativeModuleValue ListBridge::ResetOnListReachStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
1509 {
1510 EcmaVM* vm = runtimeCallInfo->GetVM();
1511 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1512 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1513 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1514 GetArkUINodeModifiers()->getListModifier()->resetOnListReachStart(nativeNode);
1515 return panda::JSValueRef::Undefined(vm);
1516 }
1517
ResetOnListReachEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)1518 ArkUINativeModuleValue ListBridge::ResetOnListReachEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
1519 {
1520 EcmaVM* vm = runtimeCallInfo->GetVM();
1521 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1522 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1523 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1524 GetArkUINodeModifiers()->getListModifier()->resetOnListReachEnd(nativeNode);
1525 return panda::JSValueRef::Undefined(vm);
1526 }
1527 } // namespace OHOS::Ace::NG