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
16 #include "core/interfaces/native/node/grid_col_modifier.h"
17 #include <cstdint>
18 #include "core/pipeline/base/element_register.h"
19 #include "core/components_ng/base/frame_node.h"
20 #include "core/components_ng/base/view_abstract.h"
21 #include "core/components/common/layout/constants.h"
22 #include "core/components_ng/pattern/grid_col/grid_col_model_ng.h"
23
24 namespace OHOS::Ace::NG {
25 constexpr int32_t SIZE_ARRAY = 6;
26 constexpr int COL_0 = 0;
27 constexpr int COL_1 = 1;
28 constexpr int COL_2 = 2;
29 constexpr int COL_3 = 3;
30 constexpr int COL_4 = 4;
31 constexpr int COL_5 = 5;
32
InheritGridContainerSize(OHOS::Ace::V2::GridContainerSize & gridContainerSize,int32_t * containerSizeArray,int32_t size,int32_t defaultVal)33 void InheritGridContainerSize(OHOS::Ace::V2::GridContainerSize &gridContainerSize,
34 int32_t *containerSizeArray, int32_t size, int32_t defaultVal)
35 {
36 if (containerSizeArray[0] == -1) {
37 containerSizeArray[0] = defaultVal;
38 }
39 for (int32_t i = 1; i < size; i++) {
40 if (containerSizeArray[i] == -1) {
41 containerSizeArray[i] = containerSizeArray[i - 1];
42 }
43 }
44 gridContainerSize.xs = containerSizeArray[COL_0];
45 gridContainerSize.sm = containerSizeArray[COL_1];
46 gridContainerSize.md = containerSizeArray[COL_2];
47 gridContainerSize.lg = containerSizeArray[COL_3];
48 gridContainerSize.xl = containerSizeArray[COL_4];
49 gridContainerSize.xxl = containerSizeArray[COL_5];
50 }
51
SetSpan(ArkUINodeHandle node,int32_t * containerSizeArray,int32_t size)52 void SetSpan(ArkUINodeHandle node, int32_t *containerSizeArray, int32_t size)
53 {
54 auto *frameNode = reinterpret_cast<FrameNode *>(node);
55 CHECK_NULL_VOID(frameNode);
56 auto span = OHOS::Ace::V2::GridContainerSize(1);
57 InheritGridContainerSize(span, containerSizeArray, size, 1);
58 GridColModelNG::SetSpan(frameNode, span);
59 }
60
ResetSpan(ArkUINodeHandle node)61 void ResetSpan(ArkUINodeHandle node)
62 {
63 auto *frameNode = reinterpret_cast<FrameNode *>(node);
64 CHECK_NULL_VOID(frameNode);
65 auto span = OHOS::Ace::V2::GridContainerSize(1);
66 int32_t containerSizeArray[SIZE_ARRAY] = {1, 1, 1, 1, 1, 1};
67 InheritGridContainerSize(span, containerSizeArray, SIZE_ARRAY, 1);
68 GridColModelNG::SetSpan(frameNode, span);
69 }
70
SetGridColOffset(ArkUINodeHandle node,int32_t * containerSizeArray,int32_t size)71 void SetGridColOffset(ArkUINodeHandle node, int32_t *containerSizeArray, int32_t size)
72 {
73 auto *frameNode = reinterpret_cast<FrameNode *>(node);
74 CHECK_NULL_VOID(frameNode);
75 auto offset = OHOS::Ace::V2::GridContainerSize(0);
76 InheritGridContainerSize(offset, containerSizeArray, size, 0);
77 GridColModelNG::SetOffset(frameNode, offset);
78 }
79
ResetGridColOffset(ArkUINodeHandle node)80 void ResetGridColOffset(ArkUINodeHandle node)
81 {
82 auto *frameNode = reinterpret_cast<FrameNode *>(node);
83 CHECK_NULL_VOID(frameNode);
84 auto offset = OHOS::Ace::V2::GridContainerSize(0);
85 int32_t containerSizeArray[SIZE_ARRAY] = {0};
86 InheritGridContainerSize(offset, containerSizeArray, SIZE_ARRAY, 0);
87 GridColModelNG::SetOffset(frameNode, offset);
88 }
89
SetOrder(ArkUINodeHandle node,int32_t * containerSizeArray,int32_t size)90 void SetOrder(ArkUINodeHandle node, int32_t *containerSizeArray, int32_t size)
91 {
92 auto *frameNode = reinterpret_cast<FrameNode *>(node);
93 CHECK_NULL_VOID(frameNode);
94 auto Order = OHOS::Ace::V2::GridContainerSize(0);
95 InheritGridContainerSize(Order, containerSizeArray, size, 0);
96 GridColModelNG::SetOrder(frameNode, Order);
97 }
98
ResetOrder(ArkUINodeHandle node)99 void ResetOrder(ArkUINodeHandle node)
100 {
101 auto *frameNode = reinterpret_cast<FrameNode *>(node);
102 CHECK_NULL_VOID(frameNode);
103 auto Order = OHOS::Ace::V2::GridContainerSize(0);
104 int32_t containerSizeArray[SIZE_ARRAY] = {0};
105 InheritGridContainerSize(Order, containerSizeArray, SIZE_ARRAY, 0);
106 GridColModelNG::SetOrder(frameNode, Order);
107 }
108
109 namespace NodeModifier {
GetGridColModifier()110 const ArkUIGridColModifier* GetGridColModifier()
111 {
112 static const ArkUIGridColModifier modifier = {
113 SetSpan, ResetSpan, SetGridColOffset, ResetGridColOffset, SetOrder, ResetOrder,
114 };
115 return &modifier;
116 }
117
GetCJUIGridColModifier()118 const CJUIGridColModifier* GetCJUIGridColModifier()
119 {
120 static const CJUIGridColModifier modifier = {
121 SetSpan, ResetSpan, SetGridColOffset, ResetGridColOffset, SetOrder, ResetOrder,
122 };
123 return &modifier;
124 }
125 }
126 }