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