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