• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_THEME_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_THEME_H
18 
19 #include "base/geometry/dimension.h"
20 #include "core/components/common/properties/color.h"
21 #include "core/components/theme/theme.h"
22 #include "core/components/theme/theme_constants.h"
23 #include "core/components/theme/theme_constants_defines.h"
24 
25 namespace OHOS::Ace {
26 
27 /**
28  * ProgressTheme defines color and styles of ProgressComponent. ProgressTheme should be built
29  * using ProgressTheme::Builder.
30  */
31 class ProgressTheme : public virtual Theme {
32     DECLARE_ACE_TYPE(ProgressTheme, Theme);
33 
34 public:
35     class Builder {
36     public:
37         Builder() = default;
38         ~Builder() = default;
39 
Build(const RefPtr<ThemeConstants> & themeConstants)40         RefPtr<ProgressTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const
41         {
42             RefPtr<ProgressTheme> theme = AceType::Claim(new ProgressTheme());
43             if (!themeConstants) {
44                 return theme;
45             }
46             theme->trackThickness_ = themeConstants->GetDimension(THEME_PROGRERSS_THICKNESS);
47             theme->trackWidth_ = themeConstants->GetDimension(THEME_PROGRESS_DEFAULT_WIDTH);
48             theme->ringThickness_ = themeConstants->GetDimension(THEME_PROGRESS_RING_THICKNESS);
49             theme->ringDiameter_ = themeConstants->GetDimension(THEME_PROGRESS_DEFAULT_DIAMETER);
50             theme->trackBgColor_ = themeConstants->GetColor(THEME_PROGRESS_BG_COLOR);
51             theme->trackSelectedColor_ = themeConstants->GetColor(THEME_PROGRESS_COLOR);
52             theme->trackCachedColor_ = themeConstants->GetColor(THEME_PROGRESS_CACHED_COLOR);
53             theme->loadingColor_ = themeConstants->GetColor(THEME_LOADING_COLOR);
54             theme->loadingDiameter_ = themeConstants->GetDimension(THEME_PROGRESS_DEFAULT_DIAMETER);
55             theme->scaleNumber_ = themeConstants->GetInt(THEME_PROGRESS_SCALE_NUMBER);
56             theme->scaleWidth_ = themeConstants->GetDimension(THEME_PROGRESS_SCALE_WIDTH);
57             theme->scaleLength_ = themeConstants->GetDimension(THEME_PROGRESS_STROKE_WIDTH);
58             theme->scaleRingDiameter_ = themeConstants->GetDimension(THEME_SCALE_PROGRESS_DEFAULT_DIAMETER);
59 
60             // For moon progress
61             theme->moonDiameter_ = themeConstants->GetDimension(THEME_MOON_PROGRESS_DIAMETER);
62             theme->moonTrackBackgroundColor_ = themeConstants->GetColor(THEME_MOON_BACKGROUDN_COLOR);
63             theme->moonFrontColor_ = themeConstants->GetColor(THEME_MOON_FRONT_COLOR);
64 
65             // For loading progress in cycle type.
66             theme->progressColor_ = themeConstants->GetColor(THEME_LOADING_PROGRESS_COLOR);
67             theme->moveRatio_ = themeConstants->GetDouble(THEME_LOADING_PROGRESS_MOVE_RATIO);
68             theme->ringRadius_ = themeConstants->GetDimension(THEME_LOADING_PROGRESS_RING_RADIUS);
69             theme->orbitRadius_ = themeConstants->GetDimension(THEME_LOADING_PROGRESS_ORBIT_RADIUS);
70             theme->cometTailLen_ = themeConstants->GetDouble(THEME_LOADING_PROGRESS_COMET_TAIL_LEN);
71 
72             theme->bubbleRadius_ = themeConstants->GetDimension(THEME_BUBBLE_PROGRESS_RADIUS);
73             theme->bubbleDiameter_ = themeConstants->GetDimension(THEME_BUBBLE_PROGRESS_DIAMETER);
74             // Read style from system.
75             ParsePattern(themeConstants->GetThemeStyle(), theme);
76             return theme;
77         }
78 
ParsePattern(const RefPtr<ThemeStyle> & themeStyle,const RefPtr<ProgressTheme> & theme)79         void ParsePattern(const RefPtr<ThemeStyle>& themeStyle, const RefPtr<ProgressTheme>& theme) const
80         {
81             if (!themeStyle) {
82                 LOGI("progress theme style is null");
83                 return;
84             }
85             auto pattern = themeStyle->GetAttr<RefPtr<ThemeStyle>>("progress_pattern", nullptr);
86             if (!pattern) {
87                 LOGE("Pattern of progress is null, please check!");
88                 return;
89             }
90             const double defaultCachedAlpha = 0.4;
91             const double defaultLoadBGAlpha = 0.6;
92             theme->trackBgColor_ = pattern->GetAttr<Color>(PATTERN_BG_COLOR, Color::RED);
93             theme->trackSelectedColor_ = pattern->GetAttr<Color>(PATTERN_FG_COLOR, Color::RED);
94             theme->trackCachedColor_ = theme->trackSelectedColor_
95                 .BlendOpacity(pattern->GetAttr<double>("fg_color_cached_alpha", defaultCachedAlpha));
96             theme->progressColor_ = pattern->GetAttr<Color>("fg_progress_color", Color::RED);
97             theme->loadingColor_ = theme->progressColor_
98                 .BlendOpacity(pattern->GetAttr<double>("loading_progress_bg_color_alpha", defaultLoadBGAlpha));
99             theme->moonFrontColor_ = pattern->GetAttr<Color>("moon_progress_fg_color", Color::RED)
100                 .BlendOpacity(pattern->GetAttr<double>("moon_progress_fg_color_alpha", 1.0));
101             theme->moonTrackBackgroundColor_ = pattern->GetAttr<Color>("moon_progress_bg_color", Color::RED)
102                 .BlendOpacity(pattern->GetAttr<double>("moon_progress_bg_color_alpha", 1.0))
103                 .BlendOpacity(pattern->GetAttr<double>("moon_progress_bg_color_alpha_ex", 1.0));
104         }
105     };
106 
107     ~ProgressTheme() override = default;
108 
GetTrackThickness()109     const Dimension& GetTrackThickness() const
110     {
111         return trackThickness_;
112     }
113 
GetTrackWidth()114     const Dimension& GetTrackWidth() const
115     {
116         return trackWidth_;
117     }
118 
GetRingThickness()119     const Dimension& GetRingThickness() const
120     {
121         return ringThickness_;
122     }
123 
GetRingDiameter()124     const Dimension& GetRingDiameter() const
125     {
126         return ringDiameter_;
127     }
128 
GetTrackBgColor()129     const Color& GetTrackBgColor() const
130     {
131         return trackBgColor_;
132     }
133 
GetTrackSelectedColor()134     const Color& GetTrackSelectedColor() const
135     {
136         return trackSelectedColor_;
137     }
138 
GetTrackCachedColor()139     Color GetTrackCachedColor() const
140     {
141         return trackCachedColor_;
142     }
143 
GetLoadingDiameter()144     const Dimension& GetLoadingDiameter() const
145     {
146         return loadingDiameter_;
147     }
148 
GetLoadingColor()149     const Color& GetLoadingColor() const
150     {
151         return loadingColor_;
152     }
153 
GetScaleWidth()154     const Dimension& GetScaleWidth() const
155     {
156         return scaleWidth_;
157     }
158 
GetScaleNumber()159     int32_t GetScaleNumber() const
160     {
161         return scaleNumber_;
162     }
163 
GetScaleLength()164     const Dimension& GetScaleLength() const
165     {
166         return scaleLength_;
167     }
168 
GetProgressColor()169     const Color& GetProgressColor() const
170     {
171         return progressColor_;
172     }
173 
GetMoveRatio()174     double GetMoveRatio() const
175     {
176         return moveRatio_;
177     }
178 
GetRingRadius()179     const Dimension& GetRingRadius() const
180     {
181         return ringRadius_;
182     }
183 
GetOrbitRadius()184     const Dimension& GetOrbitRadius() const
185     {
186         return orbitRadius_;
187     }
188 
GetCometTailLen()189     double GetCometTailLen() const
190     {
191         return cometTailLen_;
192     }
193 
GetScaleRingDiameter()194     const Dimension& GetScaleRingDiameter() const
195     {
196         return scaleRingDiameter_;
197     }
198 
GetMoonDiameter()199     const Dimension& GetMoonDiameter() const
200     {
201         return moonDiameter_;
202     }
203 
GetMoonBackgroundColor()204     const Color& GetMoonBackgroundColor() const
205     {
206         return moonTrackBackgroundColor_;
207     }
208 
GetMoonFrontColor()209     const Color& GetMoonFrontColor() const
210     {
211         return moonFrontColor_;
212     }
213 
GetBubbleDiameter()214     const Dimension& GetBubbleDiameter() const
215     {
216         return bubbleDiameter_;
217     }
218 
GetBubbleRadius()219     const Dimension& GetBubbleRadius() const
220     {
221         return bubbleRadius_;
222     }
223 
224 protected:
225     ProgressTheme() = default;
226 
227 private:
228     Dimension trackThickness_;
229     Dimension trackWidth_;
230     Color trackBgColor_;
231     Color trackSelectedColor_;
232     Color trackCachedColor_;
233 
234     Dimension ringThickness_;
235     Dimension ringDiameter_;
236     Dimension bubbleDiameter_;
237     Dimension bubbleRadius_;
238 
239     Dimension loadingDiameter_;
240     Color loadingColor_;
241 
242     Dimension scaleWidth_;
243     int32_t scaleNumber_ = 0;
244     Dimension scaleLength_;
245     Dimension scaleRingDiameter_;
246 
247     Dimension moonDiameter_;
248     Color moonTrackBackgroundColor_;
249     Color moonFrontColor_;
250 
251     // For loading progress in cycle type.
252     Color progressColor_;
253     double moveRatio_ = 0.0;
254     Dimension ringRadius_;
255     Dimension orbitRadius_;
256     double cometTailLen_ = 0.0;
257 };
258 
259 } // namespace OHOS::Ace
260 
261 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_THEME_H
262