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
SetCachedIsShown(bool isShown)139 void SwiperModelNG::SetCachedIsShown(bool isShown)
140 {
141 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, CachedIsShown, isShown);
142 }
143
SetCachedIsShown(FrameNode * frameNode,bool isShown)144 void SwiperModelNG::SetCachedIsShown(FrameNode* frameNode, bool isShown)
145 {
146 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, CachedIsShown, isShown, frameNode);
147 }
148
SetIsIndicatorCustomSize(bool isCustomSize)149 void SwiperModelNG::SetIsIndicatorCustomSize(bool isCustomSize)
150 {
151 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
152 CHECK_NULL_VOID(swiperNode);
153 auto pattern = swiperNode->GetPattern<SwiperPattern>();
154 CHECK_NULL_VOID(pattern);
155 pattern->SetIsIndicatorCustomSize(isCustomSize);
156 }
157
SetIndicatorInteractive(bool interactive)158 void SwiperModelNG::SetIndicatorInteractive(bool interactive)
159 {
160 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
161 CHECK_NULL_VOID(swiperNode);
162 auto pattern = swiperNode->GetPattern<SwiperPattern>();
163 CHECK_NULL_VOID(pattern);
164 pattern->SetIndicatorInteractive(interactive);
165 }
166
SetAutoPlay(bool autoPlay)167 void SwiperModelNG::SetAutoPlay(bool autoPlay)
168 {
169 ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlay, autoPlay);
170 }
171
SetAutoPlayInterval(uint32_t interval)172 void SwiperModelNG::SetAutoPlayInterval(uint32_t interval)
173 {
174 ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlayInterval, interval);
175 }
176
SetDuration(uint32_t duration)177 void SwiperModelNG::SetDuration(uint32_t duration)
178 {
179 ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, Duration, duration);
180 }
181
SetLoop(bool loop)182 void SwiperModelNG::SetLoop(bool loop)
183 {
184 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, Loop, loop);
185 }
186
SetEnabled(bool enabled)187 void SwiperModelNG::SetEnabled(bool enabled)
188 {
189 ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, Enabled, enabled);
190 }
191
SetDisableSwipe(bool disableSwipe)192 void SwiperModelNG::SetDisableSwipe(bool disableSwipe)
193 {
194 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisableSwipe, disableSwipe);
195 }
196
SetEdgeEffect(EdgeEffect edgeEffect)197 void SwiperModelNG::SetEdgeEffect(EdgeEffect edgeEffect)
198 {
199 ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, EdgeEffect, edgeEffect);
200 }
201
SetCurve(const RefPtr<Curve> & curve)202 void SwiperModelNG::SetCurve(const RefPtr<Curve>& curve)
203 {
204 ACE_UPDATE_PAINT_PROPERTY(SwiperPaintProperty, Curve, curve);
205 }
206
SetOnChange(std::function<void (const BaseEventInfo * info)> && onChange)207 void SwiperModelNG::SetOnChange(std::function<void(const BaseEventInfo* info)>&& onChange)
208 {
209 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
210 CHECK_NULL_VOID(swiperNode);
211 auto pattern = swiperNode->GetPattern<SwiperPattern>();
212 CHECK_NULL_VOID(pattern);
213
214 pattern->UpdateChangeEvent([event = std::move(onChange)](int32_t index) {
215 SwiperChangeEvent eventInfo(index);
216 event(&eventInfo);
217 });
218 }
219
SetOnAnimationStart(AnimationStartEvent && onAnimationStart)220 void SwiperModelNG::SetOnAnimationStart(AnimationStartEvent&& onAnimationStart)
221 {
222 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
223 CHECK_NULL_VOID(swiperNode);
224 auto pattern = swiperNode->GetPattern<SwiperPattern>();
225 CHECK_NULL_VOID(pattern);
226
227 pattern->UpdateAnimationStartEvent([event = std::move(onAnimationStart)](int32_t index, int32_t targetIndex,
228 const AnimationCallbackInfo& info) { event(index, targetIndex, info); });
229 }
230
SetOnAnimationEnd(AnimationEndEvent && onAnimationEnd)231 void SwiperModelNG::SetOnAnimationEnd(AnimationEndEvent&& onAnimationEnd)
232 {
233 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
234 CHECK_NULL_VOID(swiperNode);
235 auto pattern = swiperNode->GetPattern<SwiperPattern>();
236 CHECK_NULL_VOID(pattern);
237
238 pattern->UpdateAnimationEndEvent(
239 [event = std::move(onAnimationEnd)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
240 }
241
242
SetOnGestureSwipe(GestureSwipeEvent && onGestureSwipe)243 void SwiperModelNG::SetOnGestureSwipe(GestureSwipeEvent&& onGestureSwipe)
244 {
245 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
246 CHECK_NULL_VOID(swiperNode);
247 auto eventHub = swiperNode->GetEventHub<SwiperEventHub>();
248 CHECK_NULL_VOID(eventHub);
249
250 eventHub->SetGestureSwipeEvent(
251 [event = std::move(onGestureSwipe)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
252 }
253
SetNestedScroll(FrameNode * frameNode,const int32_t nestedOpt)254 void SwiperModelNG::SetNestedScroll(FrameNode* frameNode, const int32_t nestedOpt)
255 {
256 CHECK_NULL_VOID(frameNode);
257 auto pattern = frameNode->GetPattern<SwiperPattern>();
258 CHECK_NULL_VOID(pattern);
259 NestedScrollOptions option;
260 option.forward = static_cast<NestedScrollMode>(nestedOpt);
261 option.backward = static_cast<NestedScrollMode>(nestedOpt);
262 pattern->SetNestedScroll(option);
263 }
264
SetSwipeByGroup(FrameNode * frameNode,bool swipeByGroup)265 void SwiperModelNG::SetSwipeByGroup(FrameNode* frameNode, bool swipeByGroup)
266 {
267 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, SwipeByGroup, swipeByGroup, frameNode);
268 }
269
SetRemoteMessageEventId(RemoteCallback && remoteCallback)270 void SwiperModelNG::SetRemoteMessageEventId(RemoteCallback&& remoteCallback) {}
271
SetIndicatorStyle(const SwiperParameters & swiperParameters)272 void SwiperModelNG::SetIndicatorStyle(const SwiperParameters& swiperParameters)
273 {
274 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
275 CHECK_NULL_VOID(swiperNode);
276 auto pattern = swiperNode->GetPattern<SwiperPattern>();
277 CHECK_NULL_VOID(pattern);
278 pattern->SetSwiperParameters(swiperParameters);
279 };
280
SetDotIndicatorStyle(const SwiperParameters & swiperParameters)281 void SwiperModelNG::SetDotIndicatorStyle(const SwiperParameters& swiperParameters)
282 {
283 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
284 CHECK_NULL_VOID(swiperNode);
285 auto pattern = swiperNode->GetPattern<SwiperPattern>();
286 CHECK_NULL_VOID(pattern);
287 pattern->SetSwiperParameters(swiperParameters);
288 };
289
SetBindIndicator(bool bind)290 void SwiperModelNG::SetBindIndicator(bool bind)
291 {
292 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
293 CHECK_NULL_VOID(swiperNode);
294 auto pattern = swiperNode->GetPattern<SwiperPattern>();
295 CHECK_NULL_VOID(pattern);
296 pattern->SetBindIndicator(bind);
297 }
298
SetDigitIndicatorStyle(const SwiperDigitalParameters & swiperDigitalParameters)299 void SwiperModelNG::SetDigitIndicatorStyle(const SwiperDigitalParameters& swiperDigitalParameters)
300 {
301 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
302 CHECK_NULL_VOID(swiperNode);
303 auto pattern = swiperNode->GetPattern<SwiperPattern>();
304 CHECK_NULL_VOID(pattern);
305 pattern->SetSwiperDigitalParameters(swiperDigitalParameters);
306 };
307
SetOnClick(std::function<void (const BaseEventInfo * info,const RefPtr<V2::InspectorFunctionImpl> & impl)> && value)308 void SwiperModelNG::SetOnClick(
309 std::function<void(const BaseEventInfo* info, const RefPtr<V2::InspectorFunctionImpl>& impl)>&& value)
310 {}
311
SetMainSwiperSizeWidth()312 void SwiperModelNG::SetMainSwiperSizeWidth() {}
313
SetMainSwiperSizeHeight()314 void SwiperModelNG::SetMainSwiperSizeHeight() {}
315
SetPreviousMargin(const Dimension & prevMargin,bool ignoreBlank)316 void SwiperModelNG::SetPreviousMargin(const Dimension& prevMargin, bool ignoreBlank)
317 {
318 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMargin, prevMargin);
319 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMarginIgnoreBlank, ignoreBlank);
320 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
321 CHECK_NULL_VOID(swiperNode);
322 auto pattern = swiperNode->GetPattern<SwiperPattern>();
323 CHECK_NULL_VOID(pattern);
324 pattern->SetPrevMarginIgnoreBlank(ignoreBlank);
325 }
326
SetNextMargin(const Dimension & nextMargin,bool ignoreBlank)327 void SwiperModelNG::SetNextMargin(const Dimension& nextMargin, bool ignoreBlank)
328 {
329 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMargin, nextMargin);
330 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMarginIgnoreBlank, ignoreBlank);
331 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
332 CHECK_NULL_VOID(swiperNode);
333 auto pattern = swiperNode->GetPattern<SwiperPattern>();
334 CHECK_NULL_VOID(pattern);
335 pattern->SetNextMarginIgnoreBlank(ignoreBlank);
336 }
337
SetIndicatorInteractive(FrameNode * frameNode,bool interactive)338 void SwiperModelNG::SetIndicatorInteractive(FrameNode* frameNode, bool interactive)
339 {
340 CHECK_NULL_VOID(frameNode);
341 auto pattern = frameNode->GetPattern<SwiperPattern>();
342 CHECK_NULL_VOID(pattern);
343 pattern->SetIndicatorInteractive(interactive);
344 }
345
SetOnChangeEvent(std::function<void (const BaseEventInfo * info)> && onChangeEvent)346 void SwiperModelNG::SetOnChangeEvent(std::function<void(const BaseEventInfo* info)>&& onChangeEvent)
347 {
348 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
349 CHECK_NULL_VOID(swiperNode);
350 auto pattern = swiperNode->GetPattern<SwiperPattern>();
351 CHECK_NULL_VOID(pattern);
352
353 pattern->UpdateOnChangeEvent([event = std::move(onChangeEvent)](int32_t index) {
354 SwiperChangeEvent eventInfo(index);
355 event(&eventInfo);
356 });
357 }
358
SetIndicatorIsBoolean(bool isBoolean)359 void SwiperModelNG::SetIndicatorIsBoolean(bool isBoolean)
360 {
361 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
362 CHECK_NULL_VOID(swiperNode);
363 auto pattern = swiperNode->GetPattern<SwiperPattern>();
364 CHECK_NULL_VOID(pattern);
365 pattern->SetIndicatorIsBoolean(isBoolean);
366 }
367
SetArrowStyle(const SwiperArrowParameters & swiperArrowParameters)368 void SwiperModelNG::SetArrowStyle(const SwiperArrowParameters& swiperArrowParameters)
369 {
370 if (swiperArrowParameters.isShowBackground.has_value()) {
371 ACE_UPDATE_LAYOUT_PROPERTY(
372 SwiperLayoutProperty, IsShowBackground, swiperArrowParameters.isShowBackground.value());
373 }
374 if (swiperArrowParameters.backgroundSize.has_value()) {
375 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, BackgroundSize, swiperArrowParameters.backgroundSize.value());
376 }
377 if (swiperArrowParameters.backgroundColor.has_value()) {
378 ACE_UPDATE_LAYOUT_PROPERTY(
379 SwiperLayoutProperty, BackgroundColor, swiperArrowParameters.backgroundColor.value());
380 }
381 if (swiperArrowParameters.arrowSize.has_value()) {
382 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, ArrowSize, swiperArrowParameters.arrowSize.value());
383 }
384 if (swiperArrowParameters.arrowColor.has_value()) {
385 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, ArrowColor, swiperArrowParameters.arrowColor.value());
386 }
387 if (swiperArrowParameters.isSidebarMiddle.has_value()) {
388 ACE_UPDATE_LAYOUT_PROPERTY(
389 SwiperLayoutProperty, IsSidebarMiddle, swiperArrowParameters.isSidebarMiddle.value());
390 }
391 }
392
SetDisplayArrow(bool displayArrow)393 void SwiperModelNG::SetDisplayArrow(bool displayArrow)
394 {
395 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayArrow, displayArrow);
396 }
397
SetHoverShow(bool hoverShow)398 void SwiperModelNG::SetHoverShow(bool hoverShow)
399 {
400 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, HoverShow, hoverShow);
401 }
402
SetNestedScroll(const NestedScrollOptions & nestedOpt)403 void SwiperModelNG::SetNestedScroll(const NestedScrollOptions& nestedOpt)
404 {
405 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
406 CHECK_NULL_VOID(swiperNode);
407 auto pattern = swiperNode->GetPattern<SwiperPattern>();
408 CHECK_NULL_VOID(pattern);
409 pattern->SetNestedScroll(nestedOpt);
410 }
411
SetSwipeByGroup(bool swipeByGroup)412 void SwiperModelNG::SetSwipeByGroup(bool swipeByGroup)
413 {
414 ACE_UPDATE_LAYOUT_PROPERTY(SwiperLayoutProperty, SwipeByGroup, swipeByGroup);
415 }
416
SetCustomContentTransition(SwiperContentAnimatedTransition & transition)417 void SwiperModelNG::SetCustomContentTransition(SwiperContentAnimatedTransition& transition)
418 {
419 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
420 CHECK_NULL_VOID(swiperNode);
421 auto pattern = swiperNode->GetPattern<SwiperPattern>();
422 CHECK_NULL_VOID(pattern);
423 pattern->SetSwiperCustomContentTransition(transition);
424 }
425
SetCustomContentTransition(FrameNode * frameNode,SwiperContentAnimatedTransition & transition)426 void SwiperModelNG::SetCustomContentTransition(FrameNode* frameNode, SwiperContentAnimatedTransition& transition)
427 {
428 auto pattern = frameNode->GetPattern<SwiperPattern>();
429 CHECK_NULL_VOID(pattern);
430 pattern->SetSwiperCustomContentTransition(transition);
431 }
432
SetOnContentDidScroll(ContentDidScrollEvent && onContentDidScroll)433 void SwiperModelNG::SetOnContentDidScroll(ContentDidScrollEvent&& onContentDidScroll)
434 {
435 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
436 CHECK_NULL_VOID(swiperNode);
437 auto pattern = swiperNode->GetPattern<SwiperPattern>();
438 CHECK_NULL_VOID(pattern);
439 pattern->SetOnContentDidScroll(std::move(onContentDidScroll));
440 }
441
SetOnContentDidScroll(FrameNode * frameNode,ContentDidScrollEvent && onContentDidScroll)442 void SwiperModelNG::SetOnContentDidScroll(FrameNode* frameNode, ContentDidScrollEvent&& onContentDidScroll)
443 {
444 CHECK_NULL_VOID(frameNode);
445 auto pattern = frameNode->GetPattern<SwiperPattern>();
446 CHECK_NULL_VOID(pattern);
447 pattern->SetOnContentDidScroll(std::move(onContentDidScroll));
448 }
449
SetOnContentWillScroll(ContentWillScrollEvent && onContentWillScroll)450 void SwiperModelNG::SetOnContentWillScroll(ContentWillScrollEvent&& onContentWillScroll)
451 {
452 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
453 CHECK_NULL_VOID(swiperNode);
454 auto pattern = swiperNode->GetPattern<SwiperPattern>();
455 CHECK_NULL_VOID(pattern);
456 pattern->SetOnContentWillScroll(std::move(onContentWillScroll));
457 }
458
SetOnContentWillScroll(FrameNode * frameNode,ContentWillScrollEvent && onContentWillScroll)459 void SwiperModelNG::SetOnContentWillScroll(FrameNode* frameNode, ContentWillScrollEvent&& onContentWillScroll)
460 {
461 CHECK_NULL_VOID(frameNode);
462 auto pattern = frameNode->GetPattern<SwiperPattern>();
463 CHECK_NULL_VOID(pattern);
464 pattern->SetOnContentWillScroll(std::move(onContentWillScroll));
465 }
466
SetPageFlipMode(int32_t pageFlipMode)467 void SwiperModelNG::SetPageFlipMode(int32_t pageFlipMode)
468 {
469 auto swiperNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
470 CHECK_NULL_VOID(swiperNode);
471 auto pattern = swiperNode->GetPattern<SwiperPattern>();
472 CHECK_NULL_VOID(pattern);
473 pattern->SetPageFlipMode(pageFlipMode);
474 }
475
SetPageFlipMode(FrameNode * frameNode,int32_t options)476 void SwiperModelNG::SetPageFlipMode(FrameNode* frameNode, int32_t options)
477 {
478 CHECK_NULL_VOID(frameNode);
479 auto pattern = frameNode->GetPattern<SwiperPattern>();
480 CHECK_NULL_VOID(pattern);
481 pattern->SetPageFlipMode(options);
482 }
483
GetPageFlipMode(FrameNode * frameNode)484 int32_t SwiperModelNG::GetPageFlipMode(FrameNode* frameNode)
485 {
486 CHECK_NULL_RETURN(frameNode, 0);
487 auto pattern = frameNode->GetPattern<SwiperPattern>();
488 CHECK_NULL_RETURN(pattern, 0);
489 return pattern->GetPageFlipMode();
490 }
491
SetNextMargin(FrameNode * frameNode,const Dimension & nextMargin,bool ignoreBlank)492 void SwiperModelNG::SetNextMargin(FrameNode* frameNode, const Dimension& nextMargin, bool ignoreBlank)
493 {
494 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMargin, nextMargin, frameNode);
495 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, NextMarginIgnoreBlank, ignoreBlank, frameNode);
496 CHECK_NULL_VOID(frameNode);
497 auto pattern = frameNode->GetPattern<SwiperPattern>();
498 CHECK_NULL_VOID(pattern);
499 pattern->SetNextMarginIgnoreBlank(ignoreBlank);
500 }
501
SetPreviousMargin(FrameNode * frameNode,const Dimension & prevMargin,bool ignoreBlank)502 void SwiperModelNG::SetPreviousMargin(FrameNode* frameNode, const Dimension& prevMargin, bool ignoreBlank)
503 {
504 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMargin, prevMargin, frameNode);
505 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, PrevMarginIgnoreBlank, ignoreBlank, frameNode);
506 CHECK_NULL_VOID(frameNode);
507 auto pattern = frameNode->GetPattern<SwiperPattern>();
508 CHECK_NULL_VOID(pattern);
509 pattern->SetPrevMarginIgnoreBlank(ignoreBlank);
510 }
511
SetIndex(FrameNode * frameNode,uint32_t index)512 void SwiperModelNG::SetIndex(FrameNode* frameNode, uint32_t index)
513 {
514 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, Index, index, frameNode);
515 }
516
SetAutoPlayInterval(FrameNode * frameNode,uint32_t interval)517 void SwiperModelNG::SetAutoPlayInterval(FrameNode* frameNode, uint32_t interval)
518 {
519 ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlayInterval, interval, frameNode);
520 }
521
SetDuration(FrameNode * frameNode,uint32_t duration)522 void SwiperModelNG::SetDuration(FrameNode* frameNode, uint32_t duration)
523 {
524 ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, Duration, duration, frameNode);
525 }
526
SetCachedCount(FrameNode * frameNode,int32_t cachedCount)527 void SwiperModelNG::SetCachedCount(FrameNode* frameNode, int32_t cachedCount)
528 {
529 CHECK_NULL_VOID(frameNode);
530 auto pattern = frameNode->GetPattern<SwiperPattern>();
531 CHECK_NULL_VOID(pattern);
532 pattern->SetCachedCount(cachedCount);
533
534 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, CachedCount, cachedCount, frameNode);
535 }
536
GetCachedCount(FrameNode * frameNode)537 int32_t SwiperModelNG::GetCachedCount(FrameNode* frameNode)
538 {
539 int32_t cachedCount = 1;
540 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, CachedCount, cachedCount, frameNode, 1);
541 return cachedCount;
542 }
543
GetCachedIsShown(FrameNode * frameNode)544 bool SwiperModelNG::GetCachedIsShown(FrameNode* frameNode)
545 {
546 bool isShown = false;
547 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, CachedIsShown, isShown, frameNode, false);
548 return isShown;
549 }
550
SetAutoPlay(FrameNode * frameNode,bool autoPlay)551 void SwiperModelNG::SetAutoPlay(FrameNode* frameNode, bool autoPlay)
552 {
553 ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, AutoPlay, autoPlay, frameNode);
554 }
555
SetLoop(FrameNode * frameNode,bool loop)556 void SwiperModelNG::SetLoop(FrameNode* frameNode, bool loop)
557 {
558 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, Loop, loop, frameNode);
559 }
560
SetDirection(FrameNode * frameNode,Axis axis)561 void SwiperModelNG::SetDirection(FrameNode* frameNode, Axis axis)
562 {
563 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, Direction, axis, frameNode);
564 }
565
SetDisableSwipe(FrameNode * frameNode,bool disableSwipe)566 void SwiperModelNG::SetDisableSwipe(FrameNode* frameNode, bool disableSwipe)
567 {
568 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisableSwipe, disableSwipe, frameNode);
569 }
570
SetItemSpace(FrameNode * frameNode,const Dimension & itemSpace)571 void SwiperModelNG::SetItemSpace(FrameNode* frameNode, const Dimension& itemSpace)
572 {
573 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, ItemSpace, itemSpace, frameNode);
574 }
575
SetDisplayMode(FrameNode * frameNode,SwiperDisplayMode displayMode)576 void SwiperModelNG::SetDisplayMode(FrameNode* frameNode, SwiperDisplayMode displayMode)
577 {
578 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayMode, displayMode, frameNode);
579 }
580
SetEdgeEffect(FrameNode * frameNode,EdgeEffect edgeEffect)581 void SwiperModelNG::SetEdgeEffect(FrameNode* frameNode, EdgeEffect edgeEffect)
582 {
583 ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, EdgeEffect, edgeEffect, frameNode);
584 }
585
SetMinSize(FrameNode * frameNode,const Dimension & minSize)586 void SwiperModelNG::SetMinSize(FrameNode* frameNode, const Dimension& minSize)
587 {
588 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, MinSize, minSize, frameNode);
589 }
590
SetDisplayCount(FrameNode * frameNode,int32_t displayCount)591 void SwiperModelNG::SetDisplayCount(FrameNode* frameNode, int32_t displayCount)
592 {
593 if (displayCount <= 0) {
594 return;
595 }
596
597 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayCount, displayCount, frameNode);
598 }
599
ResetDisplayCount(FrameNode * frameNode)600 void SwiperModelNG::ResetDisplayCount(FrameNode* frameNode)
601 {
602 ACE_RESET_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayCount, frameNode);
603 }
604
SetCurve(FrameNode * frameNode,const RefPtr<Curve> & curve)605 void SwiperModelNG::SetCurve(FrameNode* frameNode, const RefPtr<Curve>& curve)
606 {
607 ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, Curve, curve, frameNode);
608 }
609
SetArrowStyle(FrameNode * frameNode,const SwiperArrowParameters & swiperArrowParameters)610 void SwiperModelNG::SetArrowStyle(FrameNode* frameNode, const SwiperArrowParameters& swiperArrowParameters)
611 {
612 if (swiperArrowParameters.isShowBackground.has_value()) {
613 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
614 SwiperLayoutProperty, IsShowBackground, swiperArrowParameters.isShowBackground.value(), frameNode);
615 }
616 if (swiperArrowParameters.backgroundSize.has_value()) {
617 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
618 SwiperLayoutProperty, BackgroundSize, swiperArrowParameters.backgroundSize.value(), frameNode);
619 }
620 if (swiperArrowParameters.backgroundColor.has_value()) {
621 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
622 SwiperLayoutProperty, BackgroundColor, swiperArrowParameters.backgroundColor.value(), frameNode);
623 }
624 if (swiperArrowParameters.arrowSize.has_value()) {
625 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
626 SwiperLayoutProperty, ArrowSize, swiperArrowParameters.arrowSize.value(), frameNode);
627 }
628 if (swiperArrowParameters.arrowColor.has_value()) {
629 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
630 SwiperLayoutProperty, ArrowColor, swiperArrowParameters.arrowColor.value(), frameNode);
631 }
632 if (swiperArrowParameters.isSidebarMiddle.has_value()) {
633 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
634 SwiperLayoutProperty, IsSidebarMiddle, swiperArrowParameters.isSidebarMiddle.value(), frameNode);
635 }
636 }
637
SetDisplayArrow(FrameNode * frameNode,bool displayArrow)638 void SwiperModelNG::SetDisplayArrow(FrameNode* frameNode, bool displayArrow)
639 {
640 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, DisplayArrow, displayArrow, frameNode);
641 }
642
SetHoverShow(FrameNode * frameNode,bool hoverShow)643 void SwiperModelNG::SetHoverShow(FrameNode* frameNode, bool hoverShow)
644 {
645 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, HoverShow, hoverShow, frameNode);
646 }
647
SetShowIndicator(FrameNode * frameNode,bool showIndicator)648 void SwiperModelNG::SetShowIndicator(FrameNode* frameNode, bool showIndicator)
649 {
650 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, ShowIndicator, showIndicator, frameNode);
651 }
652
SetIndicatorIsBoolean(FrameNode * frameNode,bool isBoolean)653 void SwiperModelNG::SetIndicatorIsBoolean(FrameNode* frameNode, bool isBoolean)
654 {
655 CHECK_NULL_VOID(frameNode);
656 auto pattern = frameNode->GetPattern<SwiperPattern>();
657 CHECK_NULL_VOID(pattern);
658 pattern->SetIndicatorIsBoolean(isBoolean);
659 }
660
SetDigitIndicatorStyle(FrameNode * frameNode,const SwiperDigitalParameters & swiperDigitalParameters)661 void SwiperModelNG::SetDigitIndicatorStyle(FrameNode* frameNode, const SwiperDigitalParameters& swiperDigitalParameters)
662 {
663 CHECK_NULL_VOID(frameNode);
664 auto pattern = frameNode->GetPattern<SwiperPattern>();
665 CHECK_NULL_VOID(pattern);
666 pattern->SetSwiperDigitalParameters(swiperDigitalParameters);
667 }
668
SetIndicatorType(FrameNode * frameNode,SwiperIndicatorType indicatorType)669 void SwiperModelNG::SetIndicatorType(FrameNode* frameNode, SwiperIndicatorType indicatorType)
670 {
671 SwiperIndicatorUtils::SetSwiperIndicatorType(indicatorType);
672 ACE_UPDATE_NODE_LAYOUT_PROPERTY(SwiperLayoutProperty, IndicatorType, indicatorType, frameNode);
673 }
674
SetIsIndicatorCustomSize(FrameNode * frameNode,bool isCustomSize)675 void SwiperModelNG::SetIsIndicatorCustomSize(FrameNode* frameNode, bool isCustomSize)
676 {
677 CHECK_NULL_VOID(frameNode);
678 auto pattern = frameNode->GetPattern<SwiperPattern>();
679 CHECK_NULL_VOID(pattern);
680 pattern->SetIsIndicatorCustomSize(isCustomSize);
681 }
682
SetDotIndicatorStyle(FrameNode * frameNode,const SwiperParameters & swiperParameters)683 void SwiperModelNG::SetDotIndicatorStyle(FrameNode* frameNode, const SwiperParameters& swiperParameters)
684 {
685 CHECK_NULL_VOID(frameNode);
686 auto pattern = frameNode->GetPattern<SwiperPattern>();
687 CHECK_NULL_VOID(pattern);
688 pattern->SetSwiperParameters(swiperParameters);
689 }
690
SetBindIndicator(FrameNode * frameNode,bool bind)691 void SwiperModelNG::SetBindIndicator(FrameNode* frameNode, bool bind)
692 {
693 CHECK_NULL_VOID(frameNode);
694 auto pattern = frameNode->GetPattern<SwiperPattern>();
695 CHECK_NULL_VOID(pattern);
696 pattern->SetBindIndicator(bind);
697 }
698
SetEnabled(FrameNode * frameNode,bool enabled)699 void SwiperModelNG::SetEnabled(FrameNode* frameNode, bool enabled)
700 {
701 ACE_UPDATE_NODE_PAINT_PROPERTY(SwiperPaintProperty, Enabled, enabled, frameNode);
702 }
703
SetOnChange(FrameNode * frameNode,std::function<void (const BaseEventInfo * info)> && onChange)704 void SwiperModelNG::SetOnChange(FrameNode* frameNode, std::function<void(const BaseEventInfo* info)>&& onChange)
705 {
706 CHECK_NULL_VOID(frameNode);
707 auto pattern = frameNode->GetPattern<SwiperPattern>();
708 CHECK_NULL_VOID(pattern);
709 pattern->UpdateChangeEvent([event = std::move(onChange)](int32_t index) {
710 SwiperChangeEvent eventInfo(index);
711 event(&eventInfo);
712 });
713 }
714
SetOnAnimationStart(FrameNode * frameNode,AnimationStartEvent && onAnimationStart)715 void SwiperModelNG::SetOnAnimationStart(FrameNode* frameNode, AnimationStartEvent&& onAnimationStart)
716 {
717 CHECK_NULL_VOID(frameNode);
718 auto pattern = frameNode->GetPattern<SwiperPattern>();
719 CHECK_NULL_VOID(pattern);
720 pattern->UpdateAnimationStartEvent([event = std::move(onAnimationStart)](int32_t index, int32_t targetIndex,
721 const AnimationCallbackInfo& info) { event(index, targetIndex, info); });
722 }
723
SetOnAnimationEnd(FrameNode * frameNode,AnimationEndEvent && onAnimationEnd)724 void SwiperModelNG::SetOnAnimationEnd(FrameNode* frameNode, AnimationEndEvent&& onAnimationEnd)
725 {
726 CHECK_NULL_VOID(frameNode);
727 auto pattern = frameNode->GetPattern<SwiperPattern>();
728 CHECK_NULL_VOID(pattern);
729 pattern->UpdateAnimationEndEvent(
730 [event = std::move(onAnimationEnd)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
731 }
732
SetOnGestureSwipe(FrameNode * frameNode,GestureSwipeEvent && onGestureSwipe)733 void SwiperModelNG::SetOnGestureSwipe(FrameNode* frameNode, GestureSwipeEvent&& onGestureSwipe)
734 {
735 CHECK_NULL_VOID(frameNode);
736 auto eventHub = frameNode->GetEventHub<SwiperEventHub>();
737 CHECK_NULL_VOID(eventHub);
738 eventHub->SetGestureSwipeEvent(
739 [event = std::move(onGestureSwipe)](int32_t index, const AnimationCallbackInfo& info) { event(index, info); });
740 }
741
GetLoop(FrameNode * frameNode)742 bool SwiperModelNG::GetLoop(FrameNode* frameNode)
743 {
744 bool value = true;
745 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, Loop, value, frameNode, value);
746 return value;
747 }
748
GetAutoPlay(FrameNode * frameNode)749 bool SwiperModelNG::GetAutoPlay(FrameNode* frameNode)
750 {
751 bool value = false;
752 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, AutoPlay, value, frameNode, value);
753 return value;
754 }
755
GetIndex(FrameNode * frameNode)756 int SwiperModelNG::GetIndex(FrameNode* frameNode)
757 {
758 int value = 0;
759 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, Index, value, frameNode, value);
760 return value;
761 }
762
GetDirection(FrameNode * frameNode)763 Axis SwiperModelNG::GetDirection(FrameNode* frameNode)
764 {
765 Axis value = Axis::HORIZONTAL;
766 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, Direction, value, frameNode, value);
767 return value;
768 }
769
GetDuration(FrameNode * frameNode)770 uint32_t SwiperModelNG::GetDuration(FrameNode* frameNode)
771 {
772 uint32_t value = SwiperAnimationStyle::DEFAULT_DURATION;
773 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, Duration, value, frameNode, value);
774 return value;
775 }
776
GetDisplayCount(FrameNode * frameNode)777 int SwiperModelNG::GetDisplayCount(FrameNode* frameNode)
778 {
779 int value = 1;
780 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, DisplayCount, value, frameNode, value);
781 return value;
782 }
783
GetAutoPlayInterval(FrameNode * frameNode)784 int SwiperModelNG::GetAutoPlayInterval(FrameNode* frameNode)
785 {
786 int value = SwiperAnimationStyle::DEFAULT_INTERVAL;
787 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, AutoPlayInterval, value, frameNode, value);
788 return value;
789 }
790
GetCurve(FrameNode * frameNode)791 RefPtr<Curve> SwiperModelNG::GetCurve(FrameNode* frameNode)
792 {
793 RefPtr<Curve> value = OHOS::Ace::Curves::LINEAR;
794 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, Curve, value, frameNode, value);
795 return value;
796 }
797
GetDisableSwipe(FrameNode * frameNode)798 bool SwiperModelNG::GetDisableSwipe(FrameNode* frameNode)
799 {
800 bool value = false;
801 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, DisableSwipe, value, frameNode, value);
802 return value;
803 }
804
GetItemSpace(FrameNode * frameNode)805 float SwiperModelNG::GetItemSpace(FrameNode* frameNode)
806 {
807 Dimension value(0, DimensionUnit::VP);
808 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, ItemSpace, value, frameNode, value);
809 return value.Value();
810 }
811
GetShowIndicator(FrameNode * frameNode)812 bool SwiperModelNG::GetShowIndicator(FrameNode* frameNode)
813 {
814 bool value = true;
815 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, ShowIndicator, value, frameNode, value);
816 return value;
817 }
818
GetShowDisplayArrow(FrameNode * frameNode)819 int SwiperModelNG::GetShowDisplayArrow(FrameNode* frameNode)
820 {
821 bool show = false;
822 bool hoverShow = false;
823 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, DisplayArrow, show, frameNode, show);
824 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, HoverShow, hoverShow, frameNode, hoverShow);
825 int ArrowType = 0;
826 if (show && hoverShow) {
827 return ArrowType = static_cast<int>(SwiperArrow::ARKUI_SWIPER_ARROW_SHOW_ON_HOVER);
828 }
829 if (show) {
830 ArrowType = static_cast<int>(SwiperArrow::ARKUI_SWIPER_ARROW_SHOW);
831 } else {
832 ArrowType = static_cast<int>(SwiperArrow::ARKUI_SWIPER_ARROW_HIDE);
833 }
834 return ArrowType;
835 }
836
GetEffectMode(FrameNode * frameNode)837 EdgeEffect SwiperModelNG::GetEffectMode(FrameNode* frameNode)
838 {
839 EdgeEffect mode = EdgeEffect::SPRING;
840 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(SwiperPaintProperty, EdgeEffect, mode, frameNode, mode);
841 return mode;
842 }
843
GetNestedScroll(FrameNode * frameNode)844 int32_t SwiperModelNG::GetNestedScroll(FrameNode* frameNode)
845 {
846 CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
847 auto pattern = frameNode->GetPattern<SwiperPattern>();
848 CHECK_NULL_RETURN(pattern, ERROR_CODE_PARAM_INVALID);
849 return static_cast<int>(pattern->GetNestedScroll().forward);
850 }
851
RealTotalCount(FrameNode * frameNode)852 int32_t SwiperModelNG::RealTotalCount(FrameNode* frameNode)
853 {
854 CHECK_NULL_RETURN(frameNode, 0);
855 auto pattern = frameNode->GetPattern<SwiperPattern>();
856 CHECK_NULL_RETURN(pattern, 0);
857 return pattern->RealTotalCount();
858 }
859
SetSwiperToIndex(FrameNode * frameNode,int32_t index,bool useAnimation)860 void SwiperModelNG::SetSwiperToIndex(FrameNode* frameNode, int32_t index, bool useAnimation)
861 {
862 CHECK_NULL_VOID(frameNode);
863 auto pattern = frameNode->GetPattern<SwiperPattern>();
864 CHECK_NULL_VOID(pattern);
865 pattern->ChangeIndex(index, useAnimation);
866 }
867
SetSwiperToIndex(FrameNode * frameNode,int32_t index,SwiperAnimationMode animationMode)868 void SwiperModelNG::SetSwiperToIndex(FrameNode* frameNode, int32_t index, SwiperAnimationMode animationMode)
869 {
870 CHECK_NULL_VOID(frameNode);
871 auto pattern = frameNode->GetPattern<SwiperPattern>();
872 CHECK_NULL_VOID(pattern);
873 pattern->ChangeIndex(index, animationMode);
874 }
875
GetPreviousMargin(FrameNode * frameNode,int32_t unit,SwiperMarginOptions * options)876 void SwiperModelNG::GetPreviousMargin(FrameNode* frameNode, int32_t unit, SwiperMarginOptions* options)
877 {
878 Dimension prevMargin(0.0f, static_cast<DimensionUnit>(unit));
879 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
880 SwiperLayoutProperty, PrevMargin, prevMargin, frameNode, prevMargin);
881 options->margin = prevMargin.GetNativeValue(static_cast<DimensionUnit>(unit));
882 auto pattern = frameNode->GetPattern<SwiperPattern>();
883 CHECK_NULL_VOID(pattern);
884 options->ignoreBlank = pattern->GetPrevMarginIgnoreBlank();
885 }
886
GetNextMargin(FrameNode * frameNode,int32_t unit,SwiperMarginOptions * options)887 void SwiperModelNG::GetNextMargin(FrameNode* frameNode, int32_t unit, SwiperMarginOptions* options)
888 {
889 Dimension nextMargin(0.0f, static_cast<DimensionUnit>(unit));
890 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
891 SwiperLayoutProperty, NextMargin, nextMargin, frameNode, nextMargin);
892 options->margin = nextMargin.GetNativeValue(static_cast<DimensionUnit>(unit));
893 auto pattern = frameNode->GetPattern<SwiperPattern>();
894 CHECK_NULL_VOID(pattern);
895 options->ignoreBlank = pattern->GetNextMarginIgnoreBlank();
896 }
897
GetDotIndicator(FrameNode * frameNode)898 std::shared_ptr<SwiperParameters> SwiperModelNG::GetDotIndicator(FrameNode* frameNode)
899 {
900 CHECK_NULL_RETURN(frameNode, nullptr);
901 auto pattern = frameNode->GetPattern<SwiperPattern>();
902 CHECK_NULL_RETURN(pattern, nullptr);
903 return pattern->GetSwiperParameters();
904 }
905
GetIndicatorType(FrameNode * frameNode)906 int32_t SwiperModelNG::GetIndicatorType(FrameNode* frameNode)
907 {
908 CHECK_NULL_RETURN(frameNode, 0);
909 SwiperIndicatorType value = SwiperIndicatorType::DOT;
910 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(SwiperLayoutProperty, IndicatorType,
911 value, frameNode, value);
912 return static_cast<int32_t>(value);
913 }
914
GetOrCreateSwiperController(FrameNode * frameNode)915 RefPtr<SwiperController> SwiperModelNG::GetOrCreateSwiperController(FrameNode* frameNode)
916 {
917 CHECK_NULL_RETURN(frameNode, nullptr);
918 auto pattern = frameNode->GetPattern<SwiperPattern>();
919 CHECK_NULL_RETURN(pattern, nullptr);
920 if (!pattern->GetSwiperController()) {
921 auto controller = AceType::MakeRefPtr<SwiperController>();
922 pattern->SetSwiperController(controller);
923 }
924 return pattern->GetSwiperController();
925 }
926
GetSwiperController(FrameNode * frameNode)927 RefPtr<SwiperController> SwiperModelNG::GetSwiperController(FrameNode* frameNode)
928 {
929 auto pattern = frameNode->GetPattern<SwiperPattern>();
930 CHECK_NULL_RETURN(pattern, nullptr);
931 return pattern->GetSwiperController();
932 }
933
GetIndicatorInteractive(FrameNode * frameNode)934 bool SwiperModelNG::GetIndicatorInteractive(FrameNode* frameNode)
935 {
936 CHECK_NULL_RETURN(frameNode, false);
937 auto pattern = frameNode->GetPattern<SwiperPattern>();
938 CHECK_NULL_RETURN(pattern, false);
939 return pattern->IsIndicatorInteractive();
940 }
941 } // namespace OHOS::Ace::NG
942