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
16 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_scroll_bridge.h"
17
18 #include "base/log/log.h"
19 #include "base/utils/string_utils.h"
20 #include "base/utils/utils.h"
21 #include "core/interfaces/native/node/api.h"
22 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
23
24 namespace OHOS::Ace::NG {
25 constexpr double FRICTION_DEFAULT = 0.6;
26 constexpr int32_t FROWARD_INITIAL_VALUE = 0;
27 constexpr int32_t BACKWARD_INITIAL_VALUE = 0;
28
ParsePagination(const EcmaVM * vm,const Local<JSValueRef> & paginationValue,std::vector<double> & vPaginationValue,std::vector<int32_t> & vPaginationUnit)29 bool ParsePagination(const EcmaVM* vm, const Local<JSValueRef>& paginationValue, std::vector<double>& vPaginationValue,
30 std::vector<int32_t>& vPaginationUnit)
31 {
32 uint32_t pLength = 0;
33 if (paginationValue->IsArray(vm)) {
34 auto paginationArray = panda::Local<panda::ArrayRef>(paginationValue);
35 pLength = paginationArray->Length(vm);
36 if (pLength <= 0) {
37 return false;
38 }
39 for (uint32_t i = 0; i < pLength; i++) {
40 CalcDimension dims;
41 Local<JSValueRef> xValue = panda::ArrayRef::GetValueAt(vm, paginationArray, i);
42 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, xValue, dims, true)) {
43 return false;
44 }
45 vPaginationValue.push_back(dims.Value());
46 vPaginationUnit.push_back(static_cast<int32_t>(dims.Unit()));
47 }
48 } else {
49 CalcDimension intervalSize;
50 if (!ArkTSUtils::ParseJsDimensionVp(vm, paginationValue, intervalSize) || intervalSize.IsNegative()) {
51 intervalSize = CalcDimension(0.0);
52 }
53 vPaginationValue.push_back(intervalSize.Value());
54 vPaginationUnit.push_back(static_cast<int32_t>(intervalSize.Unit()));
55 }
56
57 return true;
58 }
59
SetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)60 ArkUINativeModuleValue ScrollBridge::SetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
61 {
62 EcmaVM* vm = runtimeCallInfo->GetVM();
63 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
64 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
65 Local<JSValueRef> scrollForwardValue = runtimeCallInfo->GetCallArgRef(1); // 1: index of scroll forward value
66 Local<JSValueRef> scrollBackwardValue = runtimeCallInfo->GetCallArgRef(2); // 2: index of scroll backward value
67 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
68 auto froward = 0;
69 auto backward = 0;
70 ArkTSUtils::ParseJsInteger(vm, scrollForwardValue, froward);
71 if (froward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
72 froward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
73 froward = FROWARD_INITIAL_VALUE;
74 }
75 ArkTSUtils::ParseJsInteger(vm, scrollBackwardValue, backward);
76 if (backward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
77 backward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
78 backward = BACKWARD_INITIAL_VALUE;
79 }
80 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollNestedScroll(nativeNode, froward, backward);
81 return panda::JSValueRef::Undefined(vm);
82 }
83
ResetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)84 ArkUINativeModuleValue ScrollBridge::ResetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
85 {
86 EcmaVM* vm = runtimeCallInfo->GetVM();
87 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
88 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
89 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
90 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollNestedScroll(nativeNode);
91 return panda::JSValueRef::Undefined(vm);
92 }
93
SetEnableScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)94 ArkUINativeModuleValue ScrollBridge::SetEnableScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
95 {
96 EcmaVM* vm = runtimeCallInfo->GetVM();
97 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
98 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
99 Local<JSValueRef> isEnabledArg = runtimeCallInfo->GetCallArgRef(1);
100 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
101 bool isEnabled = isEnabledArg->IsBoolean() ? isEnabledArg->ToBoolean(vm)->Value() : true;
102 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollEnableScroll(nativeNode, isEnabled);
103 return panda::JSValueRef::Undefined(vm);
104 }
105
ResetEnableScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)106 ArkUINativeModuleValue ScrollBridge::ResetEnableScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
107 {
108 EcmaVM* vm = runtimeCallInfo->GetVM();
109 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
110 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
111 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
112 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollEnableScroll(nativeNode);
113 return panda::JSValueRef::Undefined(vm);
114 }
115
SetFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)116 ArkUINativeModuleValue ScrollBridge::SetFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
117 {
118 EcmaVM* vm = runtimeCallInfo->GetVM();
119 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
120 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
121 Local<JSValueRef> scrollFrictionArg = runtimeCallInfo->GetCallArgRef(1);
122 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
123 double friction = FRICTION_DEFAULT;
124 if (!ArkTSUtils::ParseJsDouble(vm, scrollFrictionArg, friction)) {
125 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollFriction(nativeNode);
126 } else {
127 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollFriction(nativeNode, friction);
128 }
129 return panda::JSValueRef::Undefined(vm);
130 }
131
ResetFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)132 ArkUINativeModuleValue ScrollBridge::ResetFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
133 {
134 EcmaVM* vm = runtimeCallInfo->GetVM();
135 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
136 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
137 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
138 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollFriction(nativeNode);
139 return panda::JSValueRef::Undefined(vm);
140 }
141
SetScrollSnap(ArkUIRuntimeCallInfo * runtimeCallInfo)142 ArkUINativeModuleValue ScrollBridge::SetScrollSnap(ArkUIRuntimeCallInfo* runtimeCallInfo)
143 {
144 EcmaVM* vm = runtimeCallInfo->GetVM();
145 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
146 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
147 Local<JSValueRef> snapAlignValue = runtimeCallInfo->GetCallArgRef(1); // 1: index of snap align value
148 Local<JSValueRef> paginationValue = runtimeCallInfo->GetCallArgRef(2); // 2: index of pagination value
149 Local<JSValueRef> enableSnapToStartValue = runtimeCallInfo->GetCallArgRef(3); // 3: index of enableSnapToStart value
150 Local<JSValueRef> enableSnapToEndValue = runtimeCallInfo->GetCallArgRef(4); // 4: index of enableSnapToEnd value
151 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
152 auto snapAlign = static_cast<int32_t>(ScrollSnapAlign::NONE);
153 if (snapAlignValue->IsNull() || snapAlignValue->IsUndefined() ||
154 !ArkTSUtils::ParseJsInteger(vm, snapAlignValue, snapAlign) ||
155 snapAlign < static_cast<int32_t>(ScrollSnapAlign::NONE) ||
156 snapAlign > static_cast<int32_t>(ScrollSnapAlign::END)) {
157 snapAlign = static_cast<int32_t>(ScrollSnapAlign::NONE);
158 }
159 std::vector<double> vPaginationValue;
160 std::vector<int32_t> vPaginationUnit;
161 if (!ParsePagination(vm, paginationValue, vPaginationValue, vPaginationUnit)) {
162 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollSnap(nativeNode);
163 return panda::JSValueRef::Undefined(vm);
164 }
165 bool isArray = true;
166 if (!paginationValue->IsArray(vm)) {
167 isArray = false;
168 }
169 auto pLength = vPaginationValue.size();
170 vPaginationUnit.push_back(snapAlign);
171 vPaginationUnit.push_back(static_cast<int32_t>(enableSnapToStartValue->ToBoolean(vm)->Value()));
172 vPaginationUnit.push_back(static_cast<int32_t>(enableSnapToEndValue->ToBoolean(vm)->Value()));
173 vPaginationUnit.push_back(static_cast<int32_t>(isArray));
174 auto uLength = pLength + 4;
175 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollScrollSnap(
176 nativeNode, vPaginationValue.data(), pLength, vPaginationUnit.data(), uLength);
177 return panda::JSValueRef::Undefined(vm);
178 }
179
ResetScrollSnap(ArkUIRuntimeCallInfo * runtimeCallInfo)180 ArkUINativeModuleValue ScrollBridge::ResetScrollSnap(ArkUIRuntimeCallInfo* runtimeCallInfo)
181 {
182 EcmaVM* vm = runtimeCallInfo->GetVM();
183 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
184 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
185 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
186 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollSnap(nativeNode);
187 return panda::JSValueRef::Undefined(vm);
188 }
189
SetScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)190 ArkUINativeModuleValue ScrollBridge::SetScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
191 {
192 EcmaVM* vm = runtimeCallInfo->GetVM();
193 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
194 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
195 Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
196 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
197 auto value = static_cast<int32_t>(DisplayMode::AUTO);
198 if (!jsValue->IsUndefined()) {
199 ArkTSUtils::ParseJsInteger(vm, jsValue, value);
200 }
201 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollScrollBar(nativeNode, value);
202 return panda::JSValueRef::Undefined(vm);
203 }
204
ResetScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)205 ArkUINativeModuleValue ScrollBridge::ResetScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
206 {
207 EcmaVM* vm = runtimeCallInfo->GetVM();
208 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
209 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
210 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
211 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollBar(nativeNode);
212 return panda::JSValueRef::Undefined(vm);
213 }
214
SetScrollable(ArkUIRuntimeCallInfo * runtimeCallInfo)215 ArkUINativeModuleValue ScrollBridge::SetScrollable(ArkUIRuntimeCallInfo* runtimeCallInfo)
216 {
217 EcmaVM* vm = runtimeCallInfo->GetVM();
218 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
219 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
220 Local<JSValueRef> scrollDirectionArg = runtimeCallInfo->GetCallArgRef(1);
221 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
222 if (scrollDirectionArg->IsUndefined() || scrollDirectionArg->IsNull()) {
223 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollable(nativeNode);
224 return panda::JSValueRef::Undefined(vm);
225 }
226
227 int32_t scrollDirection = scrollDirectionArg->Int32Value(vm);
228 if (scrollDirection != static_cast<int32_t>(Axis::VERTICAL) &&
229 scrollDirection != static_cast<int32_t>(Axis::HORIZONTAL) &&
230 scrollDirection != static_cast<int32_t>(Axis::FREE) && scrollDirection != static_cast<int32_t>(Axis::NONE)) {
231 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollable(nativeNode);
232 } else {
233 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollScrollable(nativeNode, scrollDirection);
234 }
235
236 return panda::JSValueRef::Undefined(vm);
237 }
238
ResetScrollable(ArkUIRuntimeCallInfo * runtimeCallInfo)239 ArkUINativeModuleValue ScrollBridge::ResetScrollable(ArkUIRuntimeCallInfo* runtimeCallInfo)
240 {
241 EcmaVM* vm = runtimeCallInfo->GetVM();
242 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
243 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
244 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
245 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollable(nativeNode);
246 return panda::JSValueRef::Undefined(vm);
247 }
248
SetScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)249 ArkUINativeModuleValue ScrollBridge::SetScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
250 {
251 EcmaVM* vm = runtimeCallInfo->GetVM();
252 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
253 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
254 Local<JSValueRef> barcolorArg = runtimeCallInfo->GetCallArgRef(1);
255 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
256 Color color;
257 if (!ArkTSUtils::ParseJsColorAlpha(vm, barcolorArg, color)) {
258 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollBarColor(nativeNode);
259 } else {
260 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollScrollBarColor(nativeNode, color.GetValue());
261 }
262
263 return panda::JSValueRef::Undefined(vm);
264 }
265
ResetScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)266 ArkUINativeModuleValue ScrollBridge::ResetScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
267 {
268 EcmaVM* vm = runtimeCallInfo->GetVM();
269 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
270 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
271 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
272 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollBarColor(nativeNode);
273 return panda::JSValueRef::Undefined(vm);
274 }
275
SetScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)276 ArkUINativeModuleValue ScrollBridge::SetScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
277 {
278 EcmaVM* vm = runtimeCallInfo->GetVM();
279 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
280 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
281 Local<JSValueRef> scrollBarArg = runtimeCallInfo->GetCallArgRef(1);
282 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
283 CalcDimension scrollBarWidth;
284 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, scrollBarArg, scrollBarWidth, false)) {
285 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollBarWidth(nativeNode);
286 } else {
287 if (LessNotEqual(scrollBarWidth.Value(), 0.0)) {
288 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollBarWidth(nativeNode);
289 } else {
290 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollScrollBarWidth(
291 nativeNode, scrollBarWidth.Value(), static_cast<int32_t>(scrollBarWidth.Unit()));
292 }
293 }
294
295 return panda::JSValueRef::Undefined(vm);
296 }
297
ResetScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)298 ArkUINativeModuleValue ScrollBridge::ResetScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
299 {
300 EcmaVM* vm = runtimeCallInfo->GetVM();
301 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
302 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
303 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
304 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollScrollBarWidth(nativeNode);
305 return panda::JSValueRef::Undefined(vm);
306 }
307
SetEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)308 ArkUINativeModuleValue ScrollBridge::SetEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
309 {
310 EcmaVM* vm = runtimeCallInfo->GetVM();
311 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
312 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
313 Local<JSValueRef> effectArg = runtimeCallInfo->GetCallArgRef(1); // 1: index of effect value
314 Local<JSValueRef> isEffectArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of isEffect value
315 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
316 int32_t effect = static_cast<int32_t>(EdgeEffect::NONE);
317 if (!effectArg->IsUndefined() && !effectArg->IsNull()) {
318 effect = effectArg->Int32Value(vm);
319 }
320
321 if (effect != static_cast<int32_t>(EdgeEffect::SPRING) && effect != static_cast<int32_t>(EdgeEffect::NONE) &&
322 effect != static_cast<int32_t>(EdgeEffect::FADE)) {
323 effect = static_cast<int32_t>(EdgeEffect::NONE);
324 }
325
326 if (isEffectArg->IsUndefined() || isEffectArg->IsNull()) {
327 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollEdgeEffect(nativeNode, effect, true);
328 } else {
329 GetArkUIInternalNodeAPI()->GetScrollModifier().SetScrollEdgeEffect(
330 nativeNode, effect, isEffectArg->ToBoolean(vm)->Value());
331 }
332
333 return panda::JSValueRef::Undefined(vm);
334 }
335
ResetEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)336 ArkUINativeModuleValue ScrollBridge::ResetEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
337 {
338 EcmaVM* vm = runtimeCallInfo->GetVM();
339 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
340 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
341 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
342 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetScrollEdgeEffect(nativeNode);
343 return panda::JSValueRef::Undefined(vm);
344 }
345
SetEnablePaging(ArkUIRuntimeCallInfo * runtimeCallInfo)346 ArkUINativeModuleValue ScrollBridge::SetEnablePaging(ArkUIRuntimeCallInfo* runtimeCallInfo)
347 {
348 EcmaVM* vm = runtimeCallInfo->GetVM();
349 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
350 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
351 Local<JSValueRef> enablePagingArg = runtimeCallInfo->GetCallArgRef(1);
352 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
353 bool enablePaging;
354 if (enablePagingArg->IsBoolean()) {
355 enablePaging = enablePagingArg->ToBoolean(vm)->Value();
356 GetArkUIInternalNodeAPI()->GetScrollModifier().SetEnablePaging(nativeNode, enablePaging);
357 } else {
358 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetEnablePaging(nativeNode);
359 }
360 return panda::JSValueRef::Undefined(vm);
361 }
362
ResetEnablePaging(ArkUIRuntimeCallInfo * runtimeCallInfo)363 ArkUINativeModuleValue ScrollBridge::ResetEnablePaging(ArkUIRuntimeCallInfo* runtimeCallInfo)
364 {
365 EcmaVM* vm = runtimeCallInfo->GetVM();
366 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
367 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
368 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
369 GetArkUIInternalNodeAPI()->GetScrollModifier().ResetEnablePaging(nativeNode);
370 return panda::JSValueRef::Undefined(vm);
371 }
372 } // namespace OHOS::Ace::NG
373