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