• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/slider/slider_model_ng.h"
17 
18 #include "core/components/slider/slider_theme.h"
19 #include "core/components_ng/base/view_stack_processor.h"
20 #include "core/components_ng/pattern/slider/slider_layout_property.h"
21 #include "core/components_ng/pattern/slider/slider_paint_property.h"
22 #include "core/components_ng/pattern/slider/slider_pattern.h"
23 #include "core/components_v2/inspector/inspector_constants.h"
24 #include "core/pipeline/pipeline_base.h"
25 #include "core/pipeline_ng/pipeline_context.h"
26 
27 namespace OHOS::Ace::NG {
Create(float value,float step,float min,float max)28 void SliderModelNG::Create(float value, float step, float min, float max)
29 {
30     auto* stack = ViewStackProcessor::GetInstance();
31     auto nodeId = stack->ClaimNodeId();
32     auto frameNode = FrameNode::GetOrCreateFrameNode(
33         V2::SLIDER_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<SliderPattern>(); });
34     stack->Push(frameNode);
35     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, Step, step);
36     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, Min, min);
37     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, Max, max);
38     SetSliderValue(value);
39 }
SetSliderValue(float value)40 void SliderModelNG::SetSliderValue(float value)
41 {
42     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
43     CHECK_NULL_VOID(frameNode);
44     auto pattern = frameNode->GetPattern<SliderPattern>();
45     CHECK_NULL_VOID(pattern);
46     pattern->UpdateValue(value);
47 }
SetSliderMode(const SliderMode & value)48 void SliderModelNG::SetSliderMode(const SliderMode& value)
49 {
50     ACE_UPDATE_LAYOUT_PROPERTY(SliderLayoutProperty, SliderMode, value);
51     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, SliderMode, value);
52 }
SetDirection(Axis value)53 void SliderModelNG::SetDirection(Axis value)
54 {
55     ACE_UPDATE_LAYOUT_PROPERTY(SliderLayoutProperty, Direction, value);
56     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, Direction, value);
57 }
SetReverse(bool value)58 void SliderModelNG::SetReverse(bool value)
59 {
60     ACE_UPDATE_LAYOUT_PROPERTY(SliderLayoutProperty, Reverse, value);
61     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, Reverse, value);
62 }
SetBlockColor(const Color & value)63 void SliderModelNG::SetBlockColor(const Color& value)
64 {
65     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockColor, value);
66 }
SetTrackBackgroundColor(const Color & value)67 void SliderModelNG::SetTrackBackgroundColor(const Color& value)
68 {
69     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, TrackBackgroundColor, value);
70 }
SetSelectColor(const Color & value)71 void SliderModelNG::SetSelectColor(const Color& value)
72 {
73     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, SelectColor, value);
74 }
SetMinLabel(float value)75 void SliderModelNG::SetMinLabel(float value)
76 {
77     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, Min, value);
78 }
SetMaxLabel(float value)79 void SliderModelNG::SetMaxLabel(float value)
80 {
81     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, Max, value);
82 }
SetShowSteps(bool value)83 void SliderModelNG::SetShowSteps(bool value)
84 {
85     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, ShowSteps, value);
86 }
SetShowTips(bool value,const std::optional<std::string> & content)87 void SliderModelNG::SetShowTips(bool value, const std::optional<std::string>& content)
88 {
89     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, ShowTips, value);
90     if (content.has_value()) {
91         ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, CustomContent, content.value());
92     } else {
93         ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, CustomContent, PROPERTY_UPDATE_RENDER);
94     }
95 }
SetThickness(const Dimension & value)96 void SliderModelNG::SetThickness(const Dimension& value)
97 {
98     if (value.IsNonPositive()) {
99         auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
100         CHECK_NULL_VOID(frameNode);
101         auto layoutProperty = frameNode->GetLayoutProperty<SliderLayoutProperty>();
102         CHECK_NULL_VOID(layoutProperty);
103         auto pipeline = PipelineBase::GetCurrentContext();
104         CHECK_NULL_VOID(pipeline);
105         auto theme = pipeline->GetTheme<SliderTheme>();
106         CHECK_NULL_VOID(theme);
107         auto sliderMode = layoutProperty->GetSliderModeValue(SliderModel::SliderMode::OUTSET);
108         auto themeTrackThickness = sliderMode == SliderModel::SliderMode::OUTSET ? theme->GetOutsetTrackThickness()
109                                                                                  : theme->GetInsetTrackThickness();
110         ACE_UPDATE_LAYOUT_PROPERTY(SliderLayoutProperty, Thickness, themeTrackThickness);
111     } else {
112         ACE_UPDATE_LAYOUT_PROPERTY(SliderLayoutProperty, Thickness, value);
113     }
114 }
SetBlockBorderColor(const Color & value)115 void SliderModelNG::SetBlockBorderColor(const Color& value)
116 {
117     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockBorderColor, value);
118 }
SetBlockBorderWidth(const Dimension & value)119 void SliderModelNG::SetBlockBorderWidth(const Dimension& value)
120 {
121     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockBorderWidth, value);
122 }
SetStepColor(const Color & value)123 void SliderModelNG::SetStepColor(const Color& value)
124 {
125     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, StepColor, value);
126 }
SetTrackBorderRadius(const Dimension & value)127 void SliderModelNG::SetTrackBorderRadius(const Dimension& value)
128 {
129     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, TrackBorderRadius, value);
130 }
SetBlockSize(const Dimension & width,const Dimension & height)131 void SliderModelNG::SetBlockSize(const Dimension& width, const Dimension& height)
132 {
133     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
134     CHECK_NULL_VOID(frameNode);
135     auto layoutProperty = frameNode->GetLayoutProperty<SliderLayoutProperty>();
136     CHECK_NULL_VOID(layoutProperty);
137     auto pipeline = PipelineBase::GetCurrentContext();
138     CHECK_NULL_VOID(pipeline);
139     SizeT<Dimension> blockSize;
140     auto theme = pipeline->GetTheme<SliderTheme>();
141     if (theme != nullptr) {
142         auto mode = layoutProperty->GetSliderModeValue(SliderMode::OUTSET);
143         auto themeBlockSize = mode == SliderMode::OUTSET ? theme->GetOutsetBlockSize() : theme->GetInsetBlockSize();
144         blockSize = layoutProperty->GetBlockSizeValue(SizeT<Dimension>(themeBlockSize, themeBlockSize));
145     }
146 
147     if (LessOrEqual(width.Value(), 0.0) || LessOrEqual(height.Value(), 0.0)) {
148         ResetBlockSize();
149     } else {
150         blockSize.SetWidth(width);
151         blockSize.SetHeight(height);
152         ACE_UPDATE_LAYOUT_PROPERTY(SliderLayoutProperty, BlockSize, blockSize);
153     }
154 }
SetBlockType(BlockStyleType value)155 void SliderModelNG::SetBlockType(BlockStyleType value)
156 {
157     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockType, value);
158 }
SetBlockImage(const std::string & value)159 void SliderModelNG::SetBlockImage(const std::string& value)
160 {
161     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockImage, value);
162 }
SetBlockShape(const RefPtr<BasicShape> & value)163 void SliderModelNG::SetBlockShape(const RefPtr<BasicShape>& value)
164 {
165     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockShape, value);
166 }
SetStepSize(const Dimension & value)167 void SliderModelNG::SetStepSize(const Dimension& value)
168 {
169     ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, StepSize, value);
170 }
SetOnChange(SliderOnChangeEvent && eventOnChange)171 void SliderModelNG::SetOnChange(SliderOnChangeEvent&& eventOnChange)
172 {
173     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
174     CHECK_NULL_VOID(frameNode);
175     auto eventHub = frameNode->GetEventHub<SliderEventHub>();
176     CHECK_NULL_VOID(eventHub);
177     eventHub->SetOnChange(std::move(eventOnChange));
178 }
179 
SetOnChangeEvent(SliderOnValueChangeEvent && onChangeEvent)180 void SliderModelNG::SetOnChangeEvent(SliderOnValueChangeEvent&& onChangeEvent)
181 {
182     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
183     CHECK_NULL_VOID(frameNode);
184     auto eventHub = frameNode->GetEventHub<SliderEventHub>();
185     CHECK_NULL_VOID(eventHub);
186     eventHub->SetOnChangeEvent(std::move(onChangeEvent));
187 }
188 
ResetBlockBorderColor()189 void SliderModelNG::ResetBlockBorderColor()
190 {
191     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, BlockBorderColor, PROPERTY_UPDATE_RENDER);
192 }
193 
ResetBlockBorderWidth()194 void SliderModelNG::ResetBlockBorderWidth()
195 {
196     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, BlockBorderWidth, PROPERTY_UPDATE_RENDER);
197 }
198 
ResetStepColor()199 void SliderModelNG::ResetStepColor()
200 {
201     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, StepColor, PROPERTY_UPDATE_RENDER);
202 }
203 
ResetTrackBorderRadius()204 void SliderModelNG::ResetTrackBorderRadius()
205 {
206     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, TrackBorderRadius, PROPERTY_UPDATE_RENDER);
207 }
208 
ResetBlockSize()209 void SliderModelNG::ResetBlockSize()
210 {
211     ACE_RESET_LAYOUT_PROPERTY_WITH_FLAG(SliderLayoutProperty, BlockSize, PROPERTY_UPDATE_MEASURE);
212 }
213 
ResetBlockType()214 void SliderModelNG::ResetBlockType()
215 {
216     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, BlockType, PROPERTY_UPDATE_RENDER);
217 }
218 
ResetBlockImage()219 void SliderModelNG::ResetBlockImage()
220 {
221     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, BlockImage, PROPERTY_UPDATE_RENDER);
222 }
223 
ResetBlockShape()224 void SliderModelNG::ResetBlockShape()
225 {
226     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, BlockShape, PROPERTY_UPDATE_RENDER);
227 }
228 
ResetStepSize()229 void SliderModelNG::ResetStepSize()
230 {
231     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(SliderPaintProperty, StepSize, PROPERTY_UPDATE_RENDER);
232 }
233 } // namespace OHOS::Ace::NG
234