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