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_grid_bridge.h"
16 #include "base/utils/string_utils.h"
17 #include "base/utils/utils.h"
18 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19
20 namespace OHOS::Ace::NG {
21 constexpr int32_t CALL_ARG_0 = 0;
22 constexpr int32_t CALL_ARG_1 = 1;
23 constexpr int32_t CALL_ARG_2 = 2;
24 constexpr int32_t DEFAULT_CACHED_COUNT = 1;
25
SetColumnsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)26 ArkUINativeModuleValue GridBridge::SetColumnsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
27 {
28 EcmaVM* vm = runtimeCallInfo->GetVM();
29 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
30 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
31 Local<JSValueRef> arg_columnsTemplate = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
32 void* nativeNode = node->ToNativePointer(vm)->Value();
33 if (arg_columnsTemplate->IsUndefined() || !arg_columnsTemplate->IsString()) {
34 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridColumnsTemplate(nativeNode);
35 } else {
36 std::string columnsTemplate = arg_columnsTemplate->ToString(vm)->ToString();
37 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridColumnsTemplate(nativeNode, columnsTemplate.c_str());
38 }
39 return panda::JSValueRef::Undefined(vm);
40 }
41
ResetColumnsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)42 ArkUINativeModuleValue GridBridge::ResetColumnsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
43 {
44 EcmaVM* vm = runtimeCallInfo->GetVM();
45 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
46 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
47 void* nativeNode = node->ToNativePointer(vm)->Value();
48 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridColumnsTemplate(nativeNode);
49 return panda::JSValueRef::Undefined(vm);
50 }
51
SetRowsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)52 ArkUINativeModuleValue GridBridge::SetRowsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
53 {
54 EcmaVM* vm = runtimeCallInfo->GetVM();
55 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
56 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
57 Local<JSValueRef> arg_rowsTemplate = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
58 void* nativeNode = node->ToNativePointer(vm)->Value();
59 if (arg_rowsTemplate->IsUndefined() || !arg_rowsTemplate->IsString()) {
60 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridRowsTemplate(nativeNode);
61 } else {
62 std::string rowsTemplate = arg_rowsTemplate->ToString(vm)->ToString();
63 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridRowsTemplate(nativeNode, rowsTemplate.c_str());
64 }
65 return panda::JSValueRef::Undefined(vm);
66 }
67
ResetRowsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)68 ArkUINativeModuleValue GridBridge::ResetRowsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
69 {
70 EcmaVM* vm = runtimeCallInfo->GetVM();
71 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
72 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
73 void* nativeNode = node->ToNativePointer(vm)->Value();
74 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridRowsTemplate(nativeNode);
75 return panda::JSValueRef::Undefined(vm);
76 }
77
SetColumnsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)78 ArkUINativeModuleValue GridBridge::SetColumnsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
79 {
80 EcmaVM* vm = runtimeCallInfo->GetVM();
81 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
82 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
83 Local<JSValueRef> arg_size = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
84 void* nativeNode = node->ToNativePointer(vm)->Value();
85
86 CalcDimension size;
87 std::string calcStr;
88 struct ArkUIResourceLength columnGap = { 0.0, 0, nullptr };
89 if (arg_size->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, arg_size, size, true)) {
90 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridColumnsGap(nativeNode);
91 } else {
92 if (size.Unit() == DimensionUnit::CALC) {
93 columnGap.unit = static_cast<int32_t>(DimensionUnit::CALC);
94 calcStr = size.CalcValue();
95 columnGap.string = calcStr.c_str();
96 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridColumnsGap(nativeNode, &columnGap);
97 } else {
98 columnGap.value = size.Value();
99 columnGap.unit = static_cast<int32_t>(size.Unit());
100 columnGap.string = calcStr.c_str();
101 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridColumnsGap(nativeNode, &columnGap);
102 }
103 }
104 return panda::JSValueRef::Undefined(vm);
105 }
106
ResetColumnsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)107 ArkUINativeModuleValue GridBridge::ResetColumnsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
108 {
109 EcmaVM* vm = runtimeCallInfo->GetVM();
110 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
111 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
112 void* nativeNode = node->ToNativePointer(vm)->Value();
113 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridColumnsGap(nativeNode);
114 return panda::JSValueRef::Undefined(vm);
115 }
116
SetRowsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)117 ArkUINativeModuleValue GridBridge::SetRowsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
118 {
119 EcmaVM* vm = runtimeCallInfo->GetVM();
120 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
121 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
122 Local<JSValueRef> arg_size = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
123 void* nativeNode = node->ToNativePointer(vm)->Value();
124
125 CalcDimension size;
126 std::string calcStr;
127 struct ArkUIResourceLength rowsGap = { 0.0, 0, nullptr };
128 if (arg_size->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, arg_size, size, true)) {
129 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridRowsGap(nativeNode);
130 } else {
131 if (size.Unit() == DimensionUnit::CALC) {
132 rowsGap.unit = static_cast<int32_t>(DimensionUnit::CALC);
133 calcStr = size.CalcValue();
134 rowsGap.string = calcStr.c_str();
135 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridRowsGap(nativeNode, &rowsGap);
136 } else {
137 rowsGap.value = size.Value();
138 rowsGap.unit = static_cast<int32_t>(size.Unit());
139 rowsGap.string = calcStr.c_str();
140 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridRowsGap(nativeNode, &rowsGap);
141 }
142 }
143 return panda::JSValueRef::Undefined(vm);
144 }
145
ResetRowsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)146 ArkUINativeModuleValue GridBridge::ResetRowsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
147 {
148 EcmaVM* vm = runtimeCallInfo->GetVM();
149 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
150 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
151 void* nativeNode = node->ToNativePointer(vm)->Value();
152 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridRowsGap(nativeNode);
153 return panda::JSValueRef::Undefined(vm);
154 }
155
SetScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)156 ArkUINativeModuleValue GridBridge::SetScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
157 {
158 EcmaVM* vm = runtimeCallInfo->GetVM();
159 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
160 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
161 Local<JSValueRef> arg_scrollBar = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
162 void* nativeNode = node->ToNativePointer(vm)->Value();
163 if (!arg_scrollBar->IsNull() && arg_scrollBar->IsNumber()) {
164 int32_t scrollBar = arg_scrollBar->Int32Value(vm);
165 if (scrollBar < 0) {
166 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBar(nativeNode);
167 } else {
168 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridScrollBar(nativeNode, scrollBar);
169 }
170 } else {
171 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBar(nativeNode);
172 }
173 return panda::JSValueRef::Undefined(vm);
174 }
175
ResetScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)176 ArkUINativeModuleValue GridBridge::ResetScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
177 {
178 EcmaVM* vm = runtimeCallInfo->GetVM();
179 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
180 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
181 void* nativeNode = node->ToNativePointer(vm)->Value();
182 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBar(nativeNode);
183 return panda::JSValueRef::Undefined(vm);
184 }
185
SetScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)186 ArkUINativeModuleValue GridBridge::SetScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
187 {
188 EcmaVM* vm = runtimeCallInfo->GetVM();
189 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
190 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
191 Local<JSValueRef> scrollBarArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
192 void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
193
194 CalcDimension scrollBarWidth;
195 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, scrollBarArg, scrollBarWidth, false)) {
196 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBarWidth(nativeNode);
197 } else {
198 if (LessNotEqual(scrollBarWidth.Value(), 0.0f)) {
199 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBarWidth(nativeNode);
200 } else {
201 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridScrollBarWidth(
202 nativeNode, scrollBarWidth.Value(), static_cast<int32_t>(scrollBarWidth.Unit()));
203 }
204 }
205 return panda::JSValueRef::Undefined(vm);
206 }
207
ResetScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)208 ArkUINativeModuleValue GridBridge::ResetScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
209 {
210 EcmaVM* vm = runtimeCallInfo->GetVM();
211 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
212 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
213 void* nativeNode = node->ToNativePointer(vm)->Value();
214 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBarWidth(nativeNode);
215 return panda::JSValueRef::Undefined(vm);
216 }
217
SetScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)218 ArkUINativeModuleValue GridBridge::SetScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
219 {
220 EcmaVM* vm = runtimeCallInfo->GetVM();
221 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
222 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
223 Local<JSValueRef> arg_color = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
224 void* nativeNode = node->ToNativePointer(vm)->Value();
225 if (arg_color->IsNull() || arg_color->IsUndefined()) {
226 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBarColor(nativeNode);
227 return panda::JSValueRef::Undefined(vm);
228 }
229 if (arg_color->IsNumber()) {
230 auto colorNum = arg_color->ToNumber(vm)->Value();
231 if (colorNum <= 0) {
232 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBarColor(nativeNode);
233 return panda::JSValueRef::Undefined(vm);
234 }
235 }
236 Color color;
237 if (ArkTSUtils::ParseJsColorAlpha(vm, arg_color, color)) {
238 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridScrollBarColor(
239 nativeNode, color.GetValue());
240 } else {
241 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBarColor(nativeNode);
242 }
243 return panda::JSValueRef::Undefined(vm);
244 }
245
ResetScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)246 ArkUINativeModuleValue GridBridge::ResetScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
247 {
248 EcmaVM* vm = runtimeCallInfo->GetVM();
249 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
250 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
251 void* nativeNode = node->ToNativePointer(vm)->Value();
252 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridScrollBarColor(nativeNode);
253 return panda::JSValueRef::Undefined(vm);
254 }
255
SetCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)256 ArkUINativeModuleValue GridBridge::SetCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
257 {
258 EcmaVM* vm = runtimeCallInfo->GetVM();
259 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
260 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
261 Local<JSValueRef> arg_cachedCount = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
262 void* nativeNode = node->ToNativePointer(vm)->Value();
263 auto value = DEFAULT_CACHED_COUNT;
264 if (!arg_cachedCount->IsUndefined()) {
265 ArkTSUtils::ParseJsInteger(vm, arg_cachedCount, value);
266 if (value < 0) {
267 value = DEFAULT_CACHED_COUNT;
268 }
269 }
270 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridCachedCount(nativeNode, value);
271 return panda::JSValueRef::Undefined(vm);
272 }
273
ResetCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)274 ArkUINativeModuleValue GridBridge::ResetCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
275 {
276 EcmaVM* vm = runtimeCallInfo->GetVM();
277 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
278 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
279 void* nativeNode = node->ToNativePointer(vm)->Value();
280 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridCachedCount(nativeNode);
281 return panda::JSValueRef::Undefined(vm);
282 }
283
SetEditMode(ArkUIRuntimeCallInfo * runtimeCallInfo)284 ArkUINativeModuleValue GridBridge::SetEditMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
285 {
286 EcmaVM* vm = runtimeCallInfo->GetVM();
287 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
288 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
289 Local<JSValueRef> arg_editMode = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
290 void* nativeNode = node->ToNativePointer(vm)->Value();
291 bool editMode = arg_editMode->ToBoolean(vm)->Value();
292 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridEditMode(nativeNode, editMode);
293 return panda::JSValueRef::Undefined(vm);
294 }
295
ResetEditMode(ArkUIRuntimeCallInfo * runtimeCallInfo)296 ArkUINativeModuleValue GridBridge::ResetEditMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
297 {
298 EcmaVM* vm = runtimeCallInfo->GetVM();
299 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
300 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
301 void* nativeNode = node->ToNativePointer(vm)->Value();
302 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridEditMode(nativeNode);
303 return panda::JSValueRef::Undefined(vm);
304 }
305
SetMultiSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)306 ArkUINativeModuleValue GridBridge::SetMultiSelectable(ArkUIRuntimeCallInfo* runtimeCallInfo)
307 {
308 EcmaVM* vm = runtimeCallInfo->GetVM();
309 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
310 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
311 Local<JSValueRef> arg_multiSelectable = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
312 void* nativeNode = node->ToNativePointer(vm)->Value();
313 bool multiSelectable = arg_multiSelectable->ToBoolean(vm)->Value();
314 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridMultiSelectable(nativeNode, multiSelectable);
315 return panda::JSValueRef::Undefined(vm);
316 }
317
ResetMultiSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)318 ArkUINativeModuleValue GridBridge::ResetMultiSelectable(ArkUIRuntimeCallInfo* runtimeCallInfo)
319 {
320 EcmaVM* vm = runtimeCallInfo->GetVM();
321 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
322 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
323 void* nativeNode = node->ToNativePointer(vm)->Value();
324 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridMultiSelectable(nativeNode);
325 return panda::JSValueRef::Undefined(vm);
326 }
327
SetMaxCount(ArkUIRuntimeCallInfo * runtimeCallInfo)328 ArkUINativeModuleValue GridBridge::SetMaxCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
329 {
330 EcmaVM* vm = runtimeCallInfo->GetVM();
331 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
332 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
333 Local<JSValueRef> arg_maxCount = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
334 void* nativeNode = node->ToNativePointer(vm)->Value();
335 if (!arg_maxCount->IsNull() && arg_maxCount->IsNumber()) {
336 int32_t maxCount = arg_maxCount->Int32Value(vm);
337 if (maxCount < 1) {
338 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridMaxCount(nativeNode);
339 } else {
340 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridMaxCount(nativeNode, maxCount);
341 }
342 } else {
343 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridMaxCount(nativeNode);
344 }
345 return panda::JSValueRef::Undefined(vm);
346 }
347
ResetMaxCount(ArkUIRuntimeCallInfo * runtimeCallInfo)348 ArkUINativeModuleValue GridBridge::ResetMaxCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
349 {
350 EcmaVM* vm = runtimeCallInfo->GetVM();
351 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
352 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
353 void* nativeNode = node->ToNativePointer(vm)->Value();
354 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridMaxCount(nativeNode);
355 return panda::JSValueRef::Undefined(vm);
356 }
357
SetMinCount(ArkUIRuntimeCallInfo * runtimeCallInfo)358 ArkUINativeModuleValue GridBridge::SetMinCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
359 {
360 EcmaVM* vm = runtimeCallInfo->GetVM();
361 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
362 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
363 Local<JSValueRef> arg_minCount = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
364 void* nativeNode = node->ToNativePointer(vm)->Value();
365 if (!arg_minCount->IsNull() && arg_minCount->IsNumber()) {
366 int32_t minCount = arg_minCount->Int32Value(vm);
367 if (minCount < 1) {
368 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridMinCount(nativeNode);
369 } else {
370 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridMinCount(nativeNode, minCount);
371 }
372 } else {
373 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridMinCount(nativeNode);
374 }
375 return panda::JSValueRef::Undefined(vm);
376 }
377
ResetMinCount(ArkUIRuntimeCallInfo * runtimeCallInfo)378 ArkUINativeModuleValue GridBridge::ResetMinCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
379 {
380 EcmaVM* vm = runtimeCallInfo->GetVM();
381 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
382 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
383 void* nativeNode = node->ToNativePointer(vm)->Value();
384 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridMinCount(nativeNode);
385 return panda::JSValueRef::Undefined(vm);
386 }
387
SetCellLength(ArkUIRuntimeCallInfo * runtimeCallInfo)388 ArkUINativeModuleValue GridBridge::SetCellLength(ArkUIRuntimeCallInfo* runtimeCallInfo)
389 {
390 EcmaVM* vm = runtimeCallInfo->GetVM();
391 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
392 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
393 Local<JSValueRef> arg_cellLength = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
394 void* nativeNode = node->ToNativePointer(vm)->Value();
395 if (!arg_cellLength->IsNull() && arg_cellLength->IsNumber()) {
396 int32_t cellLength = arg_cellLength->Int32Value(vm);
397 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridCellLength(nativeNode, cellLength);
398 } else {
399 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridCellLength(nativeNode);
400 }
401 return panda::JSValueRef::Undefined(vm);
402 }
403
ResetCellLength(ArkUIRuntimeCallInfo * runtimeCallInfo)404 ArkUINativeModuleValue GridBridge::ResetCellLength(ArkUIRuntimeCallInfo* runtimeCallInfo)
405 {
406 EcmaVM* vm = runtimeCallInfo->GetVM();
407 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
408 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
409 void* nativeNode = node->ToNativePointer(vm)->Value();
410 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridCellLength(nativeNode);
411 return panda::JSValueRef::Undefined(vm);
412 }
413
SetLayoutDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)414 ArkUINativeModuleValue GridBridge::SetLayoutDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
415 {
416 EcmaVM* vm = runtimeCallInfo->GetVM();
417 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
418 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
419 Local<JSValueRef> arg_layoutDirection = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
420 void* nativeNode = node->ToNativePointer(vm)->Value();
421 if (!arg_layoutDirection->IsNull() && arg_layoutDirection->IsNumber()) {
422 int32_t layoutDirection = arg_layoutDirection->Int32Value(vm);
423 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridLayoutDirection(nativeNode, layoutDirection);
424 } else {
425 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridLayoutDirection(nativeNode);
426 }
427 return panda::JSValueRef::Undefined(vm);
428 }
429
ResetLayoutDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)430 ArkUINativeModuleValue GridBridge::ResetLayoutDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
431 {
432 EcmaVM* vm = runtimeCallInfo->GetVM();
433 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
434 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
435 void* nativeNode = node->ToNativePointer(vm)->Value();
436 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridLayoutDirection(nativeNode);
437 return panda::JSValueRef::Undefined(vm);
438 }
439
SetSupportAnimation(ArkUIRuntimeCallInfo * runtimeCallInfo)440 ArkUINativeModuleValue GridBridge::SetSupportAnimation(ArkUIRuntimeCallInfo* runtimeCallInfo)
441 {
442 EcmaVM* vm = runtimeCallInfo->GetVM();
443 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
444 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
445 Local<JSValueRef> arg_supportAnimation = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
446 void* nativeNode = node->ToNativePointer(vm)->Value();
447 bool supportAnimation = arg_supportAnimation->ToBoolean(vm)->Value();
448 GetArkUIInternalNodeAPI()->GetGridModifier().SetGridSupportAnimation(nativeNode, supportAnimation);
449 return panda::JSValueRef::Undefined(vm);
450 }
451
ResetSupportAnimation(ArkUIRuntimeCallInfo * runtimeCallInfo)452 ArkUINativeModuleValue GridBridge::ResetSupportAnimation(ArkUIRuntimeCallInfo* runtimeCallInfo)
453 {
454 EcmaVM* vm = runtimeCallInfo->GetVM();
455 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
456 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
457 void* nativeNode = node->ToNativePointer(vm)->Value();
458 GetArkUIInternalNodeAPI()->GetGridModifier().ResetGridSupportAnimation(nativeNode);
459 return panda::JSValueRef::Undefined(vm);
460 }
461
SetEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)462 ArkUINativeModuleValue GridBridge::SetEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
463 {
464 EcmaVM* vm = runtimeCallInfo->GetVM();
465 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
466 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
467 Local<JSValueRef> arg_effect = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
468 Local<JSValueRef> arg_edgeEffectOptions = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
469
470 void* nativeNode = node->ToNativePointer(vm)->Value();
471 int32_t effect = static_cast<int32_t>(EdgeEffect::NONE);
472 if (!arg_effect->IsUndefined() && !arg_effect->IsNull()) {
473 effect = arg_effect->Int32Value(vm);
474 }
475
476 if (effect != static_cast<int32_t>(EdgeEffect::SPRING) && effect != static_cast<int32_t>(EdgeEffect::NONE) &&
477 effect != static_cast<int32_t>(EdgeEffect::FADE)) {
478 effect = static_cast<int32_t>(EdgeEffect::NONE);
479 }
480
481 if (arg_edgeEffectOptions->IsNull() || arg_edgeEffectOptions->IsUndefined()) {
482 GetArkUIInternalNodeAPI()->GetGridModifier().SetEdgeEffect(nativeNode, effect, false);
483 } else {
484 GetArkUIInternalNodeAPI()->GetGridModifier().SetEdgeEffect(
485 nativeNode, effect, arg_edgeEffectOptions->ToBoolean(vm)->Value());
486 }
487 return panda::JSValueRef::Undefined(vm);
488 }
ResetEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)489 ArkUINativeModuleValue GridBridge::ResetEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
490 {
491 EcmaVM* vm = runtimeCallInfo->GetVM();
492 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
493 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
494 void* nativeNode = node->ToNativePointer(vm)->Value();
495 GetArkUIInternalNodeAPI()->GetGridModifier().ResetEdgeEffect(nativeNode);
496 return panda::JSValueRef::Undefined(vm);
497 }
SetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)498 ArkUINativeModuleValue GridBridge::SetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
499 {
500 EcmaVM* vm = runtimeCallInfo->GetVM();
501 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
502 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
503 Local<JSValueRef> arg_forward = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
504 Local<JSValueRef> arg_backward = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
505
506 void* nativeNode = node->ToNativePointer(vm)->Value();
507 int32_t forward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
508 int32_t backward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
509 if (!arg_forward->IsUndefined()) {
510 forward = arg_forward->Int32Value(vm);
511 }
512 if (!arg_backward->IsUndefined()) {
513 backward = arg_backward->Int32Value(vm);
514 }
515
516 if (forward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
517 forward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
518 forward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
519 }
520
521 if (backward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
522 backward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
523 backward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
524 }
525
526 GetArkUIInternalNodeAPI()->GetGridModifier().SetNestedScroll(nativeNode, forward, backward);
527
528 return panda::JSValueRef::Undefined(vm);
529 }
ResetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)530 ArkUINativeModuleValue GridBridge::ResetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
531 {
532 EcmaVM* vm = runtimeCallInfo->GetVM();
533 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
534 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
535 void* nativeNode = node->ToNativePointer(vm)->Value();
536 GetArkUIInternalNodeAPI()->GetGridModifier().ResetNestedScroll(nativeNode);
537 return panda::JSValueRef::Undefined(vm);
538 }
SetEnableScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)539 ArkUINativeModuleValue GridBridge::SetEnableScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
540 {
541 EcmaVM* vm = runtimeCallInfo->GetVM();
542 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
543 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
544 Local<JSValueRef> arg_enableScrool = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
545
546 void* nativeNode = node->ToNativePointer(vm)->Value();
547
548 GetArkUIInternalNodeAPI()->GetGridModifier().SetEnableScroll(
549 nativeNode, arg_enableScrool->IsBoolean() ? arg_enableScrool->ToBoolean(vm)->Value() : true);
550
551 return panda::JSValueRef::Undefined(vm);
552 }
ResetEnableScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)553 ArkUINativeModuleValue GridBridge::ResetEnableScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
554 {
555 EcmaVM* vm = runtimeCallInfo->GetVM();
556 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
557 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
558 void* nativeNode = node->ToNativePointer(vm)->Value();
559 GetArkUIInternalNodeAPI()->GetGridModifier().ResetEnableScroll(nativeNode);
560 return panda::JSValueRef::Undefined(vm);
561 }
SetFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)562 ArkUINativeModuleValue GridBridge::SetFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
563 {
564 EcmaVM* vm = runtimeCallInfo->GetVM();
565 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
566 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
567 Local<JSValueRef> arg_friction = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
568
569 double friction = -1.0;
570 void* nativeNode = node->ToNativePointer(vm)->Value();
571 if (!ArkTSUtils::ParseJsDouble(vm, arg_friction, friction)) {
572 friction = -1.0;
573 }
574 GetArkUIInternalNodeAPI()->GetGridModifier().SetFriction(nativeNode, friction);
575
576 return panda::JSValueRef::Undefined(vm);
577 }
ResetFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)578 ArkUINativeModuleValue GridBridge::ResetFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
579 {
580 EcmaVM* vm = runtimeCallInfo->GetVM();
581 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
582 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
583 void* nativeNode = node->ToNativePointer(vm)->Value();
584 GetArkUIInternalNodeAPI()->GetGridModifier().ResetFriction(nativeNode);
585 return panda::JSValueRef::Undefined(vm);
586 }
587
588 } // namespace OHOS::Ace::NG
589