• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-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 "grid_modifier.h"
16 
17 #include "core/components/scroll/scroll_bar_theme.h"
18 #include "core/components_ng/pattern/grid/grid_model_ng.h"
19 #include "core/components_ng/pattern/scrollable/scrollable_model_ng.h"
20 #include "core/interfaces/native/node/node_adapter_impl.h"
21 
22 namespace OHOS::Ace::NG {
23 const std::string DEFAULT_ROWS_TEMPLATE = "1fr";
24 const std::string DEFAULT_COLUMNS_TEMPLATE = "1fr";
25 constexpr Dimension DEFAULT_COLUMNS_GAP = 0.0_fp;
26 constexpr Dimension DEFAULT_ROWS_GAP = 0.0_fp;
27 constexpr DisplayMode DEFAULT_SCROLL_BAR = DisplayMode::AUTO;
28 constexpr Dimension DEFAULT_SCROLL_BAR_WIDTH = 4.0_vp;
29 constexpr int32_t DEFAULT_CACHED_COUNT = 1;
30 constexpr bool DEFAULT_EDIT_MODE = false;
31 constexpr FlexDirection DEFAULT_LAYOUT_DIRECTION = FlexDirection::ROW;
32 constexpr int32_t DEFAULT_MAX_COUNT = Infinity<int32_t>();
33 constexpr int32_t DEFAULT_MIN_COUNT = 1;
34 constexpr int32_t DEFAULT_CELL_LENGTH = 0;
35 constexpr bool DEFAULT_MULTI_SELECTABLE = false;
36 constexpr bool DEFAULT_SUPPORT_ANIMATION = false;
37 constexpr Dimension DEFAULT_FADING_EDGE_LENGTH = Dimension(32.0f, DimensionUnit::VP); // default value
38 const float ERROR_FLOAT_CODE = -1.0f;
39 std::string g_strValue;
40 
SetGridColumnsTemplate(ArkUINodeHandle node,const char * columnsTemplate)41 void SetGridColumnsTemplate(ArkUINodeHandle node, const char* columnsTemplate)
42 {
43     auto* frameNode = reinterpret_cast<FrameNode*>(node);
44     CHECK_NULL_VOID(frameNode);
45     GridModelNG::SetColumnsTemplate(frameNode, std::string(columnsTemplate));
46 }
47 
ResetGridColumnsTemplate(ArkUINodeHandle node)48 void ResetGridColumnsTemplate(ArkUINodeHandle node)
49 {
50     auto* frameNode = reinterpret_cast<FrameNode*>(node);
51     CHECK_NULL_VOID(frameNode);
52     GridModelNG::SetColumnsTemplate(frameNode, DEFAULT_COLUMNS_TEMPLATE);
53 }
SetGridRowsTemplate(ArkUINodeHandle node,const char * rowsTemplate)54 void SetGridRowsTemplate(ArkUINodeHandle node, const char* rowsTemplate)
55 {
56     auto* frameNode = reinterpret_cast<FrameNode*>(node);
57     CHECK_NULL_VOID(frameNode);
58     GridModelNG::SetRowsTemplate(frameNode, std::string(rowsTemplate));
59 }
60 
ResetGridRowsTemplate(ArkUINodeHandle node)61 void ResetGridRowsTemplate(ArkUINodeHandle node)
62 {
63     auto* frameNode = reinterpret_cast<FrameNode*>(node);
64     CHECK_NULL_VOID(frameNode);
65     GridModelNG::SetRowsTemplate(frameNode, DEFAULT_ROWS_TEMPLATE);
66 }
SetGridColumnsGap(ArkUINodeHandle node,const struct ArkUIResourceLength * columnsGap)67 void SetGridColumnsGap(ArkUINodeHandle node, const struct ArkUIResourceLength* columnsGap)
68 {
69     auto* frameNode = reinterpret_cast<FrameNode*>(node);
70     CHECK_NULL_VOID(frameNode);
71     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(columnsGap->unit);
72     Dimension gap;
73     if (unitEnum == DimensionUnit::CALC) {
74         gap = CalcDimension(columnsGap->string, DimensionUnit::CALC);
75     } else {
76         gap = CalcDimension(columnsGap->value, unitEnum);
77     }
78     if (LessOrEqual(gap.Value(), 0.0)) {
79         gap = 0.0_px;
80     }
81     GridModelNG::SetColumnsGap(frameNode, gap);
82 }
83 
ResetGridColumnsGap(ArkUINodeHandle node)84 void ResetGridColumnsGap(ArkUINodeHandle node)
85 {
86     auto* frameNode = reinterpret_cast<FrameNode*>(node);
87     CHECK_NULL_VOID(frameNode);
88     GridModelNG::SetColumnsGap(frameNode, DEFAULT_COLUMNS_GAP);
89 }
90 
SetGridRowsGap(ArkUINodeHandle node,const struct ArkUIResourceLength * rowsGap)91 void SetGridRowsGap(ArkUINodeHandle node, const struct ArkUIResourceLength* rowsGap)
92 {
93     auto* frameNode = reinterpret_cast<FrameNode*>(node);
94     CHECK_NULL_VOID(frameNode);
95     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(rowsGap->unit);
96     Dimension gap;
97     if (unitEnum == DimensionUnit::CALC) {
98         gap = CalcDimension(rowsGap->string, DimensionUnit::CALC);
99     } else {
100         gap = CalcDimension(rowsGap->value, unitEnum);
101     }
102     if (LessOrEqual(gap.Value(), 0.0)) {
103         gap = 0.0_px;
104     }
105     GridModelNG::SetRowsGap(frameNode, gap);
106 }
107 
ResetGridRowsGap(ArkUINodeHandle node)108 void ResetGridRowsGap(ArkUINodeHandle node)
109 {
110     auto* frameNode = reinterpret_cast<FrameNode*>(node);
111     CHECK_NULL_VOID(frameNode);
112     GridModelNG::SetRowsGap(frameNode, DEFAULT_ROWS_GAP);
113 }
114 
SetGridScrollBar(ArkUINodeHandle node,int32_t scrollBar)115 void SetGridScrollBar(ArkUINodeHandle node, int32_t scrollBar)
116 {
117     auto* frameNode = reinterpret_cast<FrameNode*>(node);
118     CHECK_NULL_VOID(frameNode);
119     DisplayMode mode = static_cast<DisplayMode>(scrollBar);
120     GridModelNG::SetScrollBarMode(frameNode, mode);
121 }
122 
ResetGridScrollBar(ArkUINodeHandle node)123 void ResetGridScrollBar(ArkUINodeHandle node)
124 {
125     auto* frameNode = reinterpret_cast<FrameNode*>(node);
126     CHECK_NULL_VOID(frameNode);
127     GridModelNG::SetScrollBarMode(frameNode, DEFAULT_SCROLL_BAR);
128 }
129 
SetGridScrollBarWidth(ArkUINodeHandle node,ArkUI_Float32 value,int32_t unit)130 void SetGridScrollBarWidth(ArkUINodeHandle node, ArkUI_Float32 value, int32_t unit)
131 {
132     auto* frameNode = reinterpret_cast<FrameNode*>(node);
133     CHECK_NULL_VOID(frameNode);
134     Dimension scrollBarWidth = Dimension(value, static_cast<OHOS::Ace::DimensionUnit>(unit));
135     GridModelNG::SetScrollBarWidth(frameNode, scrollBarWidth);
136 }
137 
ResetGridScrollBarWidth(ArkUINodeHandle node)138 void ResetGridScrollBarWidth(ArkUINodeHandle node)
139 {
140     auto* frameNode = reinterpret_cast<FrameNode*>(node);
141     CHECK_NULL_VOID(frameNode);
142     GridModelNG::SetScrollBarWidth(frameNode, DEFAULT_SCROLL_BAR_WIDTH);
143 }
144 
SetGridScrollBarColor(ArkUINodeHandle node,uint32_t scrollBarColor)145 void SetGridScrollBarColor(ArkUINodeHandle node, uint32_t scrollBarColor)
146 {
147     auto* frameNode = reinterpret_cast<FrameNode*>(node);
148     CHECK_NULL_VOID(frameNode);
149     GridModelNG::SetScrollBarColor(frameNode, Color(scrollBarColor));
150 }
151 
ResetGridScrollBarColor(ArkUINodeHandle node)152 void ResetGridScrollBarColor(ArkUINodeHandle node)
153 {
154     auto* frameNode = reinterpret_cast<FrameNode*>(node);
155     CHECK_NULL_VOID(frameNode);
156     auto* context = frameNode->GetContext();
157     CHECK_NULL_VOID(context);
158     auto themeManager = context->GetThemeManager();
159     CHECK_NULL_VOID(themeManager);
160     auto scrollBarTheme = themeManager->GetTheme<ScrollBarTheme>();
161     GridModelNG::SetScrollBarColor(frameNode, scrollBarTheme->GetForegroundColor());
162 }
163 
SetGridCachedCount(ArkUINodeHandle node,int32_t cachedCount)164 void SetGridCachedCount(ArkUINodeHandle node, int32_t cachedCount)
165 {
166     auto* frameNode = reinterpret_cast<FrameNode*>(node);
167     CHECK_NULL_VOID(frameNode);
168     GridModelNG::SetCachedCount(frameNode, cachedCount);
169 }
170 
ResetGridCachedCount(ArkUINodeHandle node)171 void ResetGridCachedCount(ArkUINodeHandle node)
172 {
173     auto* frameNode = reinterpret_cast<FrameNode*>(node);
174     CHECK_NULL_VOID(frameNode);
175     GridModelNG::SetCachedCount(frameNode, DEFAULT_CACHED_COUNT);
176 }
177 
SetGridEditMode(ArkUINodeHandle node,ArkUI_Bool editMode)178 void SetGridEditMode(ArkUINodeHandle node, ArkUI_Bool editMode)
179 {
180     auto* frameNode = reinterpret_cast<FrameNode*>(node);
181     CHECK_NULL_VOID(frameNode);
182     GridModelNG::SetEditable(frameNode, editMode);
183 }
184 
ResetGridEditMode(ArkUINodeHandle node)185 void ResetGridEditMode(ArkUINodeHandle node)
186 {
187     auto* frameNode = reinterpret_cast<FrameNode*>(node);
188     CHECK_NULL_VOID(frameNode);
189     GridModelNG::SetEditable(frameNode, DEFAULT_EDIT_MODE);
190 }
191 
SetGridMultiSelectable(ArkUINodeHandle node,ArkUI_Bool multiSelectable)192 void SetGridMultiSelectable(ArkUINodeHandle node, ArkUI_Bool multiSelectable)
193 {
194     auto* frameNode = reinterpret_cast<FrameNode*>(node);
195     CHECK_NULL_VOID(frameNode);
196     GridModelNG::SetMultiSelectable(frameNode, multiSelectable);
197 }
198 
ResetGridMultiSelectable(ArkUINodeHandle node)199 void ResetGridMultiSelectable(ArkUINodeHandle node)
200 {
201     auto* frameNode = reinterpret_cast<FrameNode*>(node);
202     CHECK_NULL_VOID(frameNode);
203     GridModelNG::SetMultiSelectable(frameNode, DEFAULT_MULTI_SELECTABLE);
204 }
205 
SetGridMaxCount(ArkUINodeHandle node,int32_t maxCount)206 void SetGridMaxCount(ArkUINodeHandle node, int32_t maxCount)
207 {
208     auto* frameNode = reinterpret_cast<FrameNode*>(node);
209     CHECK_NULL_VOID(frameNode);
210     GridModelNG::SetMaxCount(frameNode, maxCount);
211 }
212 
ResetGridMaxCount(ArkUINodeHandle node)213 void ResetGridMaxCount(ArkUINodeHandle node)
214 {
215     auto* frameNode = reinterpret_cast<FrameNode*>(node);
216     CHECK_NULL_VOID(frameNode);
217     GridModelNG::SetMaxCount(frameNode, DEFAULT_MAX_COUNT);
218 }
219 
SetGridMinCount(ArkUINodeHandle node,int32_t minCount)220 void SetGridMinCount(ArkUINodeHandle node, int32_t minCount)
221 {
222     auto* frameNode = reinterpret_cast<FrameNode*>(node);
223     CHECK_NULL_VOID(frameNode);
224     GridModelNG::SetMinCount(frameNode, minCount);
225 }
226 
ResetGridMinCount(ArkUINodeHandle node)227 void ResetGridMinCount(ArkUINodeHandle node)
228 {
229     auto* frameNode = reinterpret_cast<FrameNode*>(node);
230     CHECK_NULL_VOID(frameNode);
231     GridModelNG::SetMinCount(frameNode, DEFAULT_MIN_COUNT);
232 }
233 
SetGridCellLength(ArkUINodeHandle node,int32_t cellLength)234 void SetGridCellLength(ArkUINodeHandle node, int32_t cellLength)
235 {
236     auto* frameNode = reinterpret_cast<FrameNode*>(node);
237     CHECK_NULL_VOID(frameNode);
238     GridModelNG::SetCellLength(frameNode, cellLength);
239 }
240 
ResetGridCellLength(ArkUINodeHandle node)241 void ResetGridCellLength(ArkUINodeHandle node)
242 {
243     auto* frameNode = reinterpret_cast<FrameNode*>(node);
244     CHECK_NULL_VOID(frameNode);
245     GridModelNG::SetCellLength(frameNode, DEFAULT_CELL_LENGTH);
246 }
247 
SetGridLayoutDirection(ArkUINodeHandle node,int32_t layoutDirection)248 void SetGridLayoutDirection(ArkUINodeHandle node, int32_t layoutDirection)
249 {
250     auto* frameNode = reinterpret_cast<FrameNode*>(node);
251     CHECK_NULL_VOID(frameNode);
252     FlexDirection direction = static_cast<FlexDirection>(layoutDirection);
253     GridModelNG::SetLayoutDirection(frameNode, direction);
254 }
255 
ResetGridLayoutDirection(ArkUINodeHandle node)256 void ResetGridLayoutDirection(ArkUINodeHandle node)
257 {
258     auto* frameNode = reinterpret_cast<FrameNode*>(node);
259     CHECK_NULL_VOID(frameNode);
260     GridModelNG::SetLayoutDirection(frameNode, DEFAULT_LAYOUT_DIRECTION);
261 }
262 
SetGridSupportAnimation(ArkUINodeHandle node,ArkUI_Bool supportAnimation)263 void SetGridSupportAnimation(ArkUINodeHandle node, ArkUI_Bool supportAnimation)
264 {
265     auto* frameNode = reinterpret_cast<FrameNode*>(node);
266     CHECK_NULL_VOID(frameNode);
267     GridModelNG::SetSupportAnimation(frameNode, supportAnimation);
268 }
269 
ResetGridSupportAnimation(ArkUINodeHandle node)270 void ResetGridSupportAnimation(ArkUINodeHandle node)
271 {
272     auto* frameNode = reinterpret_cast<FrameNode*>(node);
273     CHECK_NULL_VOID(frameNode);
274     GridModelNG::SetSupportAnimation(frameNode, DEFAULT_SUPPORT_ANIMATION);
275 }
276 
SetEdgeEffect(ArkUINodeHandle node,int32_t edgeEffect,ArkUI_Bool alwaysEnabled,ArkUI_Int32 edge)277 void SetEdgeEffect(ArkUINodeHandle node, int32_t edgeEffect, ArkUI_Bool alwaysEnabled, ArkUI_Int32 edge)
278 {
279     auto* frameNode = reinterpret_cast<FrameNode*>(node);
280     CHECK_NULL_VOID(frameNode);
281     GridModelNG::SetEdgeEffect(
282         frameNode, static_cast<EdgeEffect>(edgeEffect), alwaysEnabled, static_cast<EffectEdge>(edge));
283 }
284 
ResetEdgeEffect(ArkUINodeHandle node)285 void ResetEdgeEffect(ArkUINodeHandle node)
286 {
287     auto* frameNode = reinterpret_cast<FrameNode*>(node);
288     CHECK_NULL_VOID(frameNode);
289     EdgeEffect edgeEffect = EdgeEffect::NONE;
290     ArkUI_Bool alwaysEnabled = false;
291     GridModelNG::SetEdgeEffect(frameNode, edgeEffect, alwaysEnabled, EffectEdge::ALL);
292 }
293 
SetNestedScroll(ArkUINodeHandle node,int32_t forward,int32_t backward)294 void SetNestedScroll(ArkUINodeHandle node, int32_t forward, int32_t backward)
295 {
296     NestedScrollOptions opt = {
297         .forward = static_cast<NestedScrollMode>(forward),
298         .backward = static_cast<NestedScrollMode>(backward),
299     };
300     auto* frameNode = reinterpret_cast<FrameNode*>(node);
301     CHECK_NULL_VOID(frameNode);
302     GridModelNG::SetNestedScroll(frameNode, opt);
303 }
304 
ResetNestedScroll(ArkUINodeHandle node)305 void ResetNestedScroll(ArkUINodeHandle node)
306 {
307     auto* frameNode = reinterpret_cast<FrameNode*>(node);
308     CHECK_NULL_VOID(frameNode);
309     const NestedScrollOptions nestedOpt = {
310         .forward = NestedScrollMode::SELF_ONLY,
311         .backward = NestedScrollMode::SELF_ONLY,
312     };
313     GridModelNG::SetNestedScroll(frameNode, nestedOpt);
314 }
315 
SetEnableScroll(ArkUINodeHandle node,ArkUI_Bool ScrollEnabled)316 void SetEnableScroll(ArkUINodeHandle node, ArkUI_Bool ScrollEnabled)
317 {
318     auto* frameNode = reinterpret_cast<FrameNode*>(node);
319     CHECK_NULL_VOID(frameNode);
320     GridModelNG::SetScrollEnabled(frameNode, ScrollEnabled);
321 }
322 
ResetEnableScroll(ArkUINodeHandle node)323 void ResetEnableScroll(ArkUINodeHandle node)
324 {
325     auto* frameNode = reinterpret_cast<FrameNode*>(node);
326     CHECK_NULL_VOID(frameNode);
327     ArkUI_Bool scrollEnabled = true;
328     GridModelNG::SetScrollEnabled(frameNode, scrollEnabled);
329 }
330 
SetFriction(ArkUINodeHandle node,ArkUI_Float32 friction)331 void SetFriction(ArkUINodeHandle node, ArkUI_Float32 friction)
332 {
333     auto* frameNode = reinterpret_cast<FrameNode*>(node);
334     CHECK_NULL_VOID(frameNode);
335     GridModelNG::SetFriction(frameNode, friction);
336 }
337 
ResetFriction(ArkUINodeHandle node)338 void ResetFriction(ArkUINodeHandle node)
339 {
340     auto* frameNode = reinterpret_cast<FrameNode*>(node);
341     CHECK_NULL_VOID(frameNode);
342     ArkUI_Float32 friction = -1.0;
343     GridModelNG::SetFriction(frameNode, friction);
344 }
345 
SetGridFocusWrapMode(ArkUINodeHandle node,int32_t focusWrapMode)346 void SetGridFocusWrapMode(ArkUINodeHandle node, int32_t focusWrapMode)
347 {
348     auto* frameNode = reinterpret_cast<FrameNode*>(node);
349     CHECK_NULL_VOID(frameNode);
350     FocusWrapMode mode = static_cast<FocusWrapMode>(focusWrapMode);
351     GridModelNG::SetFocusWrapMode(frameNode, mode);
352 }
353 
ResetGridFocusWrapMode(ArkUINodeHandle node)354 void ResetGridFocusWrapMode(ArkUINodeHandle node)
355 {
356     auto* frameNode = reinterpret_cast<FrameNode*>(node);
357     CHECK_NULL_VOID(frameNode);
358     GridModelNG::SetFocusWrapMode(frameNode, FocusWrapMode::DEFAULT);
359 }
360 
GetGridFocusWrapMode(ArkUINodeHandle node)361 ArkUI_Int32 GetGridFocusWrapMode(ArkUINodeHandle node)
362 {
363     auto* frameNode = reinterpret_cast<FrameNode*>(node);
364     CHECK_NULL_RETURN(frameNode, 0);
365     return static_cast<int32_t>(GridModelNG::GetFocusWrapMode(frameNode));
366 }
367 
SetFlingSpeedLimit(ArkUINodeHandle node,ArkUI_Float32 flingSpeedLimit)368 void SetFlingSpeedLimit(ArkUINodeHandle node, ArkUI_Float32 flingSpeedLimit)
369 {
370     auto* frameNode = reinterpret_cast<FrameNode*>(node);
371     CHECK_NULL_VOID(frameNode);
372     ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
373 }
374 
ResetFlingSpeedLimit(ArkUINodeHandle node)375 void ResetFlingSpeedLimit(ArkUINodeHandle node)
376 {
377     auto* frameNode = reinterpret_cast<FrameNode*>(node);
378     CHECK_NULL_VOID(frameNode);
379     ArkUI_Float32 flingSpeedLimit = -1.0;
380     ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
381 }
382 
SetGridAlignItems(ArkUINodeHandle node,int32_t alignItems)383 void SetGridAlignItems(ArkUINodeHandle node, int32_t alignItems)
384 {
385     auto* frameNode = reinterpret_cast<FrameNode*>(node);
386     CHECK_NULL_VOID(frameNode);
387     GridModelNG::SetAlignItems(frameNode, static_cast<GridItemAlignment>(alignItems));
388 }
389 
ResetGridAlignItems(ArkUINodeHandle node)390 void ResetGridAlignItems(ArkUINodeHandle node)
391 {
392     auto* frameNode = reinterpret_cast<FrameNode*>(node);
393     CHECK_NULL_VOID(frameNode);
394     GridModelNG::SetAlignItems(frameNode, GridItemAlignment::DEFAULT);
395 }
396 
SetGridSyncLoad(ArkUINodeHandle node,ArkUI_Bool syncLoad)397 void SetGridSyncLoad(ArkUINodeHandle node, ArkUI_Bool syncLoad)
398 {
399     auto* frameNode = reinterpret_cast<FrameNode*>(node);
400     CHECK_NULL_VOID(frameNode);
401     GridModelNG::SetSyncLoad(frameNode, syncLoad);
402 }
403 
ResetGridSyncLoad(ArkUINodeHandle node)404 void ResetGridSyncLoad(ArkUINodeHandle node)
405 {
406     auto* frameNode = reinterpret_cast<FrameNode*>(node);
407     CHECK_NULL_VOID(frameNode);
408     GridModelNG::SetSyncLoad(frameNode, true);
409 }
410 
GetGridSyncLoad(ArkUINodeHandle node)411 ArkUI_Bool GetGridSyncLoad(ArkUINodeHandle node)
412 {
413     auto* frameNode = reinterpret_cast<FrameNode*>(node);
414     CHECK_NULL_RETURN(frameNode, 1);
415     return GridModelNG::GetSyncLoad(frameNode);
416 }
417 
GetColumnsTemplate(ArkUINodeHandle node)418 ArkUI_CharPtr GetColumnsTemplate(ArkUINodeHandle node)
419 {
420     auto* frameNode = reinterpret_cast<FrameNode*>(node);
421     CHECK_NULL_RETURN(frameNode, nullptr);
422     g_strValue = GridModelNG::GetColumnsTemplate(frameNode);
423     return g_strValue.c_str();
424 }
425 
GetRowsTemplate(ArkUINodeHandle node)426 ArkUI_CharPtr GetRowsTemplate(ArkUINodeHandle node)
427 {
428     auto* frameNode = reinterpret_cast<FrameNode*>(node);
429     CHECK_NULL_RETURN(frameNode, nullptr);
430     g_strValue = GridModelNG::GetRowsTemplate(frameNode);
431     return g_strValue.c_str();
432 }
433 
GetColumnsGap(ArkUINodeHandle node)434 ArkUI_Float32 GetColumnsGap(ArkUINodeHandle node)
435 {
436     auto* frameNode = reinterpret_cast<FrameNode*>(node);
437     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
438     return GridModelNG::GetColumnsGap(frameNode);
439 }
440 
GetRowsGap(ArkUINodeHandle node)441 ArkUI_Float32 GetRowsGap(ArkUINodeHandle node)
442 {
443     auto* frameNode = reinterpret_cast<FrameNode*>(node);
444     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
445     return GridModelNG::GetRowsGap(frameNode);
446 }
447 
SetNodeAdapter(ArkUINodeHandle node,ArkUINodeAdapterHandle handle)448 ArkUI_Int32 SetNodeAdapter(ArkUINodeHandle node, ArkUINodeAdapterHandle handle)
449 {
450     auto* frameNode = reinterpret_cast<FrameNode*>(node);
451     CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
452     auto totalChildCount = frameNode->TotalChildCount();
453     if (totalChildCount > 0) {
454         return ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_CHILD_NODE_EXIST;
455     }
456     NodeAdapter::GetNodeAdapterAPI()->attachHostNode(handle, node);
457     return ERROR_CODE_NO_ERROR;
458 }
459 
ResetNodeAdapter(ArkUINodeHandle node)460 void ResetNodeAdapter(ArkUINodeHandle node)
461 {
462     NodeAdapter::GetNodeAdapterAPI()->detachHostNode(node);
463 }
464 
GetNodeAdapter(ArkUINodeHandle node)465 ArkUINodeAdapterHandle GetNodeAdapter(ArkUINodeHandle node)
466 {
467     return NodeAdapter::GetNodeAdapterAPI()->getNodeAdapter(node);
468 }
469 
SetCachedCount(ArkUINodeHandle node,ArkUI_Int32 cachedCount)470 void SetCachedCount(ArkUINodeHandle node, ArkUI_Int32 cachedCount)
471 {
472     auto* frameNode = reinterpret_cast<FrameNode*>(node);
473     CHECK_NULL_VOID(frameNode);
474     GridModelNG::SetCachedCount(frameNode, cachedCount);
475 }
476 
ResetCachedCount(ArkUINodeHandle node)477 void ResetCachedCount(ArkUINodeHandle node)
478 {
479     auto* frameNode = reinterpret_cast<FrameNode*>(node);
480     CHECK_NULL_VOID(frameNode);
481     GridModelNG::SetCachedCount(frameNode, 1);
482 }
483 
GetCachedCount(ArkUINodeHandle node)484 ArkUI_Int32 GetCachedCount(ArkUINodeHandle node)
485 {
486     auto* frameNode = reinterpret_cast<FrameNode*>(node);
487     CHECK_NULL_RETURN(frameNode, 1);
488     return GridModelNG::GetCachedCount(frameNode);
489 }
490 
SetShowCached(ArkUINodeHandle node,ArkUI_Bool show)491 void SetShowCached(ArkUINodeHandle node, ArkUI_Bool show)
492 {
493     auto* frameNode = reinterpret_cast<FrameNode*>(node);
494     CHECK_NULL_VOID(frameNode);
495     GridModelNG::SetShowCached(frameNode, show);
496 }
497 
ResetShowCached(ArkUINodeHandle node)498 void ResetShowCached(ArkUINodeHandle node)
499 {
500     auto* frameNode = reinterpret_cast<FrameNode*>(node);
501     CHECK_NULL_VOID(frameNode);
502     GridModelNG::SetShowCached(frameNode, false);
503 }
504 
GetShowCached(ArkUINodeHandle node)505 ArkUI_Bool GetShowCached(ArkUINodeHandle node)
506 {
507     auto* frameNode = reinterpret_cast<FrameNode*>(node);
508     CHECK_NULL_RETURN(frameNode, false);
509     return GridModelNG::GetShowCached(frameNode);
510 }
511 
SetGridFadingEdge(ArkUINodeHandle node,ArkUI_Bool fadingEdge,ArkUI_Float32 fadingEdgeLengthValue,ArkUI_Int32 fadingEdgeLengthUnit)512 void SetGridFadingEdge(
513     ArkUINodeHandle node, ArkUI_Bool fadingEdge, ArkUI_Float32 fadingEdgeLengthValue, ArkUI_Int32 fadingEdgeLengthUnit)
514 {
515     auto* frameNode = reinterpret_cast<FrameNode*>(node);
516     CHECK_NULL_VOID(frameNode);
517     Dimension fadingEdgeLengthDimension =
518         Dimension(fadingEdgeLengthValue, static_cast<OHOS::Ace::DimensionUnit>(fadingEdgeLengthUnit));
519     NG::ScrollableModelNG::SetFadingEdge(frameNode, fadingEdge, fadingEdgeLengthDimension);
520 }
521 
ResetGridFadingEdge(ArkUINodeHandle node)522 void ResetGridFadingEdge(ArkUINodeHandle node)
523 {
524     auto* frameNode = reinterpret_cast<FrameNode*>(node);
525     CHECK_NULL_VOID(frameNode);
526     NG::ScrollableModelNG::SetFadingEdge(frameNode, false, DEFAULT_FADING_EDGE_LENGTH);
527 }
528 
529 namespace NodeModifier {
GetGridModifier()530 const ArkUIGridModifier* GetGridModifier()
531 {
532     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
533     static const ArkUIGridModifier modifier = {
534         .setGridColumnsTemplate = SetGridColumnsTemplate,
535         .resetGridColumnsTemplate = ResetGridColumnsTemplate,
536         .setGridRowsTemplate = SetGridRowsTemplate,
537         .resetGridRowsTemplate = ResetGridRowsTemplate,
538         .setGridColumnsGap = SetGridColumnsGap,
539         .resetGridColumnsGap = ResetGridColumnsGap,
540         .setGridRowsGap = SetGridRowsGap,
541         .resetGridRowsGap = ResetGridRowsGap,
542         .setGridScrollBar = SetGridScrollBar,
543         .resetGridScrollBar = ResetGridScrollBar,
544         .setGridScrollBarWidth = SetGridScrollBarWidth,
545         .resetGridScrollBarWidth = ResetGridScrollBarWidth,
546         .setGridScrollBarColor = SetGridScrollBarColor,
547         .resetGridScrollBarColor = ResetGridScrollBarColor,
548         .setGridCachedCount = SetGridCachedCount,
549         .resetGridCachedCount = ResetGridCachedCount,
550         .setShowCached = SetShowCached,
551         .resetShowCached = ResetShowCached,
552         .getShowCached = GetShowCached,
553         .setGridEditMode = SetGridEditMode,
554         .resetGridEditMode = ResetGridEditMode,
555         .setGridMultiSelectable = SetGridMultiSelectable,
556         .resetGridMultiSelectable = ResetGridMultiSelectable,
557         .setGridMaxCount = SetGridMaxCount,
558         .resetGridMaxCount = ResetGridMaxCount,
559         .setGridMinCount = SetGridMinCount,
560         .resetGridMinCount = ResetGridMinCount,
561         .setGridCellLength = SetGridCellLength,
562         .resetGridCellLength = ResetGridCellLength,
563         .setGridLayoutDirection = SetGridLayoutDirection,
564         .resetGridLayoutDirection = ResetGridLayoutDirection,
565         .setGridSupportAnimation = SetGridSupportAnimation,
566         .resetGridSupportAnimation = ResetGridSupportAnimation,
567         .setEdgeEffect = SetEdgeEffect,
568         .resetEdgeEffect = ResetEdgeEffect,
569         .setNestedScroll = SetNestedScroll,
570         .resetNestedScroll = ResetNestedScroll,
571         .setEnableScroll = SetEnableScroll,
572         .resetEnableScroll = ResetEnableScroll,
573         .setFriction = SetFriction,
574         .resetFriction = ResetFriction,
575         .setGridFocusWrapMode = SetGridFocusWrapMode,
576         .resetGridFocusWrapMode = ResetGridFocusWrapMode,
577         .getGridFocusWrapMode = GetGridFocusWrapMode,
578         .getGridColumnsTemplate = GetColumnsTemplate,
579         .getGridRowsTemplate = GetRowsTemplate,
580         .getGridColumnsGap = GetColumnsGap,
581         .getGridRowsGap = GetRowsGap,
582         .setNodeAdapter = SetNodeAdapter,
583         .resetNodeAdapter = ResetNodeAdapter,
584         .getNodeAdapter = GetNodeAdapter,
585         .setCachedCount = SetCachedCount,
586         .resetCachedCount = ResetCachedCount,
587         .getCachedCount = GetCachedCount,
588         .setGridAlignItems = SetGridAlignItems,
589         .resetGridAlignItems = ResetGridAlignItems,
590         .setSyncLoad = SetGridSyncLoad,
591         .resetSyncLoad = ResetGridSyncLoad,
592         .getSyncLoad = GetGridSyncLoad,
593         .setGridFadingEdge = SetGridFadingEdge,
594         .resetGridFadingEdge = ResetGridFadingEdge,
595         .setOnGridScrollIndexCallBack = SetOnGridScrollIndexCallBack,
596         .resetOnGridScrollIndex = ResetOnGridScrollIndex,
597         .setOnGridScrollBarUpdateCallBack = SetOnGridScrollBarUpdateCallBack,
598         .resetOnGridScrollBarUpdate = ResetOnGridScrollBarUpdate,
599         .setOnGridItemDragStart = SetOnGridItemDragStart,
600         .resetOnGridItemDragStart = ResetOnGridItemDragStart,
601         .setOnGridItemDragEnter = SetOnGridItemDragEnter,
602         .resetOnGridItemDragEnter = ResetOnGridItemDragEnter,
603         .setOnGridItemDragMove = SetOnGridItemDragMove,
604         .resetOnGridItemDragMove = ResetOnGridItemDragMove,
605         .setOnGridItemDragLeave = SetOnGridItemDragLeave,
606         .resetOnGridItemDragLeave = ResetOnGridItemDragLeave,
607         .setOnGridItemDrop = SetOnGridItemDrop,
608         .resetOnGridItemDrop = ResetOnGridItemDrop,
609         .createWithResourceObjFriction = CreateWithResourceObjGridFriction,
610         .createWithResourceObjScrollBarColor = CreateWithResourceObjGridScrollBarColor,
611     };
612     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
613     return &modifier;
614 }
615 
GetCJUIGridModifier()616 const CJUIGridModifier* GetCJUIGridModifier()
617 {
618     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
619     static const CJUIGridModifier modifier = {
620         .setGridColumnsTemplate = SetGridColumnsTemplate,
621         .resetGridColumnsTemplate = ResetGridColumnsTemplate,
622         .setGridRowsTemplate = SetGridRowsTemplate,
623         .resetGridRowsTemplate = ResetGridRowsTemplate,
624         .setGridColumnsGap = SetGridColumnsGap,
625         .resetGridColumnsGap = ResetGridColumnsGap,
626         .setGridRowsGap = SetGridRowsGap,
627         .resetGridRowsGap = ResetGridRowsGap,
628         .setGridScrollBar = SetGridScrollBar,
629         .resetGridScrollBar = ResetGridScrollBar,
630         .setGridScrollBarWidth = SetGridScrollBarWidth,
631         .resetGridScrollBarWidth = ResetGridScrollBarWidth,
632         .setGridScrollBarColor = SetGridScrollBarColor,
633         .resetGridScrollBarColor = ResetGridScrollBarColor,
634         .setGridCachedCount = SetGridCachedCount,
635         .resetGridCachedCount = ResetGridCachedCount,
636         .setGridEditMode = SetGridEditMode,
637         .resetGridEditMode = ResetGridEditMode,
638         .setGridMultiSelectable = SetGridMultiSelectable,
639         .resetGridMultiSelectable = ResetGridMultiSelectable,
640         .setGridMaxCount = SetGridMaxCount,
641         .resetGridMaxCount = ResetGridMaxCount,
642         .setGridMinCount = SetGridMinCount,
643         .resetGridMinCount = ResetGridMinCount,
644         .setGridCellLength = SetGridCellLength,
645         .resetGridCellLength = ResetGridCellLength,
646         .setGridLayoutDirection = SetGridLayoutDirection,
647         .resetGridLayoutDirection = ResetGridLayoutDirection,
648         .setGridSupportAnimation = SetGridSupportAnimation,
649         .resetGridSupportAnimation = ResetGridSupportAnimation,
650         .setEdgeEffect = SetEdgeEffect,
651         .resetEdgeEffect = ResetEdgeEffect,
652         .setNestedScroll = SetNestedScroll,
653         .resetNestedScroll = ResetNestedScroll,
654         .setEnableScroll = SetEnableScroll,
655         .resetEnableScroll = ResetEnableScroll,
656         .setFriction = SetFriction,
657         .resetFriction = ResetFriction,
658         .setGridFocusWrapMode = SetGridFocusWrapMode,
659         .resetGridFocusWrapMode = ResetGridFocusWrapMode,
660         .getGridFocusWrapMode = GetGridFocusWrapMode,
661         .getGridColumnsTemplate = GetColumnsTemplate,
662         .getGridRowsTemplate = GetRowsTemplate,
663         .getGridColumnsGap = GetColumnsGap,
664         .getGridRowsGap = GetRowsGap,
665         .setNodeAdapter = SetNodeAdapter,
666         .resetNodeAdapter = ResetNodeAdapter,
667         .getNodeAdapter = GetNodeAdapter,
668         .setCachedCount = SetCachedCount,
669         .resetCachedCount = ResetCachedCount,
670         .getCachedCount = GetCachedCount,
671         .setFlingSpeedLimit = SetFlingSpeedLimit,
672         .resetFlingSpeedLimit = ResetFlingSpeedLimit,
673     };
674     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
675     return &modifier;
676 }
677 
SetOnGridScrollIndex(ArkUINodeHandle node,void * extraParam)678 void SetOnGridScrollIndex(ArkUINodeHandle node, void* extraParam)
679 {
680     auto* frameNode = reinterpret_cast<FrameNode*>(node);
681     CHECK_NULL_VOID(frameNode);
682     auto onEvent = [node, extraParam](int32_t first, int32_t last) {
683         ArkUINodeEvent event;
684         event.kind = COMPONENT_ASYNC_EVENT;
685         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
686         event.componentAsyncEvent.subKind = ON_GRID_SCROLL_TO_INDEX;
687         event.componentAsyncEvent.data[0].i32 = first;
688         event.componentAsyncEvent.data[1].i32 = last;
689         SendArkUISyncEvent(&event);
690     };
691     GridModelNG::SetOnScrollIndex(frameNode, std::move(onEvent));
692 }
693 
ResetOnGridScrollIndex(ArkUINodeHandle node)694 void ResetOnGridScrollIndex(ArkUINodeHandle node)
695 {
696     auto* frameNode = reinterpret_cast<FrameNode*>(node);
697     CHECK_NULL_VOID(frameNode);
698     GridModelNG::SetOnScrollIndex(frameNode, nullptr);
699 }
700 
SetOnGridScrollIndexCallBack(ArkUINodeHandle node,void * extraParam)701 void SetOnGridScrollIndexCallBack(ArkUINodeHandle node, void* extraParam)
702 {
703     auto* frameNode = reinterpret_cast<FrameNode*>(node);
704     CHECK_NULL_VOID(frameNode);
705     if (extraParam) {
706         auto onScrollIndex = reinterpret_cast<ScrollIndexFunc*>(extraParam);
707         GridModelNG::SetOnScrollIndex(frameNode, std::move(*onScrollIndex));
708     } else {
709         GridModelNG::SetOnScrollIndex(frameNode, nullptr);
710     }
711 }
712 
SetOnGridScrollBarUpdateCallBack(ArkUINodeHandle node,void * extraParam)713 void SetOnGridScrollBarUpdateCallBack(ArkUINodeHandle node, void* extraParam)
714 {
715     auto* frameNode = reinterpret_cast<FrameNode*>(node);
716     CHECK_NULL_VOID(frameNode);
717     if (extraParam) {
718         auto onScrollBarUpdate = reinterpret_cast<ScrollBarUpdateFunc*>(extraParam);
719         GridModelNG::SetOnScrollBarUpdate(frameNode, std::move(*onScrollBarUpdate));
720     } else {
721         GridModelNG::SetOnScrollBarUpdate(frameNode, nullptr);
722     }
723 }
724 
ResetOnGridScrollBarUpdate(ArkUINodeHandle node)725 void ResetOnGridScrollBarUpdate(ArkUINodeHandle node)
726 {
727     auto* frameNode = reinterpret_cast<FrameNode*>(node);
728     CHECK_NULL_VOID(frameNode);
729     GridModelNG::SetOnScrollBarUpdate(frameNode, nullptr);
730 }
731 
SetOnGridItemDragStart(ArkUINodeHandle node,void * extraParam)732 void SetOnGridItemDragStart(ArkUINodeHandle node, void* extraParam)
733 {
734     auto* frameNode = reinterpret_cast<FrameNode*>(node);
735     CHECK_NULL_VOID(frameNode);
736     if (extraParam) {
737         auto onItemDragStart = reinterpret_cast<std::function<void(const ItemDragInfo&, int32_t)>*>(extraParam);
738         GridModelNG::SetOnItemDragStart(frameNode, std::move(*onItemDragStart));
739     } else {
740         GridModelNG::SetOnItemDragStart(frameNode, nullptr);
741     }
742 }
743 
ResetOnGridItemDragStart(ArkUINodeHandle node)744 void ResetOnGridItemDragStart(ArkUINodeHandle node)
745 {
746     auto* frameNode = reinterpret_cast<FrameNode*>(node);
747     CHECK_NULL_VOID(frameNode);
748     GridModelNG::SetOnItemDragStart(frameNode, nullptr);
749 }
750 
SetOnGridItemDragEnter(ArkUINodeHandle node,void * extraParam)751 void SetOnGridItemDragEnter(ArkUINodeHandle node, void* extraParam)
752 {
753     auto* frameNode = reinterpret_cast<FrameNode*>(node);
754     CHECK_NULL_VOID(frameNode);
755     if (extraParam) {
756         auto onItemDragEnter = reinterpret_cast<ItemDragEnterFunc*>(extraParam);
757         GridModelNG::SetOnItemDragEnter(frameNode, std::move(*onItemDragEnter));
758     } else {
759         GridModelNG::SetOnItemDragEnter(frameNode, nullptr);
760     }
761 }
762 
ResetOnGridItemDragEnter(ArkUINodeHandle node)763 void ResetOnGridItemDragEnter(ArkUINodeHandle node)
764 {
765     auto* frameNode = reinterpret_cast<FrameNode*>(node);
766     CHECK_NULL_VOID(frameNode);
767     GridModelNG::SetOnItemDragEnter(frameNode, nullptr);
768 }
769 
SetOnGridItemDragMove(ArkUINodeHandle node,void * extraParam)770 void SetOnGridItemDragMove(ArkUINodeHandle node, void* extraParam)
771 {
772     auto* frameNode = reinterpret_cast<FrameNode*>(node);
773     CHECK_NULL_VOID(frameNode);
774     if (extraParam) {
775         auto onItemDragMove = reinterpret_cast<ItemDragMoveFunc*>(extraParam);
776         GridModelNG::SetOnItemDragMove(frameNode, std::move(*onItemDragMove));
777     } else {
778         GridModelNG::SetOnItemDragMove(frameNode, nullptr);
779     }
780 }
781 
ResetOnGridItemDragMove(ArkUINodeHandle node)782 void ResetOnGridItemDragMove(ArkUINodeHandle node)
783 {
784     auto* frameNode = reinterpret_cast<FrameNode*>(node);
785     CHECK_NULL_VOID(frameNode);
786     GridModelNG::SetOnItemDragMove(frameNode, nullptr);
787 }
788 
SetOnGridItemDragLeave(ArkUINodeHandle node,void * extraParam)789 void SetOnGridItemDragLeave(ArkUINodeHandle node, void* extraParam)
790 {
791     auto* frameNode = reinterpret_cast<FrameNode*>(node);
792     CHECK_NULL_VOID(frameNode);
793     if (extraParam) {
794         auto onItemDragLeave = reinterpret_cast<ItemDragLeaveFunc*>(extraParam);
795         GridModelNG::SetOnItemDragLeave(frameNode, std::move(*onItemDragLeave));
796     } else {
797         GridModelNG::SetOnItemDragLeave(frameNode, nullptr);
798     }
799 }
800 
ResetOnGridItemDragLeave(ArkUINodeHandle node)801 void ResetOnGridItemDragLeave(ArkUINodeHandle node)
802 {
803     auto* frameNode = reinterpret_cast<FrameNode*>(node);
804     CHECK_NULL_VOID(frameNode);
805     GridModelNG::SetOnItemDragLeave(frameNode, nullptr);
806 }
807 
SetOnGridItemDrop(ArkUINodeHandle node,void * extraParam)808 void SetOnGridItemDrop(ArkUINodeHandle node, void* extraParam)
809 {
810     auto* frameNode = reinterpret_cast<FrameNode*>(node);
811     CHECK_NULL_VOID(frameNode);
812     if (extraParam) {
813         auto onItemDrop = reinterpret_cast<ItemDropFunc*>(extraParam);
814         GridModelNG::SetOnItemDrop(frameNode, std::move(*onItemDrop));
815     } else {
816         GridModelNG::SetOnItemDrop(frameNode, nullptr);
817     }
818 }
819 
ResetOnGridItemDrop(ArkUINodeHandle node)820 void ResetOnGridItemDrop(ArkUINodeHandle node)
821 {
822     auto* frameNode = reinterpret_cast<FrameNode*>(node);
823     CHECK_NULL_VOID(frameNode);
824     GridModelNG::SetOnItemDrop(frameNode, nullptr);
825 }
826 
CreateWithResourceObjGridFriction(ArkUINodeHandle node,void * resObj)827 void CreateWithResourceObjGridFriction(ArkUINodeHandle node, void* resObj)
828 {
829     auto* frameNode = reinterpret_cast<FrameNode*>(node);
830     CHECK_NULL_VOID(frameNode);
831     CHECK_NULL_VOID(resObj);
832     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
833     GridModelNG::CreateWithResourceObjFriction(frameNode, AceType::Claim(resourceObj));
834 }
835 
CreateWithResourceObjGridScrollBarColor(ArkUINodeHandle node,void * resObj)836 void CreateWithResourceObjGridScrollBarColor(ArkUINodeHandle node, void* resObj)
837 {
838     auto* frameNode = reinterpret_cast<FrameNode*>(node);
839     CHECK_NULL_VOID(frameNode);
840     CHECK_NULL_VOID(resObj);
841     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
842     GridModelNG::CreateWithResourceObjScrollBarColor(frameNode, AceType::Claim(resourceObj));
843 }
844 } // namespace NodeModifier
845 } // namespace OHOS::Ace::NG
846