1 /*
2 * Copyright (c) 2024 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
16 #include "bridge/cj_frontend/interfaces/cj_ffi/cj_grid_col_ffi.h"
17
18 #include "core/components_ng/base/view_abstract.h"
19 #include "core/components_ng/pattern/grid_col/grid_col_model_ng.h"
20
21 using namespace OHOS::Ace;
22
23 namespace {
24 constexpr size_t MAX_NUMBER_BREAKPOINT = 6;
25
InheritGridContainerSize(V2::GridContainerSize & gridContainerSize,std::optional<int32_t> (& containerSizeArray)[MAX_NUMBER_BREAKPOINT],int32_t defaultVal)26 void InheritGridContainerSize(V2::GridContainerSize& gridContainerSize,
27 std::optional<int32_t> (&containerSizeArray)[MAX_NUMBER_BREAKPOINT], int32_t defaultVal)
28 {
29 if (!containerSizeArray[0].has_value()) {
30 containerSizeArray[0] = defaultVal;
31 }
32 for (size_t i = 1; i < MAX_NUMBER_BREAKPOINT; i++) {
33 if (!containerSizeArray[i].has_value()) {
34 containerSizeArray[i] = containerSizeArray[i - 1].value();
35 }
36 }
37 int32_t index = 0;
38 gridContainerSize.xs = containerSizeArray[index++].value();
39 gridContainerSize.sm = containerSizeArray[index++].value();
40 gridContainerSize.md = containerSizeArray[index++].value();
41 gridContainerSize.lg = containerSizeArray[index++].value();
42 gridContainerSize.xl = containerSizeArray[index++].value();
43 gridContainerSize.xxl = containerSizeArray[index].value();
44 }
45
ParserGridContainerSize(int32_t columnNumber,int32_t defaultVal)46 V2::GridContainerSize ParserGridContainerSize(int32_t columnNumber, int32_t defaultVal)
47 {
48 auto gridContainerSize = columnNumber >= 0 ? V2::GridContainerSize(columnNumber)
49 : V2::GridContainerSize(defaultVal);
50 return gridContainerSize;
51 }
52
ParserGridContainerSize(GridRowColumnOption columnNumber,int32_t defaultVal)53 V2::GridContainerSize ParserGridContainerSize(GridRowColumnOption columnNumber, int32_t defaultVal)
54 {
55 auto gridContainerSize = V2::GridContainerSize(defaultVal);
56 std::optional<int32_t> containerSizeArray[MAX_NUMBER_BREAKPOINT];
57 int32_t index = 0;
58 containerSizeArray[index++] = columnNumber.xs;
59 containerSizeArray[index++] = columnNumber.sm;
60 containerSizeArray[index++] = columnNumber.md;
61 containerSizeArray[index++] = columnNumber.lg;
62 containerSizeArray[index++] = columnNumber.xl;
63 containerSizeArray[index] = columnNumber.xxl;
64 InheritGridContainerSize(gridContainerSize, containerSizeArray, defaultVal);
65 return gridContainerSize;
66 }
67 } // namespace
68
69 extern "C" {
FfiOHOSAceFrameworkGridColCreate()70 void FfiOHOSAceFrameworkGridColCreate()
71 {
72 GridColModel::GetInstance()->Create();
73 }
74
FfiOHOSAceFrameworkGridColCreateWithInt32(int32_t span,int32_t offset,int32_t order)75 void FfiOHOSAceFrameworkGridColCreateWithInt32(int32_t span, int32_t offset, int32_t order)
76 {
77 auto spanSize = ParserGridContainerSize(span, 1);
78 auto offsetSize = ParserGridContainerSize(offset, 0);
79 auto orderSize = ParserGridContainerSize(order, 0);
80 GridColModel::GetInstance()->Create(spanSize, offsetSize, orderSize);
81 }
82
FfiOHOSAceFrameworkGridColCreateWithOption(GridRowColumnOption span,GridRowColumnOption offset,GridRowColumnOption order)83 void FfiOHOSAceFrameworkGridColCreateWithOption(
84 GridRowColumnOption span, GridRowColumnOption offset, GridRowColumnOption order)
85 {
86 auto spanSize = ParserGridContainerSize(span, 1);
87 auto offsetSize = ParserGridContainerSize(offset, 0);
88 auto orderSize = ParserGridContainerSize(order, 0);
89 GridColModel::GetInstance()->Create(spanSize, offsetSize, orderSize);
90 }
91
FfiOHOSAceFrameworkGridColSetSpan(int32_t span)92 void FfiOHOSAceFrameworkGridColSetSpan(int32_t span)
93 {
94 auto spanSize = ParserGridContainerSize(span, 1);
95 GridColModel::GetInstance()->SetSpan(spanSize);
96 }
97
FfiOHOSAceFrameworkGridColSetSpanWithOption(GridRowColumnOption span)98 void FfiOHOSAceFrameworkGridColSetSpanWithOption(GridRowColumnOption span)
99 {
100 auto spanSize = ParserGridContainerSize(span, 1);
101 GridColModel::GetInstance()->SetSpan(spanSize);
102 }
103
FfiOHOSAceFrameworkGridColSetOffset(int32_t offset)104 void FfiOHOSAceFrameworkGridColSetOffset(int32_t offset)
105 {
106 auto offsetSize = ParserGridContainerSize(offset, 0);
107 GridColModel::GetInstance()->SetOffset(offsetSize);
108 }
109
FfiOHOSAceFrameworkGridColSetOffsetWithOption(GridRowColumnOption offset)110 void FfiOHOSAceFrameworkGridColSetOffsetWithOption(GridRowColumnOption offset)
111 {
112 auto offsetSize = ParserGridContainerSize(offset, 0);
113 GridColModel::GetInstance()->SetOffset(offsetSize);
114 }
115
FfiOHOSAceFrameworkGridColSetOrder(int32_t order)116 void FfiOHOSAceFrameworkGridColSetOrder(int32_t order)
117 {
118 auto orderSize = ParserGridContainerSize(order, 0);
119 GridColModel::GetInstance()->SetOrder(orderSize);
120 }
121
FfiOHOSAceFrameworkGridColSetOrderWithOption(GridRowColumnOption order)122 void FfiOHOSAceFrameworkGridColSetOrderWithOption(GridRowColumnOption order)
123 {
124 auto orderSize = ParserGridContainerSize(order, 0);
125 GridColModel::GetInstance()->SetOrder(orderSize);
126 }
127 }
128