1 /* 2 * Copyright (c) 2021-2023 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_TAB_BAR_TAB_THEME_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_THEME_H 18 19 #include "base/geometry/dimension.h" 20 #include "core/components/common/properties/text_style.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 27 /** 28 * TabTheme defines color and styles of tab. TabTheme should be built 29 * using TabTheme::Builder. 30 */ 31 class TabTheme : public virtual Theme { 32 DECLARE_ACE_TYPE(TabTheme, Theme); 33 34 public: 35 class Builder { 36 public: 37 Builder() = default; 38 ~Builder() = default; 39 Build(const RefPtr<ThemeConstants> & themeConstants)40 RefPtr<TabTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const 41 { 42 RefPtr<TabTheme> theme = AceType::Claim(new TabTheme()); 43 if (!themeConstants) { 44 return theme; 45 } 46 RefPtr<ThemeStyle> pattern = themeConstants->GetPatternByName(THEME_PATTERN_TAB); 47 if (pattern) { 48 theme->backgroundColor_ = pattern->GetAttr<Color>(PATTERN_BG_COLOR, Color::WHITE); 49 theme->activeIndicatorColor_ = pattern->GetAttr<Color>("active_indicator_color", Color::WHITE); 50 theme->focusIndicatorColor_ = pattern->GetAttr<Color>("focus_indicator_color", Color::WHITE); 51 theme->focusIndicatorRadius_ = pattern->GetAttr<Dimension>("focus_indicator_radius", 0.0_vp); 52 theme->subTabIndicatorHeight_ = pattern->GetAttr<Dimension>("subtab_indicator_height", 0.0_vp); 53 theme->subTabTextOnColor_ = pattern->GetAttr<Color>("subtab_text_on_color", Color::WHITE); 54 theme->subTabTextOffColor_ = pattern->GetAttr<Color>("subtab_text_off_color", Color::WHITE); 55 theme->subTabIndicatorGap_ = pattern->GetAttr<Dimension>("subtab_indicator_gap", 0.0_vp); 56 theme->subTabHorizontalPadding_ = pattern->GetAttr<Dimension>("subtab_horizontal_padding", 0.0_vp); 57 theme->subTabTopPadding_ = pattern->GetAttr<Dimension>("subtab_top_padding", 0.0_vp); 58 theme->subTabBottomPadding_ = pattern->GetAttr<Dimension>("subtab_bottom_padding", 0.0_vp); 59 theme->subTabBarHoverColor_ = pattern->GetAttr<Color>("subtab_hover_color", Color::WHITE); 60 theme->subTabBarPressedColor_ = pattern->GetAttr<Color>("subtab_press_color", Color::WHITE); 61 theme->subtabTextDefaultFontSize_ = 62 pattern->GetAttr<Dimension>("subtab_text_default_font_size", 0.0_vp); 63 theme->subtabLandscapeHorizontalPadding_ = 64 pattern->GetAttr<Dimension>("subtab_landscape_horizontal_padding", 0.0_vp); 65 theme->bottomTabHorizontalPadding_ = 66 pattern->GetAttr<Dimension>("bottom_tab_horizontal_padding", 0.0_vp); 67 theme->bottomTabTextOn_ = pattern->GetAttr<Color>("bottom_tab_text_on", Color::WHITE); 68 theme->bottomTabTextOff_ = pattern->GetAttr<Color>("bottom_tab_text_off", Color::WHITE); 69 theme->bottomTabIconOn_ = pattern->GetAttr<Color>("bottom_tab_icon", Color::WHITE); 70 theme->bottomTabIconOff_ = pattern->GetAttr<Color>("bottom_tab_icon_off", Color::WHITE); 71 theme->bottomTabImageSize_ = pattern->GetAttr<Dimension>("bottom_tab_image_size", 0.0_vp); 72 theme->bottomTabTextSize_ = pattern->GetAttr<Dimension>("bottom_tab_text_size", 0.0_vp); 73 theme->defaultTabBarName_ = pattern->GetAttr<std::string>("default_tab_bar_name", ""); 74 theme->bottomTabBarSpace_ = pattern->GetAttr<Dimension>("bottom_tab_bar_space", 0.0_vp); 75 theme->horizontalBottomTabBarSpace_ = 76 pattern->GetAttr<Dimension>("horizontal_bottom_tab_bar_space", 0.0_vp); 77 theme->subTabBarHoverDuration_ = pattern->GetAttr<double>("sub_tab_bar_hover_duration", 0.0); 78 theme->subTabBarHoverToPressDuration_ = 79 pattern->GetAttr<double>("sub_tab_bar_hover_to_press_duration", 0.0); 80 theme->tabContentAnimationDuration_ = 81 pattern->GetAttr<double>("tab_content_animation_duration", 0.0); 82 theme->tabBarDefaultHeight_ = pattern->GetAttr<Dimension>("tab_bar_default_height", 0.0_vp); 83 theme->tabBarDefaultWidth_ = pattern->GetAttr<Dimension>("tab_bar_default_width", 0.0_vp); 84 theme->subTabBarMinWidth_ = pattern->GetAttr<Dimension>("sub_tab_bar_min_width", 0.0_vp); 85 theme->dividerColor_ = pattern->GetAttr<Color>("divider_color", Color::BLACK); 86 theme->tabBarShadowMargin_ = pattern->GetAttr<Dimension>("tab_bar_shadow_margin", 0.0_vp); 87 theme->tabBarGradientWidth_ = pattern->GetAttr<Dimension>("tab_bar_gradient_width", 0.0_vp); 88 theme->colorBottomTabSubBg_ = pattern->GetAttr<Color>("color_bottom_tab_sub_bg", Color::WHITE); 89 theme->colorBottomTabSubBgBlur_ = pattern->GetAttr<Color>("color_bottom_tab_sub_bg_blur", Color::WHITE); 90 theme->tabBarColumnGutter_ = pattern->GetAttr<Dimension>("tab_bar_column_gutter", 0.0_vp); 91 theme->tabBarColumnMargin_ = pattern->GetAttr<Dimension>("tab_bar_column_margin", 0.0_vp); 92 theme->horizontalBottomTabMinWidth_ = 93 pattern->GetAttr<Dimension>("horizontal_bottom_tab_min_width", 0.0_vp); 94 95 theme->labelPadding_ = pattern->GetAttr<Dimension>("label_padding", 8.0_vp); 96 theme->padding_ = pattern->GetAttr<Dimension>("tab_padding", 16.0_vp); 97 theme->gradientWidth_ = pattern->GetAttr<Dimension>("tab_gradient_width", 24.0_vp); 98 theme->defaultHeight_ = pattern->GetAttr<Dimension>("tab_default_height", 56.0_vp); 99 theme->defaultWidth_ = pattern->GetAttr<Dimension>("tab_default_width", 200.0_px); 100 theme->defaultItemHeight_ = pattern->GetAttr<Dimension>("tab_default_item_height", 200.0_px); 101 theme->activeIndicatorWidth_ = pattern->GetAttr<Dimension>("active_indicator_width", 2.0_vp); 102 theme->activeIndicatorMinWidth_ = pattern->GetAttr<Dimension>("active_indicator_min_width", 32.0_vp); 103 theme->activeIndicatorPadding_ = pattern->GetAttr<Dimension>("active_indicator_padding", 3.0_vp); 104 theme->focusIndicatorHorizontalPadding_ = 105 pattern->GetAttr<Dimension>("focus_indicator_horizontal_padding", 0.0_vp); 106 theme->focusIndicatorVerticalPadding_ = 107 pattern->GetAttr<Dimension>("focus_indicator_vertical_padding", 0.0_vp); 108 } else { 109 LOGW("find pattern of tab fail"); 110 } 111 return theme; 112 } 113 }; 114 115 ~TabTheme() override = default; 116 GetLabelPadding()117 const Dimension& GetLabelPadding() const 118 { 119 return labelPadding_; 120 } 121 GetPadding()122 const Dimension& GetPadding() const 123 { 124 return padding_; 125 } 126 GetGradientWidth()127 const Dimension& GetGradientWidth() const 128 { 129 return gradientWidth_; 130 } 131 GetDefaultHeight()132 const Dimension& GetDefaultHeight() const 133 { 134 return defaultHeight_; 135 } 136 GetDefaultWidth()137 const Dimension& GetDefaultWidth() const 138 { 139 return defaultWidth_; 140 } 141 GetDefaultItemHeight()142 const Dimension& GetDefaultItemHeight() const 143 { 144 return defaultItemHeight_; 145 } 146 GetBackgroundColor()147 const Color& GetBackgroundColor() const 148 { 149 return backgroundColor_; 150 } 151 GetActiveIndicatorColor()152 const Color& GetActiveIndicatorColor() const 153 { 154 return activeIndicatorColor_; 155 } 156 GetActiveIndicatorWidth()157 const Dimension& GetActiveIndicatorWidth() const 158 { 159 return activeIndicatorWidth_; 160 } 161 GetActiveIndicatorMinWidth()162 const Dimension& GetActiveIndicatorMinWidth() const 163 { 164 return activeIndicatorMinWidth_; 165 } 166 GetActiveIndicatorPadding()167 const Dimension& GetActiveIndicatorPadding() const 168 { 169 return activeIndicatorPadding_; 170 } 171 GetFocusIndicatorColor()172 const Color& GetFocusIndicatorColor() const 173 { 174 return focusIndicatorColor_; 175 } 176 GetFocusIndicatorRadius()177 const Dimension& GetFocusIndicatorRadius() const 178 { 179 return focusIndicatorRadius_; 180 } 181 GetFocusIndicatorHorizontalPadding()182 const Dimension& GetFocusIndicatorHorizontalPadding() const 183 { 184 return focusIndicatorHorizontalPadding_; 185 } 186 GetFocusIndicatorVerticalPadding()187 const Dimension& GetFocusIndicatorVerticalPadding() const 188 { 189 return focusIndicatorVerticalPadding_; 190 } 191 GetSubTabTextOnColor()192 const Color& GetSubTabTextOnColor() const 193 { 194 return subTabTextOnColor_; 195 } 196 GetSubTabTextOffColor()197 const Color& GetSubTabTextOffColor() const 198 { 199 return subTabTextOffColor_; 200 } 201 GetSubTabIndicatorHeight()202 const Dimension& GetSubTabIndicatorHeight() const 203 { 204 return subTabIndicatorHeight_; 205 } 206 GetSubTabIndicatorGap()207 const Dimension& GetSubTabIndicatorGap() const 208 { 209 return subTabIndicatorGap_; 210 } 211 GetSubTabHorizontalPadding()212 const Dimension& GetSubTabHorizontalPadding() const 213 { 214 return subTabHorizontalPadding_; 215 } 216 GetSubTabTopPadding()217 const Dimension& GetSubTabTopPadding() const 218 { 219 return subTabTopPadding_; 220 } 221 GetSubTabBottomPadding()222 const Dimension& GetSubTabBottomPadding() const 223 { 224 return subTabBottomPadding_; 225 } 226 GetSubTabBarHoverColor()227 const Color& GetSubTabBarHoverColor() const 228 { 229 return subTabBarHoverColor_; 230 } 231 GetSubTabBarPressedColor()232 const Color& GetSubTabBarPressedColor() const 233 { 234 return subTabBarPressedColor_; 235 } 236 GetSubTabTextDefaultFontSize()237 const Dimension& GetSubTabTextDefaultFontSize() const 238 { 239 return subtabTextDefaultFontSize_; 240 } 241 GetSubtabLandscapeHorizontalPadding()242 const Dimension& GetSubtabLandscapeHorizontalPadding() const 243 { 244 return subtabLandscapeHorizontalPadding_; 245 } 246 GetBottomTabHorizontalPadding()247 const Dimension& GetBottomTabHorizontalPadding() const 248 { 249 return bottomTabHorizontalPadding_; 250 } 251 GetBottomTabTextOn()252 const Color& GetBottomTabTextOn() const 253 { 254 return bottomTabTextOn_; 255 } 256 GetBottomTabTextOff()257 const Color& GetBottomTabTextOff() const 258 { 259 return bottomTabTextOff_; 260 } 261 GetBottomTabIconOn()262 const Color& GetBottomTabIconOn() const 263 { 264 return bottomTabIconOn_; 265 } 266 GetBottomTabIconOff()267 const Color& GetBottomTabIconOff() const 268 { 269 return bottomTabIconOff_; 270 } 271 GetBottomTabImageSize()272 const Dimension& GetBottomTabImageSize() const 273 { 274 return bottomTabImageSize_; 275 } 276 GetBottomTabTextSize()277 const Dimension& GetBottomTabTextSize() const 278 { 279 return bottomTabTextSize_; 280 } 281 GetDefaultTabBarName()282 const std::string& GetDefaultTabBarName() const 283 { 284 return defaultTabBarName_; 285 } 286 GetBottomTabBarSpace()287 const Dimension& GetBottomTabBarSpace() const 288 { 289 return bottomTabBarSpace_; 290 } 291 GetHorizontalBottomTabBarSpace()292 const Dimension& GetHorizontalBottomTabBarSpace() const 293 { 294 return horizontalBottomTabBarSpace_; 295 } 296 GetSubTabBarHoverDuration()297 double GetSubTabBarHoverDuration() const 298 { 299 return subTabBarHoverDuration_; 300 } 301 GetSubTabBarHoverToPressDuration()302 double GetSubTabBarHoverToPressDuration() const 303 { 304 return subTabBarHoverToPressDuration_; 305 } 306 GetTabContentAnimationDuration()307 double GetTabContentAnimationDuration() const 308 { 309 return tabContentAnimationDuration_; 310 } 311 GetTabBarDefaultHeight()312 const Dimension& GetTabBarDefaultHeight() const 313 { 314 return tabBarDefaultHeight_; 315 } 316 GetTabBarDefaultWidth()317 const Dimension& GetTabBarDefaultWidth() const 318 { 319 return tabBarDefaultWidth_; 320 } 321 GetSubTabBarMinWidth()322 const Dimension& GetSubTabBarMinWidth() const 323 { 324 return subTabBarMinWidth_; 325 } 326 GetDividerColor()327 const Color& GetDividerColor() const 328 { 329 return dividerColor_; 330 } 331 GetTabBarShadowMargin()332 const Dimension& GetTabBarShadowMargin() const 333 { 334 return tabBarShadowMargin_; 335 } 336 GetTabBarGradientWidth()337 const Dimension& GetTabBarGradientWidth() const 338 { 339 return tabBarGradientWidth_; 340 } 341 GetColorBottomTabSubBg()342 const Color& GetColorBottomTabSubBg() const 343 { 344 return colorBottomTabSubBg_; 345 } 346 GetColorBottomTabSubBgBlur()347 const Color& GetColorBottomTabSubBgBlur() const 348 { 349 return colorBottomTabSubBgBlur_; 350 } 351 GetTabBarColumnGutter()352 const Dimension& GetTabBarColumnGutter() const 353 { 354 return tabBarColumnGutter_; 355 } 356 GetTabBarColumnMargin()357 const Dimension& GetTabBarColumnMargin() const 358 { 359 return tabBarColumnMargin_; 360 } 361 GetHorizontalBottomTabMinWidth()362 const Dimension& GetHorizontalBottomTabMinWidth() const 363 { 364 return horizontalBottomTabMinWidth_; 365 } 366 367 protected: 368 TabTheme() = default; 369 370 private: 371 Dimension labelPadding_; 372 Dimension padding_; 373 Dimension gradientWidth_; 374 Dimension defaultHeight_; 375 Dimension defaultWidth_; 376 Dimension defaultItemHeight_; 377 Color backgroundColor_; 378 Color activeIndicatorColor_; 379 Dimension activeIndicatorWidth_; 380 Dimension activeIndicatorMinWidth_; 381 Dimension activeIndicatorPadding_; 382 Color focusIndicatorColor_; 383 Dimension focusIndicatorRadius_; 384 Dimension focusIndicatorHorizontalPadding_; 385 Dimension focusIndicatorVerticalPadding_; 386 Color subTabTextOnColor_; 387 Color subTabTextOffColor_; 388 Dimension subTabIndicatorHeight_; 389 Dimension subTabIndicatorGap_; 390 Dimension subTabHorizontalPadding_; 391 Dimension subTabTopPadding_; 392 Dimension subTabBottomPadding_; 393 Color subTabBarHoverColor_; 394 Color subTabBarPressedColor_; 395 Dimension subtabTextDefaultFontSize_; 396 Dimension subtabLandscapeHorizontalPadding_; 397 Dimension bottomTabHorizontalPadding_; 398 Color bottomTabTextOn_; 399 Color bottomTabTextOff_; 400 Color bottomTabIconOn_; 401 Color bottomTabIconOff_; 402 Dimension bottomTabImageSize_; 403 Dimension bottomTabTextSize_; 404 std::string defaultTabBarName_; 405 Dimension bottomTabBarSpace_; 406 Dimension horizontalBottomTabBarSpace_; 407 double subTabBarHoverDuration_; 408 double subTabBarHoverToPressDuration_; 409 double tabContentAnimationDuration_; 410 Dimension tabBarDefaultHeight_; 411 Dimension tabBarDefaultWidth_; 412 Dimension subTabBarMinWidth_; 413 Color dividerColor_; 414 Dimension tabBarShadowMargin_; 415 Dimension tabBarGradientWidth_; 416 Color colorBottomTabSubBg_; 417 Color colorBottomTabSubBgBlur_; 418 Dimension tabBarColumnGutter_; 419 Dimension tabBarColumnMargin_; 420 Dimension horizontalBottomTabMinWidth_; 421 }; 422 423 } // namespace OHOS::Ace 424 425 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_THEME_H 426