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