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
16 #include "core/components_ng/pattern/scrollable/scrollable_model_ng.h"
17
18 #include "core/components_ng/base/view_stack_processor.h"
19 #include "core/components_ng/pattern/scrollable/scrollable_event_hub.h"
20 #include "core/components_ng/pattern/scrollable/scrollable_pattern.h"
21
22 namespace OHOS::Ace::NG {
SetEdgeEffect(EdgeEffect edgeEffect,bool alwaysEnabled)23 void ScrollableModelNG::SetEdgeEffect(EdgeEffect edgeEffect, bool alwaysEnabled)
24 {
25 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
26 CHECK_NULL_VOID(frameNode);
27 auto pattern = frameNode->GetPattern<ScrollablePattern>();
28 CHECK_NULL_VOID(pattern);
29 pattern->SetEdgeEffect(edgeEffect, alwaysEnabled);
30 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF);
31 }
32
SetScrollBarMode(DisplayMode value)33 void ScrollableModelNG::SetScrollBarMode(DisplayMode value)
34 {
35 ACE_UPDATE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarMode, value);
36 }
37
SetScrollBarColor(const std::string & value)38 void ScrollableModelNG::SetScrollBarColor(const std::string& value)
39 {
40 ACE_UPDATE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarColor, Color::FromString(value));
41 }
42
SetScrollBarWidth(const std::string & value)43 void ScrollableModelNG::SetScrollBarWidth(const std::string& value)
44 {
45 ACE_UPDATE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarWidth, StringUtils::StringToDimensionWithUnit(value));
46 }
47
SetOnScroll(OnScrollEvent && onScroll)48 void ScrollableModelNG::SetOnScroll(OnScrollEvent&& onScroll)
49 {
50 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
51 CHECK_NULL_VOID(frameNode);
52 auto eventHub = frameNode->GetEventHub<ScrollableEventHub>();
53 CHECK_NULL_VOID(eventHub);
54 eventHub->SetOnScroll(std::move(onScroll));
55 }
56
SetOnScrollStart(OnScrollStartEvent && onScrollStart)57 void ScrollableModelNG::SetOnScrollStart(OnScrollStartEvent&& onScrollStart)
58 {
59 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
60 CHECK_NULL_VOID(frameNode);
61 auto eventHub = frameNode->GetEventHub<ScrollableEventHub>();
62 CHECK_NULL_VOID(eventHub);
63 eventHub->SetOnScrollStart(std::move(onScrollStart));
64 }
65
SetOnScrollStop(OnScrollStopEvent && onScrollStop)66 void ScrollableModelNG::SetOnScrollStop(OnScrollStopEvent&& onScrollStop)
67 {
68 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
69 CHECK_NULL_VOID(frameNode);
70 auto eventHub = frameNode->GetEventHub<ScrollableEventHub>();
71 CHECK_NULL_VOID(eventHub);
72 eventHub->SetOnScrollStop(std::move(onScrollStop));
73 }
74
SetOnReachStart(OnReachEvent && onReachStart)75 void ScrollableModelNG::SetOnReachStart(OnReachEvent&& onReachStart)
76 {
77 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
78 CHECK_NULL_VOID(frameNode);
79 auto eventHub = frameNode->GetEventHub<ScrollableEventHub>();
80 CHECK_NULL_VOID(eventHub);
81 eventHub->SetOnReachStart(std::move(onReachStart));
82 }
83
SetOnReachEnd(OnReachEvent && onReachEnd)84 void ScrollableModelNG::SetOnReachEnd(OnReachEvent&& onReachEnd)
85 {
86 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
87 CHECK_NULL_VOID(frameNode);
88 auto eventHub = frameNode->GetEventHub<ScrollableEventHub>();
89 CHECK_NULL_VOID(eventHub);
90 eventHub->SetOnReachEnd(std::move(onReachEnd));
91 }
92
SetOnScrollFrameBegin(OnScrollFrameBeginEvent && ScrollFrameBegin)93 void ScrollableModelNG::SetOnScrollFrameBegin(OnScrollFrameBeginEvent&& ScrollFrameBegin)
94 {
95 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
96 CHECK_NULL_VOID(frameNode);
97 auto eventHub = frameNode->GetEventHub<ScrollableEventHub>();
98 CHECK_NULL_VOID(eventHub);
99 eventHub->SetOnScrollFrameBegin(std::move(ScrollFrameBegin));
100 }
101
SetEdgeEffect(FrameNode * frameNode,EdgeEffect edgeEffect,bool alwaysEnabled)102 void ScrollableModelNG::SetEdgeEffect(FrameNode* frameNode, EdgeEffect edgeEffect, bool alwaysEnabled)
103 {
104 CHECK_NULL_VOID(frameNode);
105 auto pattern = frameNode->GetPattern<ScrollablePattern>();
106 CHECK_NULL_VOID(pattern);
107 pattern->SetEdgeEffect(edgeEffect, alwaysEnabled);
108 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF);
109 }
110
SetScrollBarMode(FrameNode * frameNode,int32_t displayNumber)111 void ScrollableModelNG::SetScrollBarMode(FrameNode* frameNode, int32_t displayNumber)
112 {
113 ACE_UPDATE_NODE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarMode,
114 static_cast<DisplayMode>(displayNumber), frameNode);
115 }
116
SetScrollBarWidth(FrameNode * frameNode,const std::string & value)117 void ScrollableModelNG::SetScrollBarWidth(FrameNode* frameNode, const std::string& value)
118 {
119 ACE_UPDATE_NODE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarWidth,
120 StringUtils::StringToDimensionWithUnit(value), frameNode);
121 }
122
SetScrollBarColor(FrameNode * frameNode,const std::string & value)123 void ScrollableModelNG::SetScrollBarColor(FrameNode* frameNode, const std::string& value)
124 {
125 ACE_UPDATE_NODE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarColor, Color::FromString(value), frameNode);
126 }
127
SetMaxFlingSpeed(double max)128 void ScrollableModelNG::SetMaxFlingSpeed(double max)
129 {
130 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
131 CHECK_NULL_VOID(frameNode);
132 auto pattern = frameNode->GetPattern<ScrollablePattern>();
133 CHECK_NULL_VOID(pattern);
134 pattern->SetMaxFlingVelocity(max);
135 }
136 } // namespace OHOS::Ace::NG
137