• 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_RATING_RATING_THEME_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_THEME_H
18 
19 #include "base/resource/internal_resource.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 namespace {
27 constexpr Dimension BORDER_RADIUS = 4.0_vp;
28 constexpr Color STAR_PRESS_COLOR = Color(0x19182431);
29 constexpr Color STAR_HOVER_COLOR = Color(0x0c182431);
30 } // namespace
31 /**
32  * RatingTheme defines color and styles of RatingComponent. RatingTheme should be built
33  * using RatingTheme::Builder.
34  */
35 class RatingTheme : public virtual Theme {
36     DECLARE_ACE_TYPE(RatingTheme, Theme);
37 
38 public:
39     class Builder {
40     public:
41         Builder() = default;
42         ~Builder() = default;
43 
Build(const RefPtr<ThemeConstants> & themeConstants)44         RefPtr<RatingTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const
45         {
46             RefPtr<RatingTheme> theme = AceType::MakeRefPtr<RatingTheme>();
47             if (!themeConstants) {
48                 return theme;
49             }
50             theme->foregroundResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_BIG_ON);
51             theme->secondaryResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_BIG_HALF);
52             theme->backgroundResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_BIG_OFF);
53             theme->foregroundMiniResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_MINI_ON);
54             theme->secondaryMiniResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_MINI_HALF);
55             theme->backgroundMiniResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_MINI_OFF);
56 
57             RefPtr<ThemeStyle> pattern = themeConstants->GetPatternByName(THEME_PATTERN_RATING);
58             if (pattern) {
59                 theme->starNum_ = static_cast<int32_t>(pattern->GetAttr<double>("rating_start_num", 0.0));
60                 theme->ratingScore_ = pattern->GetAttr<double>("rating_score", 0.0);
61                 theme->ratingMiniScore_ = pattern->GetAttr<double>("rating_mini_score", 0.0);
62                 theme->stepSize_ = pattern->GetAttr<double>("rating_step_size", 0.0);
63                 theme->paddingVertical_ = pattern->GetAttr<Dimension>("rating_padding_vertical", 0.0_vp);
64                 theme->ratingWidth_ = pattern->GetAttr<Dimension>("rating_big_width", 0.0_vp);
65                 theme->ratingHeight_ = pattern->GetAttr<Dimension>("rating_big_height", 0.0_vp);
66                 theme->ratingMiniWidth_ = pattern->GetAttr<Dimension>("rating_mini_width", 0.0_vp);
67                 theme->ratingMiniHeight_ = pattern->GetAttr<Dimension>("rating_mini_height", 0.0_vp);
68                 theme->designedStarAspectRatio_ = pattern->GetAttr<double>("rating_designed_start_aspect_ratio", 0.0);
69                 theme->focusBorderWidth_ = pattern->GetAttr<Dimension>("rating_focus_border_width", 0.0_vp);
70                 theme->hoverColor_ = pattern->GetAttr<Color>(PATTERN_BG_COLOR_HOVERED, STAR_HOVER_COLOR);
71                 theme->pressColor_ = pattern->GetAttr<Color>(PATTERN_BG_COLOR_PRESSED, STAR_PRESS_COLOR);
72                 theme->starColorActive_ = pattern->GetAttr<Color>("icon_color_active", Color::RED);
73                 theme->starColorInactive_ = pattern->GetAttr<Color>("icon_color_inactive", Color::GRAY);
74                 theme->borderRadius_ = pattern->GetAttr<Dimension>("hover_radius_size", BORDER_RADIUS);
75                 theme->hoverAnimationDuration_ = pattern->GetAttr<double>("hover_animation_duration", 0.0);
76                 theme->pressAnimationDuration_ = pattern->GetAttr<double>("press_animation_duration", 0.0);
77                 theme->disabledAlpha_ = pattern->GetAttr<double>("rating_disable_alpha", 0.0);
78                 theme->iconBoardDistance_ = pattern->GetAttr<Dimension>("rating_icon_board_distance", 0.0_vp);
79                 theme->focusColor_ = pattern->GetAttr<Color>("rating_focus_bgcolor", Color());
80                 theme->focusSpace_ = pattern->GetAttr<Dimension>("rating_focus_space", 0.0_vp);
81                 theme->cancelAnimation_ = pattern->GetAttr<double>("rating_focus_blur_cancel_animation", 0.0);
82                 theme->isCircleRadius_ = static_cast<bool>(pattern->GetAttr<double>("rating_apply_circle_radius", 0.0));
83                 theme->unlitStarFocusColor_ = pattern->GetAttr<Color>("rating_unlit_star_focus_color", Color());
84             } else {
85                 LOGW("find pattern of rating fail");
86             }
87             return theme;
88         }
89     };
90 
91     ~RatingTheme() override = default;
92 
GetStarNum()93     int32_t GetStarNum() const
94     {
95         return starNum_;
96     }
97 
GetIconBoardDistance()98     const Dimension& GetIconBoardDistance() const
99     {
100         return iconBoardDistance_;
101     }
102 
GetUnlitStarFocusColor()103     Color GetUnlitStarFocusColor() const
104     {
105         return unlitStarFocusColor_;
106     }
107 
GetRatingWidth()108     const Dimension& GetRatingWidth() const
109     {
110         return ratingWidth_;
111     }
112 
GetRatingHeight()113     const Dimension& GetRatingHeight() const
114     {
115         return ratingHeight_;
116     }
117 
GetRatingMiniWidth()118     const Dimension& GetRatingMiniWidth() const
119     {
120         return ratingMiniWidth_;
121     }
122 
GetRatingMiniHeight()123     const Dimension& GetRatingMiniHeight() const
124     {
125         return ratingMiniHeight_;
126     }
127 
GetPaddingVertical()128     const Dimension& GetPaddingVertical() const
129     {
130         return paddingVertical_;
131     }
132 
GetStepSize()133     double GetStepSize() const
134     {
135         return stepSize_;
136     }
137 
GetRatingScore()138     double GetRatingScore() const
139     {
140         return ratingScore_;
141     }
142 
GetRatingMiniScore()143     double GetRatingMiniScore() const
144     {
145         return ratingMiniScore_;
146     }
147 
GetForegroundResourceId()148     const InternalResource::ResourceId& GetForegroundResourceId() const
149     {
150         return foregroundResourceId_;
151     }
152 
GetSecondaryResourceId()153     const InternalResource::ResourceId& GetSecondaryResourceId() const
154     {
155         return secondaryResourceId_;
156     }
157 
GetBackgroundResourceId()158     const InternalResource::ResourceId& GetBackgroundResourceId() const
159     {
160         return backgroundResourceId_;
161     }
162 
GetForegroundMiniResourceId()163     const InternalResource::ResourceId& GetForegroundMiniResourceId() const
164     {
165         return foregroundMiniResourceId_;
166     }
167 
GetSecondaryMiniResourceId()168     const InternalResource::ResourceId& GetSecondaryMiniResourceId() const
169     {
170         return secondaryMiniResourceId_;
171     }
172 
GetBackgroundMiniResourceId()173     const InternalResource::ResourceId& GetBackgroundMiniResourceId() const
174     {
175         return backgroundMiniResourceId_;
176     }
177 
GetDesignedStarAspectRatio()178     double GetDesignedStarAspectRatio() const
179     {
180         return designedStarAspectRatio_;
181     }
182 
GetFocusAndBlurCancleAnimation()183     double GetFocusAndBlurCancleAnimation() const
184     {
185         return cancelAnimation_;
186     }
187 
GetFocusBorderWidth()188     const Dimension& GetFocusBorderWidth() const
189     {
190         return focusBorderWidth_;
191     }
192 
GetFocusBorderRadius()193     const Dimension& GetFocusBorderRadius() const
194     {
195         return borderRadius_;
196     }
197 
GetFocusSpace()198     const Dimension& GetFocusSpace() const
199     {
200         return focusSpace_;
201     }
202 
GetHoverColor()203     const Color& GetHoverColor() const
204     {
205         return hoverColor_;
206     }
207 
GetPressColor()208     const Color& GetPressColor() const
209     {
210         return pressColor_;
211     }
212 
GetFocusColor()213     const Color& GetFocusColor() const
214     {
215         return focusColor_;
216     }
217 
GetStarColorActive()218     const Color& GetStarColorActive() const
219     {
220         return starColorActive_;
221     }
222 
GetStarColorInactive()223     const Color& GetStarColorInactive() const
224     {
225         return starColorInactive_;
226     }
227 
GetHoverAnimationDuration()228     double GetHoverAnimationDuration() const
229     {
230         return hoverAnimationDuration_;
231     }
232 
GetPressAnimationDuration()233     double GetPressAnimationDuration() const
234     {
235         return pressAnimationDuration_;
236     }
237 
GetDisabledAlpha()238     double GetDisabledAlpha() const
239     {
240         return disabledAlpha_;
241     }
242 
GetIsCircleRadius()243     bool GetIsCircleRadius() const
244     {
245         return isCircleRadius_;
246     }
247 
248 protected:
249     RatingTheme() = default;
250 
251 private:
252     int32_t starNum_ = 0;
253     Dimension ratingWidth_;
254     Dimension ratingHeight_;
255     Dimension ratingMiniWidth_;
256     Dimension ratingMiniHeight_;
257     Dimension paddingVertical_;
258     Dimension focusSpace_;
259     Dimension iconBoardDistance_;
260     double stepSize_ = 0.0;
261     double ratingScore_ = 0.0;
262     double ratingMiniScore_ = 0.0;
263     double designedStarAspectRatio_ = 1.0;
264     double hoverAnimationDuration_ = 0.0;
265     double pressAnimationDuration_ = 0.0;
266     double disabledAlpha_ = 1.0;
267     InternalResource::ResourceId foregroundResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_ON_SVG;
268     InternalResource::ResourceId secondaryResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG;
269     InternalResource::ResourceId backgroundResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG;
270     InternalResource::ResourceId foregroundMiniResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG;
271     InternalResource::ResourceId secondaryMiniResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG;
272     InternalResource::ResourceId backgroundMiniResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG;
273 
274     // properties for phone platform
275     Color hoverColor_;
276     Color pressColor_;
277     Color starColorActive_;
278     Color starColorInactive_;
279     Color focusColor_;
280     Color unlitStarFocusColor_;
281     Dimension focusBorderWidth_;
282     Dimension borderRadius_;
283     double cancelAnimation_ = 0.0;
284     bool isCircleRadius_ = false;
285 };
286 
287 } // namespace OHOS::Ace
288 
289 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_THEME_H
290