• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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