1 /*
2  * Copyright (c) 2022-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/components_ng/pattern/swiper/swiper_model_ng.h"
17 
18 #include <cstdint>
19 #include <functional>
20 #include <memory>
21 
22 #include "base/error/error_code.h"
23 #include "base/geometry/axis.h"
24 #include "base/memory/referenced.h"
25 #include "base/utils/utils.h"
26 #include "core/components/swiper/swiper_component.h"
27 #include "core/components_ng/base/frame_node.h"
28 #include "core/components_ng/base/view_stack_processor.h"
29 #include "core/components_ng/pattern/swiper/swiper_pattern.h"
30 #include "core/components_ng/pattern/swiper/swiper_node.h"
31 #include "core/components_ng/pattern/swiper_indicator/indicator_common/swiper_indicator_pattern.h"
32 #include "core/components_ng/pattern/swiper_indicator/indicator_common/swiper_indicator_utils.h"
33 #include "core/components_v2/inspector/inspector_constants.h"
34 
35 namespace OHOS::Ace::NG {
36 typedef enum {
37     ARKUI_SWIPER_ARROW_HIDE = 0,
38     ARKUI_SWIPER_ARROW_SHOW,
39     ARKUI_SWIPER_ARROW_SHOW_ON_HOVER,
40 } SwiperArrow;
41 
42 
Create()43 RefPtr<SwiperController> SwiperModelNG::Create()
44 {
45     auto* stack = ViewStackProcessor::GetInstance();
46     CHECK_NULL_RETURN(stack, nullptr);
47     auto nodeId = stack->ClaimNodeId();
48     ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::SWIPER_ETS_TAG, nodeId);
49     auto swiperNode = FrameNode::GetOrCreateFrameNode(
50         V2::SWIPER_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<SwiperPattern>(); });
51 
52     stack->Push(swiperNode);
53     auto pattern = swiperNode->GetPattern<SwiperPattern>();
54     CHECK_NULL_RETURN(pattern, nullptr);
55     return pattern->GetSwiperController();
56 }
57 
CreateFrameNode(int32_t nodeId)58 RefPtr<FrameNode> SwiperModelNG::CreateFrameNode(int32_t nodeId)
59 {
60     auto swiperNode = ElementRegister::GetInstance()->GetSpecificItemById<SwiperNode>(nodeId);
61     if (swiperNode) {
62         if (swiperNode->GetTag() == V2::SWIPER_ETS_TAG) {
63             return swiperNode;
64         }
65         ElementRegister::GetInstance()->RemoveItemSilently(nodeId);
66         auto parent = swiperNode->GetParent();
67         if (parent) {
68             parent->RemoveChild(swiperNode);
69         }
70     }
71     // adapt for capi
72     swiperNode = AceType::MakeRefPtr<SwiperNode>(V2::SWIPER_ETS_TAG, nodeId, AceType::MakeRefPtr<SwiperPattern>());
73     swiperNode->InitializePatternAndContext();
74     ElementRegister::GetInstance()->AddUINode(swiperNode);
75     return swiperNode;
76 }
77 
SetDirection(Axis axis)78 void SwiperModelNG::SetDirection(Axis axis)
79 {
80     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, Direction, axis);
81 }
82 
SetIndex(uint32_t index)83 void SwiperModelNG::SetIndex(uint32_t index)
84 {
85     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, Index, index);
86 }
87 
SetDisplayMode(SwiperDisplayMode displayMode)88 void SwiperModelNG::SetDisplayMode(SwiperDisplayMode displayMode)
89 {
90     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayMode, displayMode);
91 }
92 
SetDisplayCount(int32_t displayCount)93 void SwiperModelNG::SetDisplayCount(int32_t displayCount)
94 {
95     if (displayCount <= 0) {
96         return;
97     }
98 
99     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayCount, displayCount);
100 }
101 
ResetDisplayCount()102 void SwiperModelNG::ResetDisplayCount()
103 {
104     ACE_RESET_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayCount);
105 }
106 
SetMinSize(const Dimension & minSize)107 void SwiperModelNG::SetMinSize(const Dimension& minSize)
108 {
109     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, MinSize, minSize);
110 }
111 
SetShowIndicator(bool showIndicator)112 void SwiperModelNG::SetShowIndicator(bool showIndicator)
113 {
114     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, ShowIndicator, showIndicator);
115 }
116 
SetIndicatorType(SwiperIndicatorType indicatorType)117 void SwiperModelNG::SetIndicatorType(SwiperIndicatorType indicatorType)
118 {
119     SwiperIndicatorUtils::SetSwiperIndicatorType(indicatorType);
120     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, IndicatorType, indicatorType);
121 }
122 
SetItemSpace(const Dimension & itemSpace)123 void SwiperModelNG::SetItemSpace(const Dimension& itemSpace)
124 {
125     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, ItemSpace, itemSpace);
126 }
127 
SetCachedCount(int32_t cachedCount)128 void SwiperModelNG::SetCachedCount(int32_t cachedCount)
129 {
130     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
131     CHECK_NULL_VOID(swiperNode);
132     auto pattern = swiperNode->GetPattern<SwiperPattern>();
133     CHECK_NULL_VOID(pattern);
134     pattern->SetCachedCount(cachedCount);
135 
136     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, CachedCount, cachedCount);
137 }
138 
SetIsIndicatorCustomSize(bool isCustomSize)139 void SwiperModelNG::SetIsIndicatorCustomSize(bool isCustomSize)
140 {
141     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
142     CHECK_NULL_VOID(swiperNode);
143     auto pattern = swiperNode->GetPattern<SwiperPattern>();
144     CHECK_NULL_VOID(pattern);
145     pattern->SetIsIndicatorCustomSize(isCustomSize);
146 }
147 
SetIndicatorInteractive(bool interactive)148 void SwiperModelNG::SetIndicatorInteractive(bool interactive)
149 {
150     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
151     CHECK_NULL_VOID(swiperNode);
152     auto pattern = swiperNode->GetPattern<SwiperPattern>();
153     CHECK_NULL_VOID(pattern);
154     pattern->SetIndicatorInteractive(interactive);
155 }
156 
SetAutoPlay(bool autoPlay)157 void SwiperModelNG::SetAutoPlay(bool autoPlay)
158 {
159     ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlay, autoPlay);
160 }
161 
SetAutoPlayInterval(uint32_t interval)162 void SwiperModelNG::SetAutoPlayInterval(uint32_t interval)
163 {
164     ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlayInterval, interval);
165 }
166 
SetDuration(uint32_t duration)167 void SwiperModelNG::SetDuration(uint32_t duration)
168 {
169     ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, Duration, duration);
170 }
171 
SetLoop(bool loop)172 void SwiperModelNG::SetLoop(bool loop)
173 {
174     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, Loop, loop);
175 }
176 
SetEnabled(bool enabled)177 void SwiperModelNG::SetEnabled(bool enabled)
178 {
179     ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, Enabled, enabled);
180 }
181 
SetDisableSwipe(bool disableSwipe)182 void SwiperModelNG::SetDisableSwipe(bool disableSwipe)
183 {
184     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisableSwipe, disableSwipe);
185 }
186 
SetEdgeEffect(EdgeEffect edgeEffect)187 void SwiperModelNG::SetEdgeEffect(EdgeEffect edgeEffect)
188 {
189     ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, EdgeEffect, edgeEffect);
190 }
191 
SetCurve(const RefPtr<Curve> & curve)192 void SwiperModelNG::SetCurve(const RefPtr<Curve>& curve)
193 {
194     ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, Curve, curve);
195 }
196 
SetOnChange(std::function<void (const BaseEventInfo * info)> && onChange)197 void SwiperModelNG::SetOnChange(std::function<void(const BaseEventInfo* info)>&& onChange)
198 {
199     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
200     CHECK_NULL_VOID(swiperNode);
201     auto pattern = swiperNode->GetPattern<SwiperPattern>();
202     CHECK_NULL_VOID(pattern);
203 
204     pattern->UpdateChangeEvent([event = std::move(onChange)](int32_t index) {
205         SwiperChangeEvent eventInfo(index);
206         event(&eventInfo);
207     });
208 }
209 
SetOnAnimationStart(AnimationStartEvent && onAnimationStart)210 void SwiperModelNG::SetOnAnimationStart(AnimationStartEvent&& onAnimationStart)
211 {
212     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
213     CHECK_NULL_VOID(swiperNode);
214     auto pattern = swiperNode->GetPattern<SwiperPattern>();
215     CHECK_NULL_VOID(pattern);
216 
217     pattern->UpdateAnimationStartEvent([event = std::move(onAnimationStart)](int32_t index, int32_t targetIndex,
218                                            const AnimationCallbackInfo& info) { event(index, targetIndex, info); });
219 }
220 
SetOnAnimationEnd(AnimationEndEvent && onAnimationEnd)221 void SwiperModelNG::SetOnAnimationEnd(AnimationEndEvent&& onAnimationEnd)
222 {
223     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
224     CHECK_NULL_VOID(swiperNode);
225     auto pattern = swiperNode->GetPattern<SwiperPattern>();
226     CHECK_NULL_VOID(pattern);
227 
228     pattern->UpdateAnimationEndEvent(
229         [event = std::move(onAnimationEnd)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
230 }
231 
232 
SetOnGestureSwipe(GestureSwipeEvent && onGestureSwipe)233 void SwiperModelNG::SetOnGestureSwipe(GestureSwipeEvent&& onGestureSwipe)
234 {
235     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
236     CHECK_NULL_VOID(swiperNode);
237     auto eventHub = swiperNode->GetEventHub<SwiperEventHub>();
238     CHECK_NULL_VOID(eventHub);
239 
240     eventHub->SetGestureSwipeEvent(
241         [event = std::move(onGestureSwipe)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
242 }
243 
SetNestedScroll(FrameNode * frameNode,const int32_t nestedOpt)244 void SwiperModelNG::SetNestedScroll(FrameNode* frameNode, const int32_t nestedOpt)
245 {
246     CHECK_NULL_VOID(frameNode);
247     auto pattern = frameNode->GetPattern<SwiperPattern>();
248     CHECK_NULL_VOID(pattern);
249     NestedScrollOptions option;
250     option.forward = static_cast<NestedScrollMode>(nestedOpt);
251     option.backward = static_cast<NestedScrollMode>(nestedOpt);
252     pattern->SetNestedScroll(option);
253 }
254 
SetSwipeByGroup(FrameNode * frameNode,bool swipeByGroup)255 void SwiperModelNG::SetSwipeByGroup(FrameNode* frameNode, bool swipeByGroup)
256 {
257     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, SwipeByGroup, swipeByGroup, frameNode);
258 }
259 
SetRemoteMessageEventId(RemoteCallback && remoteCallback)260 void SwiperModelNG::SetRemoteMessageEventId(RemoteCallback&& remoteCallback) {}
261 
SetIndicatorStyle(const SwiperParameters & swiperParameters)262 void SwiperModelNG::SetIndicatorStyle(const SwiperParameters& swiperParameters)
263 {
264     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
265     CHECK_NULL_VOID(swiperNode);
266     auto pattern = swiperNode->GetPattern<SwiperPattern>();
267     CHECK_NULL_VOID(pattern);
268     pattern->SetSwiperParameters(swiperParameters);
269 };
270 
SetDotIndicatorStyle(const SwiperParameters & swiperParameters)271 void SwiperModelNG::SetDotIndicatorStyle(const SwiperParameters& swiperParameters)
272 {
273     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
274     CHECK_NULL_VOID(swiperNode);
275     auto pattern = swiperNode->GetPattern<SwiperPattern>();
276     CHECK_NULL_VOID(pattern);
277     pattern->SetSwiperParameters(swiperParameters);
278 };
279 
SetDigitIndicatorStyle(const SwiperDigitalParameters & swiperDigitalParameters)280 void SwiperModelNG::SetDigitIndicatorStyle(const SwiperDigitalParameters& swiperDigitalParameters)
281 {
282     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
283     CHECK_NULL_VOID(swiperNode);
284     auto pattern = swiperNode->GetPattern<SwiperPattern>();
285     CHECK_NULL_VOID(pattern);
286     pattern->SetSwiperDigitalParameters(swiperDigitalParameters);
287 };
288 
SetOnClick(std::function<void (const BaseEventInfo * info,const RefPtr<V2::InspectorFunctionImpl> & impl)> && value)289 void SwiperModelNG::SetOnClick(
290     std::function<void(const BaseEventInfo* info, const RefPtr<V2::InspectorFunctionImpl>& impl)>&& value)
291 {}
292 
SetMainSwiperSizeWidth()293 void SwiperModelNG::SetMainSwiperSizeWidth() {}
294 
SetMainSwiperSizeHeight()295 void SwiperModelNG::SetMainSwiperSizeHeight() {}
296 
SetPreviousMargin(const Dimension & prevMargin,bool ignoreBlank)297 void SwiperModelNG::SetPreviousMargin(const Dimension& prevMargin, bool ignoreBlank)
298 {
299     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMargin, prevMargin);
300     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMarginIgnoreBlank, ignoreBlank);
301     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
302     CHECK_NULL_VOID(swiperNode);
303     auto pattern = swiperNode->GetPattern<SwiperPattern>();
304     CHECK_NULL_VOID(pattern);
305     pattern->SetPrevMarginIgnoreBlank(ignoreBlank);
306 }
307 
SetNextMargin(const Dimension & nextMargin,bool ignoreBlank)308 void SwiperModelNG::SetNextMargin(const Dimension& nextMargin, bool ignoreBlank)
309 {
310     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMargin, nextMargin);
311     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMarginIgnoreBlank, ignoreBlank);
312     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
313     CHECK_NULL_VOID(swiperNode);
314     auto pattern = swiperNode->GetPattern<SwiperPattern>();
315     CHECK_NULL_VOID(pattern);
316     pattern->SetNextMarginIgnoreBlank(ignoreBlank);
317 }
318 
SetIndicatorInteractive(FrameNode * frameNode,bool interactive)319 void SwiperModelNG::SetIndicatorInteractive(FrameNode* frameNode, bool interactive)
320 {
321     CHECK_NULL_VOID(frameNode);
322     auto pattern = frameNode->GetPattern<SwiperPattern>();
323     CHECK_NULL_VOID(pattern);
324     pattern->SetIndicatorInteractive(interactive);
325 }
326 
SetOnChangeEvent(std::function<void (const BaseEventInfo * info)> && onChangeEvent)327 void SwiperModelNG::SetOnChangeEvent(std::function<void(const BaseEventInfo* info)>&& onChangeEvent)
328 {
329     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
330     CHECK_NULL_VOID(swiperNode);
331     auto pattern = swiperNode->GetPattern<SwiperPattern>();
332     CHECK_NULL_VOID(pattern);
333 
334     pattern->UpdateOnChangeEvent([event = std::move(onChangeEvent)](int32_t index) {
335         SwiperChangeEvent eventInfo(index);
336         event(&eventInfo);
337     });
338 }
339 
SetIndicatorIsBoolean(bool isBoolean)340 void SwiperModelNG::SetIndicatorIsBoolean(bool isBoolean)
341 {
342     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
343     CHECK_NULL_VOID(swiperNode);
344     auto pattern = swiperNode->GetPattern<SwiperPattern>();
345     CHECK_NULL_VOID(pattern);
346     pattern->SetIndicatorIsBoolean(isBoolean);
347 }
348 
SetArrowStyle(const SwiperArrowParameters & swiperArrowParameters)349 void SwiperModelNG::SetArrowStyle(const SwiperArrowParameters& swiperArrowParameters)
350 {
351     if (swiperArrowParameters.isShowBackground.has_value()) {
352         ACE_UPDATE_LAYOUT_PROPERTY(
353             SwiperLayoutProperty, IsShowBackground, swiperArrowParameters.isShowBackground.value());
354     }
355     if (swiperArrowParameters.backgroundSize.has_value()) {
356         ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, BackgroundSize, swiperArrowParameters.backgroundSize.value());
357     }
358     if (swiperArrowParameters.backgroundColor.has_value()) {
359         ACE_UPDATE_LAYOUT_PROPERTY(
360             SwiperLayoutProperty, BackgroundColor, swiperArrowParameters.backgroundColor.value());
361     }
362     if (swiperArrowParameters.arrowSize.has_value()) {
363         ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, ArrowSize, swiperArrowParameters.arrowSize.value());
364     }
365     if (swiperArrowParameters.arrowColor.has_value()) {
366         ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, ArrowColor, swiperArrowParameters.arrowColor.value());
367     }
368     if (swiperArrowParameters.isSidebarMiddle.has_value()) {
369         ACE_UPDATE_LAYOUT_PROPERTY(
370             SwiperLayoutProperty, IsSidebarMiddle, swiperArrowParameters.isSidebarMiddle.value());
371     }
372 }
373 
SetDisplayArrow(bool displayArrow)374 void SwiperModelNG::SetDisplayArrow(bool displayArrow)
375 {
376     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayArrow, displayArrow);
377 }
378 
SetHoverShow(bool hoverShow)379 void SwiperModelNG::SetHoverShow(bool hoverShow)
380 {
381     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, HoverShow, hoverShow);
382 }
383 
SetNestedScroll(const NestedScrollOptions & nestedOpt)384 void SwiperModelNG::SetNestedScroll(const NestedScrollOptions& nestedOpt)
385 {
386     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
387     CHECK_NULL_VOID(swiperNode);
388     auto pattern = swiperNode->GetPattern<SwiperPattern>();
389     CHECK_NULL_VOID(pattern);
390     pattern->SetNestedScroll(nestedOpt);
391 }
392 
SetSwipeByGroup(bool swipeByGroup)393 void SwiperModelNG::SetSwipeByGroup(bool swipeByGroup)
394 {
395     ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, SwipeByGroup, swipeByGroup);
396 }
397 
SetCustomContentTransition(SwiperContentAnimatedTransition & transition)398 void SwiperModelNG::SetCustomContentTransition(SwiperContentAnimatedTransition& transition)
399 {
400     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
401     CHECK_NULL_VOID(swiperNode);
402     auto pattern = swiperNode->GetPattern<SwiperPattern>();
403     CHECK_NULL_VOID(pattern);
404     pattern->SetSwiperCustomContentTransition(transition);
405 }
406 
SetCustomContentTransition(FrameNode * frameNode,SwiperContentAnimatedTransition & transition)407 void SwiperModelNG::SetCustomContentTransition(FrameNode* frameNode, SwiperContentAnimatedTransition& transition)
408 {
409     auto pattern = frameNode->GetPattern<SwiperPattern>();
410     CHECK_NULL_VOID(pattern);
411     pattern->SetSwiperCustomContentTransition(transition);
412 }
413 
SetOnContentDidScroll(ContentDidScrollEvent && onContentDidScroll)414 void SwiperModelNG::SetOnContentDidScroll(ContentDidScrollEvent&& onContentDidScroll)
415 {
416     auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
417     CHECK_NULL_VOID(swiperNode);
418     auto pattern = swiperNode->GetPattern<SwiperPattern>();
419     CHECK_NULL_VOID(pattern);
420     pattern->SetOnContentDidScroll(std::move(onContentDidScroll));
421 }
422 
SetOnContentDidScroll(FrameNode * frameNode,ContentDidScrollEvent && onContentDidScroll)423 void SwiperModelNG::SetOnContentDidScroll(FrameNode* frameNode, ContentDidScrollEvent&& onContentDidScroll)
424 {
425     CHECK_NULL_VOID(frameNode);
426     auto pattern = frameNode->GetPattern<SwiperPattern>();
427     CHECK_NULL_VOID(pattern);
428     pattern->SetOnContentDidScroll(std::move(onContentDidScroll));
429 }
430 
SetNextMargin(FrameNode * frameNode,const Dimension & nextMargin,bool ignoreBlank)431 void SwiperModelNG::SetNextMargin(FrameNode* frameNode, const Dimension& nextMargin, bool ignoreBlank)
432 {
433     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMargin, nextMargin, frameNode);
434     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMarginIgnoreBlank, ignoreBlank, frameNode);
435     CHECK_NULL_VOID(frameNode);
436     auto pattern = frameNode->GetPattern<SwiperPattern>();
437     CHECK_NULL_VOID(pattern);
438     pattern->SetNextMarginIgnoreBlank(ignoreBlank);
439 }
440 
SetPreviousMargin(FrameNode * frameNode,const Dimension & prevMargin,bool ignoreBlank)441 void SwiperModelNG::SetPreviousMargin(FrameNode* frameNode, const Dimension& prevMargin, bool ignoreBlank)
442 {
443     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMargin, prevMargin, frameNode);
444     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMarginIgnoreBlank, ignoreBlank, frameNode);
445     CHECK_NULL_VOID(frameNode);
446     auto pattern = frameNode->GetPattern<SwiperPattern>();
447     CHECK_NULL_VOID(pattern);
448     pattern->SetPrevMarginIgnoreBlank(ignoreBlank);
449 }
450 
SetIndex(FrameNode * frameNode,uint32_t index)451 void SwiperModelNG::SetIndex(FrameNode* frameNode, uint32_t index)
452 {
453     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, Index, index, frameNode);
454 }
455 
SetAutoPlayInterval(FrameNode * frameNode,uint32_t interval)456 void SwiperModelNG::SetAutoPlayInterval(FrameNode* frameNode, uint32_t interval)
457 {
458     ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlayInterval, interval, frameNode);
459 }
460 
SetDuration(FrameNode * frameNode,uint32_t duration)461 void SwiperModelNG::SetDuration(FrameNode* frameNode, uint32_t duration)
462 {
463     ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, Duration, duration, frameNode);
464 }
465 
SetCachedCount(FrameNode * frameNode,int32_t cachedCount)466 void SwiperModelNG::SetCachedCount(FrameNode* frameNode, int32_t cachedCount)
467 {
468     CHECK_NULL_VOID(frameNode);
469     auto pattern = frameNode->GetPattern<SwiperPattern>();
470     CHECK_NULL_VOID(pattern);
471     pattern->SetCachedCount(cachedCount);
472 
473     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, CachedCount, cachedCount, frameNode);
474 }
475 
GetCachedCount(FrameNode * frameNode)476 int32_t SwiperModelNG::GetCachedCount(FrameNode* frameNode)
477 {
478     int32_t cachedCount = 1;
479     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, CachedCount, cachedCount, frameNode, 1);
480     return cachedCount;
481 }
482 
SetAutoPlay(FrameNode * frameNode,bool autoPlay)483 void SwiperModelNG::SetAutoPlay(FrameNode* frameNode, bool autoPlay)
484 {
485     ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlay, autoPlay, frameNode);
486 }
487 
SetLoop(FrameNode * frameNode,bool loop)488 void SwiperModelNG::SetLoop(FrameNode* frameNode, bool loop)
489 {
490     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, Loop, loop, frameNode);
491 }
492 
SetDirection(FrameNode * frameNode,Axis axis)493 void SwiperModelNG::SetDirection(FrameNode* frameNode, Axis axis)
494 {
495     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, Direction, axis, frameNode);
496 }
497 
SetDisableSwipe(FrameNode * frameNode,bool disableSwipe)498 void SwiperModelNG::SetDisableSwipe(FrameNode* frameNode, bool disableSwipe)
499 {
500     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisableSwipe, disableSwipe, frameNode);
501 }
502 
SetItemSpace(FrameNode * frameNode,const Dimension & itemSpace)503 void SwiperModelNG::SetItemSpace(FrameNode* frameNode, const Dimension& itemSpace)
504 {
505     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, ItemSpace, itemSpace, frameNode);
506 }
507 
SetDisplayMode(FrameNode * frameNode,SwiperDisplayMode displayMode)508 void SwiperModelNG::SetDisplayMode(FrameNode* frameNode, SwiperDisplayMode displayMode)
509 {
510     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayMode, displayMode, frameNode);
511 }
512 
SetEdgeEffect(FrameNode * frameNode,EdgeEffect edgeEffect)513 void SwiperModelNG::SetEdgeEffect(FrameNode* frameNode, EdgeEffect edgeEffect)
514 {
515     ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, EdgeEffect, edgeEffect, frameNode);
516 }
517 
SetMinSize(FrameNode * frameNode,const Dimension & minSize)518 void SwiperModelNG::SetMinSize(FrameNode* frameNode, const Dimension& minSize)
519 {
520     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, MinSize, minSize, frameNode);
521 }
522 
SetDisplayCount(FrameNode * frameNode,int32_t displayCount)523 void SwiperModelNG::SetDisplayCount(FrameNode* frameNode, int32_t displayCount)
524 {
525     if (displayCount <= 0) {
526         return;
527     }
528 
529     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayCount, displayCount, frameNode);
530 }
531 
ResetDisplayCount(FrameNode * frameNode)532 void SwiperModelNG::ResetDisplayCount(FrameNode* frameNode)
533 {
534     ACE_RESET_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayCount, frameNode);
535 }
536 
SetCurve(FrameNode * frameNode,const RefPtr<Curve> & curve)537 void SwiperModelNG::SetCurve(FrameNode* frameNode, const RefPtr<Curve>& curve)
538 {
539     ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, Curve, curve, frameNode);
540 }
541 
SetArrowStyle(FrameNode * frameNode,const SwiperArrowParameters & swiperArrowParameters)542 void SwiperModelNG::SetArrowStyle(FrameNode* frameNode, const SwiperArrowParameters& swiperArrowParameters)
543 {
544     if (swiperArrowParameters.isShowBackground.has_value()) {
545         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
546             SwiperLayoutProperty, IsShowBackground, swiperArrowParameters.isShowBackground.value(), frameNode);
547     }
548     if (swiperArrowParameters.backgroundSize.has_value()) {
549         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
550             SwiperLayoutProperty, BackgroundSize, swiperArrowParameters.backgroundSize.value(), frameNode);
551     }
552     if (swiperArrowParameters.backgroundColor.has_value()) {
553         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
554             SwiperLayoutProperty, BackgroundColor, swiperArrowParameters.backgroundColor.value(), frameNode);
555     }
556     if (swiperArrowParameters.arrowSize.has_value()) {
557         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
558             SwiperLayoutProperty, ArrowSize, swiperArrowParameters.arrowSize.value(), frameNode);
559     }
560     if (swiperArrowParameters.arrowColor.has_value()) {
561         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
562             SwiperLayoutProperty, ArrowColor, swiperArrowParameters.arrowColor.value(), frameNode);
563     }
564     if (swiperArrowParameters.isSidebarMiddle.has_value()) {
565         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
566             SwiperLayoutProperty, IsSidebarMiddle, swiperArrowParameters.isSidebarMiddle.value(), frameNode);
567     }
568 }
569 
SetDisplayArrow(FrameNode * frameNode,bool displayArrow)570 void SwiperModelNG::SetDisplayArrow(FrameNode* frameNode, bool displayArrow)
571 {
572     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayArrow, displayArrow, frameNode);
573 }
574 
SetHoverShow(FrameNode * frameNode,bool hoverShow)575 void SwiperModelNG::SetHoverShow(FrameNode* frameNode, bool hoverShow)
576 {
577     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, HoverShow, hoverShow, frameNode);
578 }
579 
SetShowIndicator(FrameNode * frameNode,bool showIndicator)580 void SwiperModelNG::SetShowIndicator(FrameNode* frameNode, bool showIndicator)
581 {
582     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, ShowIndicator, showIndicator, frameNode);
583 }
584 
SetIndicatorIsBoolean(FrameNode * frameNode,bool isBoolean)585 void SwiperModelNG::SetIndicatorIsBoolean(FrameNode* frameNode, bool isBoolean)
586 {
587     CHECK_NULL_VOID(frameNode);
588     auto pattern = frameNode->GetPattern<SwiperPattern>();
589     CHECK_NULL_VOID(pattern);
590     pattern->SetIndicatorIsBoolean(isBoolean);
591 }
592 
SetDigitIndicatorStyle(FrameNode * frameNode,const SwiperDigitalParameters & swiperDigitalParameters)593 void SwiperModelNG::SetDigitIndicatorStyle(FrameNode* frameNode, const SwiperDigitalParameters& swiperDigitalParameters)
594 {
595     CHECK_NULL_VOID(frameNode);
596     auto pattern = frameNode->GetPattern<SwiperPattern>();
597     CHECK_NULL_VOID(pattern);
598     pattern->SetSwiperDigitalParameters(swiperDigitalParameters);
599 }
600 
SetIndicatorType(FrameNode * frameNode,SwiperIndicatorType indicatorType)601 void SwiperModelNG::SetIndicatorType(FrameNode* frameNode, SwiperIndicatorType indicatorType)
602 {
603     SwiperIndicatorUtils::SetSwiperIndicatorType(indicatorType);
604     ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, IndicatorType, indicatorType, frameNode);
605 }
606 
SetIsIndicatorCustomSize(FrameNode * frameNode,bool isCustomSize)607 void SwiperModelNG::SetIsIndicatorCustomSize(FrameNode* frameNode, bool isCustomSize)
608 {
609     CHECK_NULL_VOID(frameNode);
610     auto pattern = frameNode->GetPattern<SwiperPattern>();
611     CHECK_NULL_VOID(pattern);
612     pattern->SetIsIndicatorCustomSize(isCustomSize);
613 }
614 
SetDotIndicatorStyle(FrameNode * frameNode,const SwiperParameters & swiperParameters)615 void SwiperModelNG::SetDotIndicatorStyle(FrameNode* frameNode, const SwiperParameters& swiperParameters)
616 {
617     CHECK_NULL_VOID(frameNode);
618     auto pattern = frameNode->GetPattern<SwiperPattern>();
619     CHECK_NULL_VOID(pattern);
620     pattern->SetSwiperParameters(swiperParameters);
621 }
622 
SetEnabled(FrameNode * frameNode,bool enabled)623 void SwiperModelNG::SetEnabled(FrameNode* frameNode, bool enabled)
624 {
625     ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, Enabled, enabled, frameNode);
626 }
627 
SetOnChange(FrameNode * frameNode,std::function<void (const BaseEventInfo * info)> && onChange)628 void SwiperModelNG::SetOnChange(FrameNode* frameNode, std::function<void(const BaseEventInfo* info)>&& onChange)
629 {
630     CHECK_NULL_VOID(frameNode);
631     auto pattern = frameNode->GetPattern<SwiperPattern>();
632     CHECK_NULL_VOID(pattern);
633     pattern->UpdateChangeEvent([event = std::move(onChange)](int32_t index) {
634         SwiperChangeEvent eventInfo(index);
635         event(&eventInfo);
636     });
637 }
638 
SetOnAnimationStart(FrameNode * frameNode,AnimationStartEvent && onAnimationStart)639 void SwiperModelNG::SetOnAnimationStart(FrameNode* frameNode, AnimationStartEvent&& onAnimationStart)
640 {
641     CHECK_NULL_VOID(frameNode);
642     auto pattern = frameNode->GetPattern<SwiperPattern>();
643     CHECK_NULL_VOID(pattern);
644     pattern->UpdateAnimationStartEvent([event = std::move(onAnimationStart)](int32_t index, int32_t targetIndex,
645         const AnimationCallbackInfo& info) { event(index, targetIndex, info); });
646 }
647 
SetOnAnimationEnd(FrameNode * frameNode,AnimationEndEvent && onAnimationEnd)648 void SwiperModelNG::SetOnAnimationEnd(FrameNode* frameNode, AnimationEndEvent&& onAnimationEnd)
649 {
650     CHECK_NULL_VOID(frameNode);
651     auto pattern = frameNode->GetPattern<SwiperPattern>();
652     CHECK_NULL_VOID(pattern);
653     pattern->UpdateAnimationEndEvent(
654         [event = std::move(onAnimationEnd)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
655 }
656 
SetOnGestureSwipe(FrameNode * frameNode,GestureSwipeEvent && onGestureSwipe)657 void SwiperModelNG::SetOnGestureSwipe(FrameNode* frameNode, GestureSwipeEvent&& onGestureSwipe)
658 {
659     CHECK_NULL_VOID(frameNode);
660     auto eventHub = frameNode->GetEventHub<SwiperEventHub>();
661     CHECK_NULL_VOID(eventHub);
662     eventHub->SetGestureSwipeEvent(
663         [event = std::move(onGestureSwipe)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
664 }
665 
GetLoop(FrameNode * frameNode)666 bool SwiperModelNG::GetLoop(FrameNode* frameNode)
667 {
668     bool value = true;
669     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, Loop, value, frameNode, value);
670     return value;
671 }
672 
GetAutoPlay(FrameNode * frameNode)673 bool SwiperModelNG::GetAutoPlay(FrameNode* frameNode)
674 {
675     bool value = false;
676     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, AutoPlay, value, frameNode, value);
677     return value;
678 }
679 
GetIndex(FrameNode * frameNode)680 int SwiperModelNG::GetIndex(FrameNode* frameNode)
681 {
682     int value = 0;
683     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, Index, value, frameNode, value);
684     return value;
685 }
686 
GetDirection(FrameNode * frameNode)687 Axis SwiperModelNG::GetDirection(FrameNode* frameNode)
688 {
689     Axis value = Axis::HORIZONTAL;
690     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, Direction, value, frameNode, value);
691     return value;
692 }
693 
GetDuration(FrameNode * frameNode)694 uint32_t SwiperModelNG::GetDuration(FrameNode* frameNode)
695 {
696     uint32_t value = SwiperAnimationStyle::DEFAULT_DURATION;
697     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, Duration, value, frameNode, value);
698     return value;
699 }
700 
GetDisplayCount(FrameNode * frameNode)701 int SwiperModelNG::GetDisplayCount(FrameNode* frameNode)
702 {
703     int value = 1;
704     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, DisplayCount, value, frameNode, value);
705     return value;
706 }
707 
GetAutoPlayInterval(FrameNode * frameNode)708 int SwiperModelNG::GetAutoPlayInterval(FrameNode* frameNode)
709 {
710     int value = SwiperAnimationStyle::DEFAULT_INTERVAL;
711     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, AutoPlayInterval, value, frameNode, value);
712     return value;
713 }
714 
GetCurve(FrameNode * frameNode)715 RefPtr<Curve> SwiperModelNG::GetCurve(FrameNode* frameNode)
716 {
717     RefPtr<Curve> value = OHOS::Ace::Curves::LINEAR;
718     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, Curve, value, frameNode, value);
719     return value;
720 }
721 
GetDisableSwipe(FrameNode * frameNode)722 bool SwiperModelNG::GetDisableSwipe(FrameNode* frameNode)
723 {
724     bool value = false;
725     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, DisableSwipe, value, frameNode, value);
726     return value;
727 }
728 
GetItemSpace(FrameNode * frameNode)729 float SwiperModelNG::GetItemSpace(FrameNode* frameNode)
730 {
731     Dimension value(0, DimensionUnit::VP);
732     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, ItemSpace, value, frameNode, value);
733     return value.Value();
734 }
735 
GetShowIndicator(FrameNode * frameNode)736 bool SwiperModelNG::GetShowIndicator(FrameNode* frameNode)
737 {
738     bool value = true;
739     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, ShowIndicator, value, frameNode, value);
740     return value;
741 }
742 
GetShowDisplayArrow(FrameNode * frameNode)743 int SwiperModelNG::GetShowDisplayArrow(FrameNode* frameNode)
744 {
745     bool show = false;
746     bool hoverShow = false;
747     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, DisplayArrow, show, frameNode, show);
748     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, HoverShow, hoverShow, frameNode, hoverShow);
749     int ArrowType = 0;
750     if (show && hoverShow) {
751         return ArrowType = static_cast<int>(SwiperArrow::ARKUI_SWIPER_ARROW_SHOW_ON_HOVER);
752     }
753     if (show) {
754         ArrowType = static_cast<int>(SwiperArrow::ARKUI_SWIPER_ARROW_SHOW);
755     } else {
756         ArrowType = static_cast<int>(SwiperArrow::ARKUI_SWIPER_ARROW_HIDE);
757     }
758     return ArrowType;
759 }
760 
GetEffectMode(FrameNode * frameNode)761 EdgeEffect SwiperModelNG::GetEffectMode(FrameNode* frameNode)
762 {
763     EdgeEffect mode = EdgeEffect::SPRING;
764     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, EdgeEffect, mode, frameNode, mode);
765     return mode;
766 }
767 
GetNestedScroll(FrameNode * frameNode)768 int32_t SwiperModelNG::GetNestedScroll(FrameNode* frameNode)
769 {
770     CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
771     auto pattern = frameNode->GetPattern<SwiperPattern>();
772     CHECK_NULL_RETURN(pattern, ERROR_CODE_PARAM_INVALID);
773     return static_cast<int>(pattern->GetNestedScroll().forward);
774 }
775 
RealTotalCount(FrameNode * frameNode)776 int32_t SwiperModelNG::RealTotalCount(FrameNode* frameNode)
777 {
778     CHECK_NULL_RETURN(frameNode, 0);
779     auto pattern = frameNode->GetPattern<SwiperPattern>();
780     CHECK_NULL_RETURN(pattern, 0);
781     return pattern->RealTotalCount();
782 }
783 
SetSwiperToIndex(FrameNode * frameNode,int32_t index,bool useAnimation)784 void SwiperModelNG::SetSwiperToIndex(FrameNode* frameNode, int32_t index, bool useAnimation)
785 {
786     CHECK_NULL_VOID(frameNode);
787     auto pattern = frameNode->GetPattern<SwiperPattern>();
788     CHECK_NULL_VOID(pattern);
789     pattern->ChangeIndex(index, useAnimation);
790 }
791 
GetPreviousMargin(FrameNode * frameNode,int32_t unit,SwiperMarginOptions * options)792 void SwiperModelNG::GetPreviousMargin(FrameNode* frameNode, int32_t unit, SwiperMarginOptions* options)
793 {
794     Dimension prevMargin(0.0f, static_cast<DimensionUnit>(unit));
795     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
796         SwiperLayoutProperty, PrevMargin, prevMargin, frameNode, prevMargin);
797     options->margin = prevMargin.GetNativeValue(static_cast<DimensionUnit>(unit));
798     auto pattern = frameNode->GetPattern<SwiperPattern>();
799     CHECK_NULL_VOID(pattern);
800     options->ignoreBlank = pattern->GetPrevMarginIgnoreBlank();
801 }
802 
GetNextMargin(FrameNode * frameNode,int32_t unit,SwiperMarginOptions * options)803 void SwiperModelNG::GetNextMargin(FrameNode* frameNode, int32_t unit, SwiperMarginOptions* options)
804 {
805     Dimension nextMargin(0.0f, static_cast<DimensionUnit>(unit));
806     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
807         SwiperLayoutProperty, NextMargin, nextMargin, frameNode, nextMargin);
808     options->margin = nextMargin.GetNativeValue(static_cast<DimensionUnit>(unit));
809     auto pattern = frameNode->GetPattern<SwiperPattern>();
810     CHECK_NULL_VOID(pattern);
811     options->ignoreBlank = pattern->GetNextMarginIgnoreBlank();
812 }
813 
GetDotIndicator(FrameNode * frameNode)814 std::shared_ptr<SwiperParameters> SwiperModelNG::GetDotIndicator(FrameNode* frameNode)
815 {
816     CHECK_NULL_RETURN(frameNode, nullptr);
817     auto pattern = frameNode->GetPattern<SwiperPattern>();
818     CHECK_NULL_RETURN(pattern, nullptr);
819     return pattern->GetSwiperParameters();
820 }
821 
GetIndicatorType(FrameNode * frameNode)822 int32_t SwiperModelNG::GetIndicatorType(FrameNode* frameNode)
823 {
824     CHECK_NULL_RETURN(frameNode, 0);
825     SwiperIndicatorType value = SwiperIndicatorType::DOT;
826     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, IndicatorType,
827         value, frameNode, value);
828     return static_cast<int32_t>(value);
829 }
830 
GetOrCreateSwiperController(FrameNode * frameNode)831 RefPtr<SwiperController> SwiperModelNG::GetOrCreateSwiperController(FrameNode* frameNode)
832 {
833     CHECK_NULL_RETURN(frameNode, nullptr);
834     auto pattern = frameNode->GetPattern<SwiperPattern>();
835     CHECK_NULL_RETURN(pattern, nullptr);
836     if (!pattern->GetSwiperController()) {
837         auto controller = AceType::MakeRefPtr<SwiperController>();
838         pattern->SetSwiperController(controller);
839     }
840     return pattern->GetSwiperController();
841 }
842 
GetSwiperController(FrameNode * frameNode)843 RefPtr<SwiperController> SwiperModelNG::GetSwiperController(FrameNode* frameNode)
844 {
845     auto pattern = frameNode->GetPattern<SwiperPattern>();
846     CHECK_NULL_RETURN(pattern, nullptr);
847     return pattern->GetSwiperController();
848 }
849 
GetIndicatorInteractive(FrameNode * frameNode)850 bool SwiperModelNG::GetIndicatorInteractive(FrameNode* frameNode)
851 {
852     CHECK_NULL_RETURN(frameNode, false);
853     auto pattern = frameNode->GetPattern<SwiperPattern>();
854     CHECK_NULL_RETURN(pattern, false);
855     return pattern->IsIndicatorInteractive();
856 }
857 } // namespace OHOS::Ace::NG
858