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 "grid_modifier.h"
16
17 #include <unordered_map>
18
19 #include "core/components/scroll/scroll_bar_theme.h"
20 #include "core/components_ng/pattern/grid/grid_model_ng.h"
21 #include "core/components_ng/base/ui_node.h"
22 #include "core/components_ng/pattern/scrollable/scrollable_model_ng.h"
23 #include "core/pipeline_ng/pipeline_context.h"
24 #include "core/interfaces/native/node/node_adapter_impl.h"
25
26 namespace OHOS::Ace::NG {
27 const std::string DEFAULT_ROWS_TEMPLATE = "1fr";
28 const std::string DEFAULT_COLUMNS_TEMPLATE = "1fr";
29 constexpr Dimension DEFAULT_COLUMNS_GAP = 0.0_fp;
30 constexpr Dimension DEFAULT_ROWS_GAP = 0.0_fp;
31 constexpr DisplayMode DEFAULT_SCROLL_BAR = DisplayMode::AUTO;
32 constexpr Dimension DEFAULT_SCROLL_BAR_WIDTH = 4.0_vp;
33 constexpr int32_t DEFAULT_CACHED_COUNT = 1;
34 constexpr bool DEFAULT_EDIT_MODE = false;
35 constexpr FlexDirection DEFAULT_LAYOUT_DIRECTION = FlexDirection::ROW;
36 constexpr int32_t DEFAULT_MAX_COUNT = Infinity<int32_t>();
37 constexpr int32_t DEFAULT_MIN_COUNT = 1;
38 constexpr int32_t DEFAULT_CELL_LENGTH = 0;
39 constexpr bool DEFAULT_MULTI_SELECTABLE = false;
40 constexpr bool DEFAULT_SUPPORT_ANIMATION = false;
41 constexpr Dimension DEFAULT_FADING_EDGE_LENGTH = Dimension(32.0f, DimensionUnit::VP); // default value
42 const float ERROR_FLOAT_CODE = -1.0f;
43 std::string g_strValue;
44
SetGridColumnsTemplate(ArkUINodeHandle node,const char * columnsTemplate)45 void SetGridColumnsTemplate(ArkUINodeHandle node, const char* columnsTemplate)
46 {
47 auto* frameNode = reinterpret_cast<FrameNode*>(node);
48 CHECK_NULL_VOID(frameNode);
49 GridModelNG::SetColumnsTemplate(frameNode, std::string(columnsTemplate));
50 }
51
ResetGridColumnsTemplate(ArkUINodeHandle node)52 void ResetGridColumnsTemplate(ArkUINodeHandle node)
53 {
54 auto* frameNode = reinterpret_cast<FrameNode*>(node);
55 CHECK_NULL_VOID(frameNode);
56 GridModelNG::SetColumnsTemplate(frameNode, DEFAULT_COLUMNS_TEMPLATE);
57 }
SetGridRowsTemplate(ArkUINodeHandle node,const char * rowsTemplate)58 void SetGridRowsTemplate(ArkUINodeHandle node, const char* rowsTemplate)
59 {
60 auto* frameNode = reinterpret_cast<FrameNode*>(node);
61 CHECK_NULL_VOID(frameNode);
62 GridModelNG::SetRowsTemplate(frameNode, std::string(rowsTemplate));
63 }
64
ResetGridRowsTemplate(ArkUINodeHandle node)65 void ResetGridRowsTemplate(ArkUINodeHandle node)
66 {
67 auto* frameNode = reinterpret_cast<FrameNode*>(node);
68 CHECK_NULL_VOID(frameNode);
69 GridModelNG::SetRowsTemplate(frameNode, DEFAULT_ROWS_TEMPLATE);
70 }
SetGridColumnsGap(ArkUINodeHandle node,const struct ArkUIResourceLength * columnsGap)71 void SetGridColumnsGap(ArkUINodeHandle node, const struct ArkUIResourceLength* columnsGap)
72 {
73 auto* frameNode = reinterpret_cast<FrameNode*>(node);
74 CHECK_NULL_VOID(frameNode);
75 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(columnsGap->unit);
76 Dimension gap;
77 if (unitEnum == DimensionUnit::CALC) {
78 gap = CalcDimension(columnsGap->string, DimensionUnit::CALC);
79 } else {
80 gap = CalcDimension(columnsGap->value, unitEnum);
81 }
82 if (LessOrEqual(gap.Value(), 0.0)) {
83 gap = 0.0_px;
84 }
85 GridModelNG::SetColumnsGap(frameNode, gap);
86 }
87
ResetGridColumnsGap(ArkUINodeHandle node)88 void ResetGridColumnsGap(ArkUINodeHandle node)
89 {
90 auto* frameNode = reinterpret_cast<FrameNode*>(node);
91 CHECK_NULL_VOID(frameNode);
92 GridModelNG::SetColumnsGap(frameNode, DEFAULT_COLUMNS_GAP);
93 }
94
SetGridRowsGap(ArkUINodeHandle node,const struct ArkUIResourceLength * rowsGap)95 void SetGridRowsGap(ArkUINodeHandle node, const struct ArkUIResourceLength* rowsGap)
96 {
97 auto* frameNode = reinterpret_cast<FrameNode*>(node);
98 CHECK_NULL_VOID(frameNode);
99 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(rowsGap->unit);
100 Dimension gap;
101 if (unitEnum == DimensionUnit::CALC) {
102 gap = CalcDimension(rowsGap->string, DimensionUnit::CALC);
103 } else {
104 gap = CalcDimension(rowsGap->value, unitEnum);
105 }
106 if (LessOrEqual(gap.Value(), 0.0)) {
107 gap = 0.0_px;
108 }
109 GridModelNG::SetRowsGap(frameNode, gap);
110 }
111
ResetGridRowsGap(ArkUINodeHandle node)112 void ResetGridRowsGap(ArkUINodeHandle node)
113 {
114 auto* frameNode = reinterpret_cast<FrameNode*>(node);
115 CHECK_NULL_VOID(frameNode);
116 GridModelNG::SetRowsGap(frameNode, DEFAULT_ROWS_GAP);
117 }
118
SetGridScrollBar(ArkUINodeHandle node,int32_t scrollBar)119 void SetGridScrollBar(ArkUINodeHandle node, int32_t scrollBar)
120 {
121 auto* frameNode = reinterpret_cast<FrameNode*>(node);
122 CHECK_NULL_VOID(frameNode);
123 DisplayMode mode = static_cast<DisplayMode>(scrollBar);
124 GridModelNG::SetScrollBarMode(frameNode, mode);
125 }
126
ResetGridScrollBar(ArkUINodeHandle node)127 void ResetGridScrollBar(ArkUINodeHandle node)
128 {
129 auto* frameNode = reinterpret_cast<FrameNode*>(node);
130 CHECK_NULL_VOID(frameNode);
131 GridModelNG::SetScrollBarMode(frameNode, DEFAULT_SCROLL_BAR);
132 }
133
SetGridScrollBarWidth(ArkUINodeHandle node,ArkUI_Float32 value,int32_t unit)134 void SetGridScrollBarWidth(ArkUINodeHandle node, ArkUI_Float32 value, int32_t unit)
135 {
136 auto* frameNode = reinterpret_cast<FrameNode*>(node);
137 CHECK_NULL_VOID(frameNode);
138 Dimension scrollBarWidth = Dimension(value, static_cast<OHOS::Ace::DimensionUnit>(unit));
139 GridModelNG::SetScrollBarWidth(frameNode, scrollBarWidth);
140 }
141
ResetGridScrollBarWidth(ArkUINodeHandle node)142 void ResetGridScrollBarWidth(ArkUINodeHandle node)
143 {
144 auto* frameNode = reinterpret_cast<FrameNode*>(node);
145 CHECK_NULL_VOID(frameNode);
146 GridModelNG::SetScrollBarWidth(frameNode, DEFAULT_SCROLL_BAR_WIDTH);
147 }
148
SetGridScrollBarColor(ArkUINodeHandle node,uint32_t scrollBarColor)149 void SetGridScrollBarColor(ArkUINodeHandle node, uint32_t scrollBarColor)
150 {
151 auto* frameNode = reinterpret_cast<FrameNode*>(node);
152 CHECK_NULL_VOID(frameNode);
153 GridModelNG::SetScrollBarColor(frameNode, Color(scrollBarColor));
154 }
155
ResetGridScrollBarColor(ArkUINodeHandle node)156 void ResetGridScrollBarColor(ArkUINodeHandle node)
157 {
158 auto* frameNode = reinterpret_cast<FrameNode*>(node);
159 CHECK_NULL_VOID(frameNode);
160 auto* context = frameNode->GetContext();
161 CHECK_NULL_VOID(context);
162 auto themeManager = context->GetThemeManager();
163 CHECK_NULL_VOID(themeManager);
164 auto scrollBarTheme = themeManager->GetTheme<ScrollBarTheme>();
165 GridModelNG::SetScrollBarColor(frameNode, scrollBarTheme->GetForegroundColor());
166 }
167
SetGridCachedCount(ArkUINodeHandle node,int32_t cachedCount)168 void SetGridCachedCount(ArkUINodeHandle node, int32_t cachedCount)
169 {
170 auto* frameNode = reinterpret_cast<FrameNode*>(node);
171 CHECK_NULL_VOID(frameNode);
172 GridModelNG::SetCachedCount(frameNode, cachedCount);
173 }
174
ResetGridCachedCount(ArkUINodeHandle node)175 void ResetGridCachedCount(ArkUINodeHandle node)
176 {
177 auto* frameNode = reinterpret_cast<FrameNode*>(node);
178 CHECK_NULL_VOID(frameNode);
179 GridModelNG::SetCachedCount(frameNode, DEFAULT_CACHED_COUNT);
180 }
181
SetGridEditMode(ArkUINodeHandle node,ArkUI_Bool editMode)182 void SetGridEditMode(ArkUINodeHandle node, ArkUI_Bool editMode)
183 {
184 auto* frameNode = reinterpret_cast<FrameNode*>(node);
185 CHECK_NULL_VOID(frameNode);
186 GridModelNG::SetEditable(frameNode, editMode);
187 }
188
ResetGridEditMode(ArkUINodeHandle node)189 void ResetGridEditMode(ArkUINodeHandle node)
190 {
191 auto* frameNode = reinterpret_cast<FrameNode*>(node);
192 CHECK_NULL_VOID(frameNode);
193 GridModelNG::SetEditable(frameNode, DEFAULT_EDIT_MODE);
194 }
195
SetGridMultiSelectable(ArkUINodeHandle node,ArkUI_Bool multiSelectable)196 void SetGridMultiSelectable(ArkUINodeHandle node, ArkUI_Bool multiSelectable)
197 {
198 auto* frameNode = reinterpret_cast<FrameNode*>(node);
199 CHECK_NULL_VOID(frameNode);
200 GridModelNG::SetMultiSelectable(frameNode, multiSelectable);
201 }
202
ResetGridMultiSelectable(ArkUINodeHandle node)203 void ResetGridMultiSelectable(ArkUINodeHandle node)
204 {
205 auto* frameNode = reinterpret_cast<FrameNode*>(node);
206 CHECK_NULL_VOID(frameNode);
207 GridModelNG::SetMultiSelectable(frameNode, DEFAULT_MULTI_SELECTABLE);
208 }
209
SetGridMaxCount(ArkUINodeHandle node,int32_t maxCount)210 void SetGridMaxCount(ArkUINodeHandle node, int32_t maxCount)
211 {
212 auto* frameNode = reinterpret_cast<FrameNode*>(node);
213 CHECK_NULL_VOID(frameNode);
214 GridModelNG::SetMaxCount(frameNode, maxCount);
215 }
216
ResetGridMaxCount(ArkUINodeHandle node)217 void ResetGridMaxCount(ArkUINodeHandle node)
218 {
219 auto* frameNode = reinterpret_cast<FrameNode*>(node);
220 CHECK_NULL_VOID(frameNode);
221 GridModelNG::SetMaxCount(frameNode, DEFAULT_MAX_COUNT);
222 }
223
SetGridMinCount(ArkUINodeHandle node,int32_t minCount)224 void SetGridMinCount(ArkUINodeHandle node, int32_t minCount)
225 {
226 auto* frameNode = reinterpret_cast<FrameNode*>(node);
227 CHECK_NULL_VOID(frameNode);
228 GridModelNG::SetMinCount(frameNode, minCount);
229 }
230
ResetGridMinCount(ArkUINodeHandle node)231 void ResetGridMinCount(ArkUINodeHandle node)
232 {
233 auto* frameNode = reinterpret_cast<FrameNode*>(node);
234 CHECK_NULL_VOID(frameNode);
235 GridModelNG::SetMinCount(frameNode, DEFAULT_MIN_COUNT);
236 }
237
SetGridCellLength(ArkUINodeHandle node,int32_t cellLength)238 void SetGridCellLength(ArkUINodeHandle node, int32_t cellLength)
239 {
240 auto* frameNode = reinterpret_cast<FrameNode*>(node);
241 CHECK_NULL_VOID(frameNode);
242 GridModelNG::SetCellLength(frameNode, cellLength);
243 }
244
ResetGridCellLength(ArkUINodeHandle node)245 void ResetGridCellLength(ArkUINodeHandle node)
246 {
247 auto* frameNode = reinterpret_cast<FrameNode*>(node);
248 CHECK_NULL_VOID(frameNode);
249 GridModelNG::SetCellLength(frameNode, DEFAULT_CELL_LENGTH);
250 }
251
SetGridLayoutDirection(ArkUINodeHandle node,int32_t layoutDirection)252 void SetGridLayoutDirection(ArkUINodeHandle node, int32_t layoutDirection)
253 {
254 auto* frameNode = reinterpret_cast<FrameNode*>(node);
255 CHECK_NULL_VOID(frameNode);
256 FlexDirection direction = static_cast<FlexDirection>(layoutDirection);
257 GridModelNG::SetLayoutDirection(frameNode, direction);
258 }
259
ResetGridLayoutDirection(ArkUINodeHandle node)260 void ResetGridLayoutDirection(ArkUINodeHandle node)
261 {
262 auto* frameNode = reinterpret_cast<FrameNode*>(node);
263 CHECK_NULL_VOID(frameNode);
264 GridModelNG::SetLayoutDirection(frameNode, DEFAULT_LAYOUT_DIRECTION);
265 }
266
SetGridSupportAnimation(ArkUINodeHandle node,ArkUI_Bool supportAnimation)267 void SetGridSupportAnimation(ArkUINodeHandle node, ArkUI_Bool supportAnimation)
268 {
269 auto* frameNode = reinterpret_cast<FrameNode*>(node);
270 CHECK_NULL_VOID(frameNode);
271 GridModelNG::SetSupportAnimation(frameNode, supportAnimation);
272 }
273
ResetGridSupportAnimation(ArkUINodeHandle node)274 void ResetGridSupportAnimation(ArkUINodeHandle node)
275 {
276 auto* frameNode = reinterpret_cast<FrameNode*>(node);
277 CHECK_NULL_VOID(frameNode);
278 GridModelNG::SetSupportAnimation(frameNode, DEFAULT_SUPPORT_ANIMATION);
279 }
280
SetEdgeEffect(ArkUINodeHandle node,int32_t edgeEffect,ArkUI_Bool alwaysEnabled)281 void SetEdgeEffect(ArkUINodeHandle node, int32_t edgeEffect, ArkUI_Bool alwaysEnabled)
282 {
283 auto* frameNode = reinterpret_cast<FrameNode*>(node);
284 CHECK_NULL_VOID(frameNode);
285 GridModelNG::SetEdgeEffect(frameNode, static_cast<EdgeEffect>(edgeEffect), alwaysEnabled);
286 }
287
ResetEdgeEffect(ArkUINodeHandle node)288 void ResetEdgeEffect(ArkUINodeHandle node)
289 {
290 auto* frameNode = reinterpret_cast<FrameNode*>(node);
291 CHECK_NULL_VOID(frameNode);
292 EdgeEffect edgeEffect = EdgeEffect::NONE;
293 ArkUI_Bool alwaysEnabled = false;
294 GridModelNG::SetEdgeEffect(frameNode, edgeEffect, alwaysEnabled);
295 }
296
SetNestedScroll(ArkUINodeHandle node,int32_t forward,int32_t backward)297 void SetNestedScroll(ArkUINodeHandle node, int32_t forward, int32_t backward)
298 {
299 NestedScrollOptions opt = {
300 .forward = static_cast<NestedScrollMode>(forward),
301 .backward = static_cast<NestedScrollMode>(backward),
302 };
303 auto* frameNode = reinterpret_cast<FrameNode*>(node);
304 CHECK_NULL_VOID(frameNode);
305 GridModelNG::SetNestedScroll(frameNode, opt);
306 }
307
ResetNestedScroll(ArkUINodeHandle node)308 void ResetNestedScroll(ArkUINodeHandle node)
309 {
310 auto* frameNode = reinterpret_cast<FrameNode*>(node);
311 CHECK_NULL_VOID(frameNode);
312 const NestedScrollOptions nestedOpt = {
313 .forward = NestedScrollMode::SELF_ONLY,
314 .backward = NestedScrollMode::SELF_ONLY,
315 };
316 GridModelNG::SetNestedScroll(frameNode, nestedOpt);
317 }
318
SetEnableScroll(ArkUINodeHandle node,ArkUI_Bool ScrollEnabled)319 void SetEnableScroll(ArkUINodeHandle node, ArkUI_Bool ScrollEnabled)
320 {
321 auto* frameNode = reinterpret_cast<FrameNode*>(node);
322 CHECK_NULL_VOID(frameNode);
323 GridModelNG::SetScrollEnabled(frameNode, ScrollEnabled);
324 }
325
ResetEnableScroll(ArkUINodeHandle node)326 void ResetEnableScroll(ArkUINodeHandle node)
327 {
328 auto* frameNode = reinterpret_cast<FrameNode*>(node);
329 CHECK_NULL_VOID(frameNode);
330 ArkUI_Bool scrollEnabled = true;
331 GridModelNG::SetScrollEnabled(frameNode, scrollEnabled);
332 }
333
SetFriction(ArkUINodeHandle node,ArkUI_Float32 friction)334 void SetFriction(ArkUINodeHandle node, ArkUI_Float32 friction)
335 {
336 auto* frameNode = reinterpret_cast<FrameNode*>(node);
337 CHECK_NULL_VOID(frameNode);
338 GridModelNG::SetFriction(frameNode, friction);
339 }
340
ResetFriction(ArkUINodeHandle node)341 void ResetFriction(ArkUINodeHandle node)
342 {
343 auto* frameNode = reinterpret_cast<FrameNode*>(node);
344 CHECK_NULL_VOID(frameNode);
345 ArkUI_Float32 friction = -1.0;
346 GridModelNG::SetFriction(frameNode, friction);
347 }
348
SetFlingSpeedLimit(ArkUINodeHandle node,ArkUI_Float32 flingSpeedLimit)349 void SetFlingSpeedLimit(ArkUINodeHandle node, ArkUI_Float32 flingSpeedLimit)
350 {
351 auto* frameNode = reinterpret_cast<FrameNode*>(node);
352 CHECK_NULL_VOID(frameNode);
353 ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
354 }
355
ResetFlingSpeedLimit(ArkUINodeHandle node)356 void ResetFlingSpeedLimit(ArkUINodeHandle node)
357 {
358 auto* frameNode = reinterpret_cast<FrameNode*>(node);
359 CHECK_NULL_VOID(frameNode);
360 ArkUI_Float32 flingSpeedLimit = -1.0;
361 ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
362 }
363
SetGridAlignItems(ArkUINodeHandle node,int32_t alignItems)364 void SetGridAlignItems(ArkUINodeHandle node, int32_t alignItems)
365 {
366 auto* frameNode = reinterpret_cast<FrameNode*>(node);
367 CHECK_NULL_VOID(frameNode);
368 GridModelNG::SetAlignItems(frameNode, static_cast<GridItemAlignment>(alignItems));
369 }
370
ResetGridAlignItems(ArkUINodeHandle node)371 void ResetGridAlignItems(ArkUINodeHandle node)
372 {
373 auto* frameNode = reinterpret_cast<FrameNode*>(node);
374 CHECK_NULL_VOID(frameNode);
375 GridModelNG::SetAlignItems(frameNode, GridItemAlignment::DEFAULT);
376 }
377
GetColumnsTemplate(ArkUINodeHandle node)378 ArkUI_CharPtr GetColumnsTemplate(ArkUINodeHandle node)
379 {
380 auto* frameNode = reinterpret_cast<FrameNode*>(node);
381 CHECK_NULL_RETURN(frameNode, nullptr);
382 g_strValue = GridModelNG::GetColumnsTemplate(frameNode);
383 return g_strValue.c_str();
384 }
385
GetRowsTemplate(ArkUINodeHandle node)386 ArkUI_CharPtr GetRowsTemplate(ArkUINodeHandle node)
387 {
388 auto* frameNode = reinterpret_cast<FrameNode*>(node);
389 CHECK_NULL_RETURN(frameNode, nullptr);
390 g_strValue = GridModelNG::GetRowsTemplate(frameNode);
391 return g_strValue.c_str();
392 }
393
GetColumnsGap(ArkUINodeHandle node)394 ArkUI_Float32 GetColumnsGap(ArkUINodeHandle node)
395 {
396 auto* frameNode = reinterpret_cast<FrameNode*>(node);
397 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
398 return GridModelNG::GetColumnsGap(frameNode);
399 }
400
GetRowsGap(ArkUINodeHandle node)401 ArkUI_Float32 GetRowsGap(ArkUINodeHandle node)
402 {
403 auto* frameNode = reinterpret_cast<FrameNode*>(node);
404 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
405 return GridModelNG::GetRowsGap(frameNode);
406 }
407
SetNodeAdapter(ArkUINodeHandle node,ArkUINodeAdapterHandle handle)408 ArkUI_Int32 SetNodeAdapter(ArkUINodeHandle node, ArkUINodeAdapterHandle handle)
409 {
410 auto* frameNode = reinterpret_cast<FrameNode*>(node);
411 CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
412 auto totalChildCount = frameNode->TotalChildCount();
413 if (totalChildCount > 0) {
414 return ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_CHILD_NODE_EXIST;
415 }
416 NodeAdapter::GetNodeAdapterAPI()->attachHostNode(handle, node);
417 return ERROR_CODE_NO_ERROR;
418 }
419
ResetNodeAdapter(ArkUINodeHandle node)420 void ResetNodeAdapter(ArkUINodeHandle node)
421 {
422 NodeAdapter::GetNodeAdapterAPI()->detachHostNode(node);
423 }
424
GetNodeAdapter(ArkUINodeHandle node)425 ArkUINodeAdapterHandle GetNodeAdapter(ArkUINodeHandle node)
426 {
427 return NodeAdapter::GetNodeAdapterAPI()->getNodeAdapter(node);
428 }
429
SetCachedCount(ArkUINodeHandle node,ArkUI_Int32 cachedCount)430 void SetCachedCount(ArkUINodeHandle node, ArkUI_Int32 cachedCount)
431 {
432 auto* frameNode = reinterpret_cast<FrameNode*>(node);
433 CHECK_NULL_VOID(frameNode);
434 GridModelNG::SetCachedCount(frameNode, cachedCount);
435 }
436
ResetCachedCount(ArkUINodeHandle node)437 void ResetCachedCount(ArkUINodeHandle node)
438 {
439 auto* frameNode = reinterpret_cast<FrameNode*>(node);
440 CHECK_NULL_VOID(frameNode);
441 GridModelNG::SetCachedCount(frameNode, 1);
442 }
443
GetCachedCount(ArkUINodeHandle node)444 ArkUI_Int32 GetCachedCount(ArkUINodeHandle node)
445 {
446 auto* frameNode = reinterpret_cast<FrameNode*>(node);
447 CHECK_NULL_RETURN(frameNode, 1);
448 return GridModelNG::GetCachedCount(frameNode);
449 }
450
SetGridFadingEdge(ArkUINodeHandle node,ArkUI_Bool fadingEdge,ArkUI_Float32 fadingEdgeLengthValue,ArkUI_Int32 fadingEdgeLengthUnit)451 void SetGridFadingEdge(
452 ArkUINodeHandle node, ArkUI_Bool fadingEdge, ArkUI_Float32 fadingEdgeLengthValue, ArkUI_Int32 fadingEdgeLengthUnit)
453 {
454 auto* frameNode = reinterpret_cast<FrameNode*>(node);
455 CHECK_NULL_VOID(frameNode);
456 Dimension fadingEdgeLengthDimension =
457 Dimension(fadingEdgeLengthValue, static_cast<OHOS::Ace::DimensionUnit>(fadingEdgeLengthUnit));
458 NG::ScrollableModelNG::SetFadingEdge(frameNode, fadingEdge, fadingEdgeLengthDimension);
459 }
460
ResetGridFadingEdge(ArkUINodeHandle node)461 void ResetGridFadingEdge(ArkUINodeHandle node)
462 {
463 auto* frameNode = reinterpret_cast<FrameNode*>(node);
464 CHECK_NULL_VOID(frameNode);
465 NG::ScrollableModelNG::SetFadingEdge(frameNode, false, DEFAULT_FADING_EDGE_LENGTH);
466 }
467
SetShowCached(ArkUINodeHandle node,ArkUI_Bool show)468 void SetShowCached(ArkUINodeHandle node, ArkUI_Bool show)
469 {
470 auto* frameNode = reinterpret_cast<FrameNode*>(node);
471 CHECK_NULL_VOID(frameNode);
472 GridModelNG::SetShowCached(frameNode, show);
473 }
474
ResetShowCached(ArkUINodeHandle node)475 void ResetShowCached(ArkUINodeHandle node)
476 {
477 auto* frameNode = reinterpret_cast<FrameNode*>(node);
478 CHECK_NULL_VOID(frameNode);
479 GridModelNG::SetShowCached(frameNode, false);
480 }
481
GetShowCached(ArkUINodeHandle node)482 ArkUI_Bool GetShowCached(ArkUINodeHandle node)
483 {
484 auto* frameNode = reinterpret_cast<FrameNode*>(node);
485 CHECK_NULL_RETURN(frameNode, false);
486 return GridModelNG::GetShowCached(frameNode);
487 }
488
489 namespace NodeModifier {
GetGridModifier()490 const ArkUIGridModifier* GetGridModifier()
491 {
492 static const ArkUIGridModifier modifier = { SetGridColumnsTemplate, ResetGridColumnsTemplate, SetGridRowsTemplate,
493 ResetGridRowsTemplate, SetGridColumnsGap, ResetGridColumnsGap, SetGridRowsGap, ResetGridRowsGap,
494 SetGridScrollBar, ResetGridScrollBar, SetGridScrollBarWidth, ResetGridScrollBarWidth, SetGridScrollBarColor,
495 ResetGridScrollBarColor, SetGridCachedCount, ResetGridCachedCount, SetShowCached, ResetShowCached,
496 GetShowCached, SetGridEditMode, ResetGridEditMode, SetGridMultiSelectable, ResetGridMultiSelectable,
497 SetGridMaxCount, ResetGridMaxCount, SetGridMinCount, ResetGridMinCount, SetGridCellLength, ResetGridCellLength,
498 SetGridLayoutDirection, ResetGridLayoutDirection, SetGridSupportAnimation, ResetGridSupportAnimation,
499 SetEdgeEffect, ResetEdgeEffect, SetNestedScroll, ResetNestedScroll, SetEnableScroll, ResetEnableScroll,
500 SetFriction, ResetFriction, GetColumnsTemplate, GetRowsTemplate, GetColumnsGap, GetRowsGap, SetNodeAdapter,
501 ResetNodeAdapter, GetNodeAdapter, SetCachedCount, ResetCachedCount, GetCachedCount, SetFlingSpeedLimit,
502 ResetFlingSpeedLimit, SetGridAlignItems, ResetGridAlignItems, SetGridFadingEdge, ResetGridFadingEdge };
503 return &modifier;
504 }
505
GetCJUIGridModifier()506 const CJUIGridModifier* GetCJUIGridModifier()
507 {
508 static const CJUIGridModifier modifier = {
509 SetGridColumnsTemplate, ResetGridColumnsTemplate, SetGridRowsTemplate, ResetGridRowsTemplate,
510 SetGridColumnsGap, ResetGridColumnsGap, SetGridRowsGap, ResetGridRowsGap,
511 SetGridScrollBar, ResetGridScrollBar, SetGridScrollBarWidth, ResetGridScrollBarWidth, SetGridScrollBarColor,
512 ResetGridScrollBarColor, SetGridCachedCount, ResetGridCachedCount, SetGridEditMode, ResetGridEditMode,
513 SetGridMultiSelectable, ResetGridMultiSelectable, SetGridMaxCount, ResetGridMaxCount, SetGridMinCount,
514 ResetGridMinCount, SetGridCellLength, ResetGridCellLength, SetGridLayoutDirection, ResetGridLayoutDirection,
515 SetGridSupportAnimation, ResetGridSupportAnimation, SetEdgeEffect, ResetEdgeEffect, SetNestedScroll,
516 ResetNestedScroll, SetEnableScroll, ResetEnableScroll, SetFriction, ResetFriction, GetColumnsTemplate,
517 GetRowsTemplate, GetColumnsGap, GetRowsGap, SetNodeAdapter, ResetNodeAdapter, GetNodeAdapter, SetCachedCount,
518 ResetCachedCount, GetCachedCount, SetFlingSpeedLimit, ResetFlingSpeedLimit };
519 return &modifier;
520 }
521
SetOnGridScrollIndex(ArkUINodeHandle node,void * extraParam)522 void SetOnGridScrollIndex(ArkUINodeHandle node, void* extraParam)
523 {
524 auto* frameNode = reinterpret_cast<FrameNode*>(node);
525 CHECK_NULL_VOID(frameNode);
526 auto onEvent = [node, extraParam](int32_t first, int32_t last) {
527 ArkUINodeEvent event;
528 event.kind = COMPONENT_ASYNC_EVENT;
529 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
530 event.componentAsyncEvent.subKind = ON_GRID_SCROLL_TO_INDEX;
531 event.componentAsyncEvent.data[0].i32 = first;
532 event.componentAsyncEvent.data[1].i32 = last;
533 SendArkUIAsyncEvent(&event);
534 };
535 GridModelNG::SetOnScrollIndex(frameNode, std::move(onEvent));
536 }
537
ResetOnGridScrollIndex(ArkUINodeHandle node)538 void ResetOnGridScrollIndex(ArkUINodeHandle node)
539 {
540 auto* frameNode = reinterpret_cast<FrameNode*>(node);
541 CHECK_NULL_VOID(frameNode);
542 GridModelNG::SetOnScrollIndex(frameNode, nullptr);
543 }
544 } // namespace NodeModifier
545 } // namespace OHOS::Ace::NG