• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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