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