1 /*
2 * Copyright (c) 2025 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_lazy_grid_layout_bridge.h"
16 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
17
18 namespace OHOS::Ace::NG {
SetColumnsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)19 ArkUINativeModuleValue LazyGridLayoutBridge::SetColumnsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
20 {
21 EcmaVM* vm = runtimeCallInfo->GetVM();
22 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
23 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(0);
24 Local<JSValueRef> arg_size = runtimeCallInfo->GetCallArgRef(1);
25 CHECK_NULL_RETURN(node->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
26 auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
27
28 CalcDimension size;
29 std::string calcStr;
30 struct ArkUIResourceLength columnGap = { 0.0, 0, nullptr };
31 if (arg_size->IsUndefined() || !ArkTSUtils::ParseJsLengthMetrics(vm, arg_size, size)) {
32 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->resetColumnsGap(nativeNode);
33 } else {
34 if (size.Unit() == DimensionUnit::CALC) {
35 columnGap.unit = static_cast<int32_t>(DimensionUnit::CALC);
36 calcStr = size.CalcValue();
37 columnGap.string = calcStr.c_str();
38 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->setColumnsGap(nativeNode, &columnGap);
39 } else {
40 columnGap.value = size.Value();
41 columnGap.unit = static_cast<int32_t>(size.Unit());
42 columnGap.string = calcStr.c_str();
43 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->setColumnsGap(nativeNode, &columnGap);
44 }
45 }
46 return panda::JSValueRef::Undefined(vm);
47 }
48
ResetColumnsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)49 ArkUINativeModuleValue LazyGridLayoutBridge::ResetColumnsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
50 {
51 EcmaVM* vm = runtimeCallInfo->GetVM();
52 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
53 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(0);
54 CHECK_NULL_RETURN(node->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
55 auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
56 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->resetColumnsGap(nativeNode);
57 return panda::JSValueRef::Undefined(vm);
58 }
59
SetRowsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)60 ArkUINativeModuleValue LazyGridLayoutBridge::SetRowsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
61 {
62 EcmaVM* vm = runtimeCallInfo->GetVM();
63 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
64 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(0);
65 Local<JSValueRef> arg_size = runtimeCallInfo->GetCallArgRef(1);
66 CHECK_NULL_RETURN(node->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
67 auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
68
69 CalcDimension size;
70 std::string calcStr;
71 struct ArkUIResourceLength rowsGap = { 0.0, 0, nullptr };
72 if (arg_size->IsUndefined() || !ArkTSUtils::ParseJsLengthMetrics(vm, arg_size, size)) {
73 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->resetRowsGap(nativeNode);
74 } else {
75 if (size.Unit() == DimensionUnit::CALC) {
76 rowsGap.unit = static_cast<int32_t>(DimensionUnit::CALC);
77 calcStr = size.CalcValue();
78 rowsGap.string = calcStr.c_str();
79 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->setRowsGap(nativeNode, &rowsGap);
80 } else {
81 rowsGap.value = size.Value();
82 rowsGap.unit = static_cast<int32_t>(size.Unit());
83 rowsGap.string = calcStr.c_str();
84 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->setRowsGap(nativeNode, &rowsGap);
85 }
86 }
87 return panda::JSValueRef::Undefined(vm);
88 }
89
ResetRowsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)90 ArkUINativeModuleValue LazyGridLayoutBridge::ResetRowsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
91 {
92 EcmaVM* vm = runtimeCallInfo->GetVM();
93 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
94 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(0);
95 CHECK_NULL_RETURN(node->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
96 auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
97 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->resetRowsGap(nativeNode);
98 return panda::JSValueRef::Undefined(vm);
99 }
100
SetColumnsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)101 ArkUINativeModuleValue LazyVGridLayoutBridge::SetColumnsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
102 {
103 EcmaVM* vm = runtimeCallInfo->GetVM();
104 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
105 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(0);
106 Local<JSValueRef> arg_columnsTemplate = runtimeCallInfo->GetCallArgRef(1);
107 CHECK_NULL_RETURN(node->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
108 auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
109 if (arg_columnsTemplate->IsUndefined() || !arg_columnsTemplate->IsString(vm)) {
110 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->resetColumnsTemplate(nativeNode);
111 } else {
112 std::string columnsTemplate = arg_columnsTemplate->ToString(vm)->ToString(vm);
113 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->setColumnsTemplate(nativeNode, columnsTemplate.c_str());
114 }
115 return panda::JSValueRef::Undefined(vm);
116 }
117
ResetColumnsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)118 ArkUINativeModuleValue LazyVGridLayoutBridge::ResetColumnsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
119 {
120 EcmaVM* vm = runtimeCallInfo->GetVM();
121 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
122 Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(0);
123 CHECK_NULL_RETURN(node->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
124 auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
125 GetArkUINodeModifiers()->getLazyGridLayoutModifier()->resetColumnsTemplate(nativeNode);
126 return panda::JSValueRef::Undefined(vm);
127 }
128 }
129