• 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_NAVIGATION_BAR_NAVIGATION_BAR_THEME_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_THEME_H
18 
19 #include "core/components/theme/theme.h"
20 #include "core/components/theme/theme_constants.h"
21 #include "core/components/theme/theme_constants_defines.h"
22 #include "core/components_ng/property/border_property.h"
23 
24 namespace OHOS::Ace {
25 
26 class NavigationBarTheme : public virtual Theme {
27     DECLARE_ACE_TYPE(NavigationBarTheme, Theme);
28 
29 public:
30     class Builder {
31     public:
32         Builder() = default;
33         ~Builder() = default;
34 
Build(const RefPtr<ThemeConstants> & themeConstants)35         RefPtr<NavigationBarTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const
36         {
37             RefPtr<NavigationBarTheme> theme = AceType::Claim(new NavigationBarTheme());
38             if (!themeConstants) {
39                 return theme;
40             }
41             theme->titleColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_TITLE_COLOR);
42             theme->titleFontSize_ = Dimension(
43                 themeConstants->GetDimension(THEME_NAVIGATION_BAR_TITLE_FONT_SIZE).Value(), DimensionUnit::VP);
44             theme->titleFontSizeBig_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_TITLE_FONT_SIZE_BIG);
45             theme->subTitleColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_SUBTITLE_COLOR);
46             theme->subTitleFontSize_ = Dimension(
47                 themeConstants->GetDimension(THEME_NAVIGATION_BAR_SUBTITLE_FONT_SIZE).Value(), DimensionUnit::VP);
48             theme->height_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_HEIGHT);
49             theme->heightEmphasize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_HEIGHT_EMPHASIZE);
50             theme->backResourceId_ = themeConstants->GetResourceId(THEME_NAVIGATION_BAR_RESOURCE_ID_BACK);
51             theme->moreResourceId_ = themeConstants->GetResourceId(THEME_NAVIGATION_BAR_RESOURCE_ID_MORE);
52             theme->menuZoneSize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MENU_ZONE_SIZE);
53             theme->menuIconSize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MENU_ICON_SIZE);
54             theme->logoIconSize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_LOGO_ICON_SIZE);
55             theme->buttonNormalColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_BUTTON_NORMAL_COLOR);
56             theme->buttonPressedColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_BUTTON_PRESSED_COLOR);
57             theme->buttonFocusColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_BUTTON_FOCUS_COLOR);
58             theme->buttonCornerRadius_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_BUTTON_CORNER_RADIUS);
59             theme->maxPaddingStart_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MAX_PADDING_START);
60             theme->maxPaddingEnd_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MAX_PADDING_END);
61             theme->defaultPaddingStart_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_DEFAULT_PADDING_START);
62             theme->defaultPaddingEnd_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_DEFAULT_PADDING_END);
63             theme->menuItemPadding_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MENU_ITEM_PADDING);
64             theme->titleMinPadding_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_TITLE_MIN_PADDING);
65             auto menuCount = themeConstants->GetInt(THEME_NAVIGATION_BAR_MOST_MENU_ITEM_COUNT_IN_BAR);
66             theme->mostMenuItemCountInBar_ =
67                 menuCount < 0 ? theme->mostMenuItemCountInBar_ : static_cast<uint32_t>(menuCount);
68 
69             auto themeStyle = themeConstants->GetThemeStyle();
70             if (!themeStyle) {
71                 return theme;
72             }
73             auto pattern = themeStyle->GetAttr<RefPtr<ThemeStyle>>(THEME_PATTERN_NAVIGATION_BAR, nullptr);
74             if (pattern) {
75                 theme->titleColor_ = pattern->GetAttr<Color>("title_color", Color::WHITE);
76                 theme->titleFontSize_  = pattern->GetAttr<Dimension>("title_text_font_size", 0.0_vp);
77                 theme->titleFontSizeMin_ = pattern->GetAttr<Dimension>("title_text_font_size_min", 0.0_vp);
78                 theme->titleFontSizeBig_  = pattern->GetAttr<Dimension>("title_text_font_size_big", 0.0_vp);
79                 theme->subTitleColor_ = pattern->GetAttr<Color>("sub_title_text_color", Color::WHITE);
80                 theme->subTitleFontSize_  = pattern->GetAttr<Dimension>("sub_title_text_font_size", 0.0_vp);
81                 theme->menuIconColor_ = pattern->GetAttr<Color>("menu_icon_color", Color::WHITE);
82                 theme->buttonPressedColor_ = pattern->GetAttr<Color>("button_bg_color_pressed", Color::WHITE);
83                 theme->buttonFocusColor_ = pattern->GetAttr<Color>("button_bg_color_focused", Color::WHITE);
84                 theme->buttonHoverColor_ = pattern->GetAttr<Color>("button_bg_color_hovered", Color::WHITE);
85                 theme->buttonCornerRadius_  = pattern->GetAttr<Dimension>("button_corner_radius", 0.0_vp);
86                 theme->maxPaddingStart_ = pattern->GetAttr<Dimension>("title_left_spacing", 0.0_vp);
87                 theme->maxPaddingEnd_ = pattern->GetAttr<Dimension>("title_right_spacing", 0.0_vp);
88                 theme->defaultPaddingStart_ = pattern->GetAttr<Dimension>("back_button_left_spacing", 0.0_vp);
89                 theme->backButtonIconColor_ = pattern->GetAttr<Color>("back_button_icon_color", Color::WHITE);
90                 theme->alphaDisabled_ = pattern->GetAttr<double>("button_alpha_disabled", 0.0);
91             }
92             ParsePattern(themeConstants->GetThemeStyle(), theme);
93             return theme;
94         }
95 
96     private:
ParsePattern(const RefPtr<ThemeStyle> & themeStyle,const RefPtr<NavigationBarTheme> & theme)97         void ParsePattern(const RefPtr<ThemeStyle>& themeStyle, const RefPtr<NavigationBarTheme>& theme) const
98         {
99             if (!themeStyle) {
100                 return;
101             }
102             auto pattern = themeStyle->GetAttr<RefPtr<ThemeStyle>>(THEME_PATTERN_NAVIGATION_BAR, nullptr);
103             if (!pattern) {
104                 return;
105             }
106             theme->toolbarBgColor_ = pattern->GetAttr<Color>("toolbar_bg_color", Color(0xfff1f3f5));
107             theme->toolbarBgColorWithOpacity_ = theme->toolbarBgColor_.BlendOpacity(theme->toolbarBgAlpha_);
108             theme->toolbarDividerWidth_ = Dimension(1.0, DimensionUnit::PX);
109             theme->toolbarDividerColor_ = pattern->GetAttr<Color>("toolbar_divider_color", Color(0x33182431));
110             theme->toolbarItemFocusBorderColor_ =
111                 pattern->GetAttr<Color>("toolbar_item_focus_color", Color(0xff007dff));
112             theme->toolbarItemBorderRadiusValue_ =
113                 pattern->GetAttr<Dimension>("toolbar_item_bg_button_border_radius", 8.0_vp);
114             theme->toolbarItemBorderRadius_.SetRadius(theme->toolbarItemBorderRadiusValue_);
115             theme->toolbarItemFontSize_ = pattern->GetAttr<Dimension>("toolbar_item_font_size", 10.0_vp);
116             theme->toolbarItemFontColor_ = pattern->GetAttr<Color>("toolbar_item_font_color", Color(0x182431));
117             theme->toolbarIconColor_ = pattern->GetAttr<Color>("toolbar_item_icon_color", Color(0x182431));
118             theme->toolbarActiveIconColor_ =
119                 pattern->GetAttr<Color>("toolbar_item_active_icon_color", Color(0xff007dff));
120             theme->toolbarActiveTextColor_ =
121                 pattern->GetAttr<Color>("toolbar_item_active_text_color", Color(0xff007dff));
122         }
123     };
124 
125     ~NavigationBarTheme() override = default;
126 
GetTitleColor()127     const Color& GetTitleColor() const
128     {
129         return titleColor_;
130     }
131 
GetSubTitleColor()132     const Color& GetSubTitleColor() const
133     {
134         return subTitleColor_;
135     }
GetTitleFontSizeBig()136     const Dimension& GetTitleFontSizeBig() const
137     {
138         return titleFontSizeBig_;
139     }
140 
GetTitleFontSize()141     const Dimension& GetTitleFontSize() const
142     {
143         return titleFontSize_;
144     }
145 
GetTitleFontSizeMin()146     const Dimension& GetTitleFontSizeMin() const
147     {
148         return titleFontSizeMin_;
149     }
150 
GetSubTitleFontSize()151     const Dimension& GetSubTitleFontSize() const
152     {
153         return subTitleFontSize_;
154     }
GetHeight()155     const Dimension& GetHeight() const
156     {
157         return height_;
158     }
GetHeightEmphasize()159     const Dimension& GetHeightEmphasize() const
160     {
161         return heightEmphasize_;
162     }
GetBackResourceId()163     InternalResource::ResourceId GetBackResourceId() const
164     {
165         return backResourceId_;
166     }
GetMoreResourceId()167     InternalResource::ResourceId GetMoreResourceId() const
168     {
169         return moreResourceId_;
170     }
GetMenuZoneSize()171     const Dimension& GetMenuZoneSize() const
172     {
173         return menuZoneSize_;
174     }
GetMenuIconSize()175     const Dimension& GetMenuIconSize() const
176     {
177         return menuIconSize_;
178     }
GetLogoIconSize()179     const Dimension& GetLogoIconSize() const
180     {
181         return logoIconSize_;
182     }
GetMenuIconColor()183     const Color& GetMenuIconColor() const
184     {
185         return menuIconColor_;
186     }
GetButtonNormalColor()187     const Color& GetButtonNormalColor() const
188     {
189         return buttonNormalColor_;
190     }
GetButtonPressedColor()191     const Color& GetButtonPressedColor() const
192     {
193         return buttonPressedColor_;
194     }
GetButtonFocusColor()195     const Color& GetButtonFocusColor() const
196     {
197         return buttonFocusColor_;
198     }
GetButtonHoverColor()199     const Color& GetButtonHoverColor() const
200     {
201         return buttonHoverColor_;
202     }
GetButtonCornerRadius()203     const Dimension& GetButtonCornerRadius() const
204     {
205         return buttonCornerRadius_;
206     }
GetMaxPaddingStart()207     const Dimension& GetMaxPaddingStart() const
208     {
209         return maxPaddingStart_;
210     }
GetDefaultPaddingStart()211     const Dimension& GetDefaultPaddingStart() const
212     {
213         return defaultPaddingStart_;
214     }
GetDefaultPaddingEnd()215     const Dimension& GetDefaultPaddingEnd() const
216     {
217         return defaultPaddingEnd_;
218     }
GetMaxPaddingEnd()219     const Dimension& GetMaxPaddingEnd() const
220     {
221         return maxPaddingEnd_;
222     }
GetMenuItemPadding()223     const Dimension& GetMenuItemPadding() const
224     {
225         return menuItemPadding_;
226     }
GetTitleMinPadding()227     const Dimension& GetTitleMinPadding() const
228     {
229         return titleMinPadding_;
230     }
GetMostMenuItemCountInBar()231     uint32_t GetMostMenuItemCountInBar() const
232     {
233         return mostMenuItemCountInBar_;
234     }
235 
GetBackButtonIconColor()236     const Color& GetBackButtonIconColor() const
237     {
238         return backButtonIconColor_;
239     }
240 
GetAlphaDisabled()241     double GetAlphaDisabled() const
242     {
243         return alphaDisabled_;
244     }
245 
GetToolBarBgColor()246     const Color& GetToolBarBgColor() const
247     {
248         return toolbarBgColorWithOpacity_;
249     }
GetToolBarDividerWidth()250     const Dimension& GetToolBarDividerWidth() const
251     {
252         return toolbarDividerWidth_;
253     }
GetToolBarDividerColor()254     const Color& GetToolBarDividerColor() const
255     {
256         return toolbarDividerColor_;
257     }
GetToolBarItemFocusColor()258     const Color& GetToolBarItemFocusColor() const
259     {
260         return toolbarItemFocusBorderColor_;
261     }
GetToolBarItemFocusBorderWidth()262     const Dimension& GetToolBarItemFocusBorderWidth() const
263     {
264         return toolbarItemFocusBorderWidth_;
265     }
GetToolBarItemBorderRadius()266     const NG::BorderRadiusProperty& GetToolBarItemBorderRadius() const
267     {
268         return toolbarItemBorderRadius_;
269     }
GetToolBarItemFontSize()270     const Dimension& GetToolBarItemFontSize() const
271     {
272         return toolbarItemFontSize_;
273     }
GetToolBarItemMinFontSize()274     const Dimension& GetToolBarItemMinFontSize() const
275     {
276         return toolbarItemMinFontSize_;
277     }
GetToolBarItemFontColor()278     const Color& GetToolBarItemFontColor() const
279     {
280         return toolbarItemFontColor_;
281     }
GetToolbarItemDisabledAlpha()282     double GetToolbarItemDisabledAlpha() const
283     {
284         return toolbarItemDisabledAlpha_;
285     }
GetToolbarIconColor()286     const Color& GetToolbarIconColor() const
287     {
288         return toolbarIconColor_;
289     }
GetToolbarIconSize()290     const Dimension& GetToolbarIconSize() const
291     {
292         return toolbarIconSize_;
293     }
GetToolbarActiveIconColor()294     const Color& GetToolbarActiveIconColor() const
295     {
296         return toolbarActiveIconColor_;
297     }
GetToolBarItemActiveFontColor()298     const Color& GetToolBarItemActiveFontColor() const
299     {
300         return toolbarActiveTextColor_;
301     }
GetToolbarItemTextMaxLines()302     uint32_t GetToolbarItemTextMaxLines() const
303     {
304         return toolbarItemTextMaxLines_;
305     }
GetToolbarItemSafeInterval()306     const Dimension& GetToolbarItemSafeInterval() const
307     {
308         return toolbarItemSafeInterval_;
309     }
GetToolbarItemHorizontalPadding()310     const Dimension& GetToolbarItemHorizontalPadding() const
311     {
312         return toolbarItemHorizontalPadding_;
313     }
GetToolbarItemVerticalPadding()314     const Dimension& GetToolbarItemVerticalPadding() const
315     {
316         return toolbarItemVerticalPadding_;
317     }
GetToolbarItemTopPadding()318     const Dimension& GetToolbarItemTopPadding() const
319     {
320         return toolbarItemTopPadding_;
321     }
GetToolbarItemLeftOrRightPadding()322     const Dimension& GetToolbarItemLeftOrRightPadding() const
323     {
324         return toolbarItemLeftOrRightPadding_;
325     }
GetToolbarItemHeigth()326     const Dimension& GetToolbarItemHeigth() const
327     {
328         return toolbarItemHeight_;
329     }
GetToolbarItemBottomPadding()330     const Dimension& GetToolbarItemBottomPadding() const
331     {
332         return toolbarItemBottomPadding_;
333     }
GetToolbarItemMargin()334     const Dimension& GetToolbarItemMargin() const
335     {
336         return toolbarItemMargin_;
337     }
GetToolbarItemSpecialMargin()338     const Dimension& GetToolbarItemSpecialMargin() const
339     {
340         return toolbarItemSpecialMargin_;
341     }
GetToolbarRotationLimitGridCount()342     uint32_t GetToolbarRotationLimitGridCount() const
343     {
344         return toolbarLimitGridCount_;
345     }
346 
347 protected:
348     NavigationBarTheme() = default;
349 
350 private:
351     Color titleColor_;
352     Color subTitleColor_;
353     Dimension titleFontSizeBig_;
354     Dimension titleFontSize_;
355     Dimension titleFontSizeMin_;
356     Dimension subTitleFontSize_;
357     Dimension height_;
358     Dimension heightEmphasize_;
359     InternalResource::ResourceId backResourceId_ = InternalResource::ResourceId::NO_ID;
360     InternalResource::ResourceId moreResourceId_ = InternalResource::ResourceId::NO_ID;
361     Dimension menuZoneSize_;
362     Dimension menuIconSize_;
363     Dimension logoIconSize_;
364     Color menuIconColor_;
365     Color buttonNormalColor_;
366     Color buttonPressedColor_;
367     Color buttonFocusColor_;
368     Color buttonHoverColor_;
369     Dimension buttonCornerRadius_;
370     Dimension maxPaddingStart_;
371     Dimension maxPaddingEnd_;
372     Dimension defaultPaddingStart_;
373     Dimension defaultPaddingEnd_;
374     Dimension menuItemPadding_;
375     Dimension titleMinPadding_;
376     uint32_t mostMenuItemCountInBar_ = 0;
377     Color backButtonIconColor_;
378     double alphaDisabled_ = 0.0;
379     Color toolbarBgColor_;
380     Color toolbarBgColorWithOpacity_;
381     Dimension toolbarDividerWidth_;
382     Color toolbarDividerColor_;
383     Color toolbarItemFocusBorderColor_;
384     Dimension toolbarItemFocusBorderWidth_ = 2.0_vp;
385     Dimension toolbarItemBorderRadiusValue_;
386     NG::BorderRadiusProperty toolbarItemBorderRadius_;
387     Dimension toolbarItemFontSize_;
388     Dimension toolbarItemMinFontSize_ = 9.0_vp;
389     Color toolbarItemFontColor_;
390     double toolbarItemDisabledAlpha_ = 0.4;
391     double toolbarBgAlpha_ = 0.95;
392     Color toolbarIconColor_;
393     Dimension toolbarIconSize_ = 24.0_vp;
394     Color toolbarActiveIconColor_;
395     Color toolbarActiveTextColor_;
396     uint32_t toolbarItemTextMaxLines_ = 2;
397     Dimension toolbarItemSafeInterval_ = 8.0_vp;
398     Dimension toolbarItemHorizontalPadding_ = 8.0_vp;
399     Dimension toolbarItemVerticalPadding_ = 12.0_vp;
400     Dimension toolbarItemTopPadding_ = 8.0_vp;
401     Dimension toolbarItemLeftOrRightPadding_ = 4.0_vp;
402     Dimension toolbarItemHeight_ = 56.0_vp;
403     Dimension toolbarItemBottomPadding_ = 4.0_vp;
404     Dimension toolbarItemMargin_ = 4.0_vp;
405     Dimension toolbarItemSpecialMargin_ = 0.0_vp;
406     uint32_t toolbarLimitGridCount_ = 8;
407 };
408 
409 } // namespace OHOS::Ace
410 
411 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_THEME_H
412