• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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_THEME_ADVANCED_PATTERN_THEME_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_ADVANCED_PATTERN_THEME_H
18 
19 #include "core/components/common/properties/color.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  * AdvancePatternTheme defines color and styles of advancedPatternComponent. AdvancePatternTheme should be built
28  * using AdvancePatternTheme::Builder.
29  */
30 class AdvancedPatternTheme : public virtual Theme {
31     DECLARE_ACE_TYPE(AdvancedPatternTheme, Theme);
32 
33 public:
34     class Builder {
35     public:
36         Builder() = default;
37         ~Builder() = default;
38 
39         static constexpr Dimension DEFAULT_DIMENSION = 0.0_vp;
40 
Build(const RefPtr<ThemeConstants> & themeConstants)41         RefPtr<AdvancedPatternTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const
42         {
43             RefPtr<AdvancedPatternTheme> theme = AceType::Claim(new AdvancedPatternTheme());
44             if (!themeConstants) {
45                 return theme;
46             }
47             ParseColorPattern(themeConstants->GetThemeStyle(), theme);
48             ParseDimensionPattern(themeConstants->GetThemeStyle(), theme);
49             return theme;
50         }
51 
52     private:
ParseColorPattern(const RefPtr<ThemeStyle> & themeStyle,const RefPtr<AdvancedPatternTheme> & theme)53         void ParseColorPattern(const RefPtr<ThemeStyle>& themeStyle, const RefPtr<AdvancedPatternTheme>& theme) const
54         {
55             if (!themeStyle) {
56                 return;
57             }
58             auto advancedPattern = themeStyle->GetAttr<RefPtr<ThemeStyle>>(THEME_PATTERN_ADVANCED_PATTERN, nullptr);
59             if (!advancedPattern) {
60                 LOGE("find pattern of advance theme fail");
61                 return;
62             }
63 
64             theme->primaryTextColor_ = advancedPattern->GetAttr<Color>("text_color_primary", Color());
65             theme->secondaryTextColor_ = advancedPattern->GetAttr<Color>("text_color_secondary", Color());
66             theme->activatedColor_ = advancedPattern->GetAttr<Color>("text_primary_activated", Color());
67             theme->primaryColor_ = advancedPattern->GetAttr<Color>("color_primary", Color());
68             theme->clickColor_ = advancedPattern->GetAttr<Color>("color_click_effect", Color());
69             theme->titleBarColor_ = advancedPattern->GetAttr<Color>("color_titlebar_text", Color());
70             theme->hoverColor_ = advancedPattern->GetAttr<Color>("color_hover", Color());
71             theme->focusedColor_ = advancedPattern->GetAttr<Color>("color_focused_outline", Color());
72             theme->subTitleBarColor_ = advancedPattern->GetAttr<Color>("color_titlebar_subtitle_text", Color());
73             theme->titleIconColor_ = advancedPattern->GetAttr<Color>("color_titlebar_icon", Color());
74             theme->textOffColor_ = advancedPattern->GetAttr<Color>("color_titlebar_text_off", Color());
75             theme->tertiaryColor_ = advancedPattern->GetAttr<Color>("color_tertiary", Color());
76             theme->fourthColor_ = advancedPattern->GetAttr<Color>("color_fourth", Color());
77             theme->separatorColor_ = advancedPattern->GetAttr<Color>("color_list_separator", Color());
78             theme->toolBarTextColor_ = advancedPattern->GetAttr<Color>("color_toolbar_text", Color());
79             theme->toolBarIconColor_ = advancedPattern->GetAttr<Color>("color_toolbar_icon", Color());
80             theme->iconActivedColor_ = advancedPattern->GetAttr<Color>("color_toolbar_icon_actived", Color());
81             theme->textActivedColor_ = advancedPattern->GetAttr<Color>("color_toolbar_text_actived", Color());
82             theme->toolBarSubBgColor_ = advancedPattern->GetAttr<Color>("color_toolbar_sub_bg", Color());
83             theme->toolBarBgColor_ = advancedPattern->GetAttr<Color>("color_toolbar_bg", Color());
84             theme->buttonNormalColor_ = advancedPattern->GetAttr<Color>("color_button_normal", Color());
85             theme->progressColor_ = advancedPattern->GetAttr<Color>("color_progress", Color());
86             theme->emphasizeColor_ = advancedPattern->GetAttr<Color>("color_emphasize", Color());
87             theme->primaryContrary_ = advancedPattern->GetAttr<Color>("color_text_primary_contrary", Color());
88         }
89 
ParseDimensionPattern(const RefPtr<ThemeStyle> & themeStyle,const RefPtr<AdvancedPatternTheme> & theme)90         void ParseDimensionPattern(const RefPtr<ThemeStyle>& themeStyle,
91             const RefPtr<AdvancedPatternTheme>& theme) const
92         {
93             if (!themeStyle) {
94                 return;
95             }
96             auto advancedPattern = themeStyle->GetAttr<RefPtr<ThemeStyle>>(THEME_PATTERN_ADVANCED_PATTERN, nullptr);
97             if (!advancedPattern) {
98                 LOGE("find pattern of advance theme fail");
99                 return;
100             }
101 
102             theme->dialogTitleSize_ = advancedPattern->GetAttr<Dimension>("text_size_dialog_tittle", DEFAULT_DIMENSION);
103             theme->subTitleSize_ = advancedPattern->GetAttr<Dimension>("text_size_sub_title3", DEFAULT_DIMENSION);
104             theme->subTitleTextSize_ = advancedPattern->GetAttr<Dimension>("text_size_sub_title2", DEFAULT_DIMENSION);
105             theme->textButtonSize_ = advancedPattern->GetAttr<Dimension>("text_size_button1", DEFAULT_DIMENSION);
106             theme->buttonTextSize_ = advancedPattern->GetAttr<Dimension>("text_size_button2", DEFAULT_DIMENSION);
107             theme->maxPaddingStart_ = advancedPattern->GetAttr<Dimension>("max_padding_start", DEFAULT_DIMENSION);
108             theme->maxPaddingEnd_ = advancedPattern->GetAttr<Dimension>("max_padding_end", DEFAULT_DIMENSION);
109             theme->paddingStart_ = advancedPattern->GetAttr<Dimension>("default_padding_start", DEFAULT_DIMENSION);
110             theme->paddingEnd_ = advancedPattern->GetAttr<Dimension>("default_padding_end", DEFAULT_DIMENSION);
111             theme->clickRadius_ = advancedPattern->GetAttr<Dimension>("corner_radius_clicked", DEFAULT_DIMENSION);
112             theme->textMargin_ = advancedPattern->GetAttr<Dimension>("text_margin_horizontal", DEFAULT_DIMENSION);
113             theme->textBody_ = advancedPattern->GetAttr<Dimension>("text_size_body1", DEFAULT_DIMENSION);
114             theme->textBodySize_ = advancedPattern->GetAttr<Dimension>("text_size_body2", DEFAULT_DIMENSION);
115             theme->sizeCaption_ = advancedPattern->GetAttr<Dimension>("text_size_caption", DEFAULT_DIMENSION);
116             theme->overLineSize_ = advancedPattern->GetAttr<Dimension>("text_size_over_line", DEFAULT_DIMENSION);
117             theme->headerSize_ = advancedPattern->GetAttr<Dimension>("text_size_headline7", DEFAULT_DIMENSION);
118             theme->headerLineSize_ = advancedPattern->GetAttr<Dimension>("text_size_headline8", DEFAULT_DIMENSION);
119             theme->headerTextSize_ = advancedPattern->GetAttr<Dimension>("text_size_headline9", DEFAULT_DIMENSION);
120             theme->radiusDialog_ = advancedPattern->GetAttr<Dimension>("corner_radius_dialog", DEFAULT_DIMENSION);
121             theme->radiusSubtab_ = advancedPattern->GetAttr<Dimension>("corner_radius_subtab", DEFAULT_DIMENSION);
122         }
123     };
124 
125     ~AdvancedPatternTheme() override = default;
126 
GetPrimaryTextColor()127     const Color& GetPrimaryTextColor() const
128     {
129         return primaryTextColor_;
130     }
131 
GetSecondaryTextColor()132     const Color& GetSecondaryTextColor() const
133     {
134         return secondaryTextColor_;
135     }
136 
GetActivatedColor()137     const Color& GetActivatedColor() const
138     {
139         return activatedColor_;
140     }
141 
GetPrimaryColor()142     const Color& GetPrimaryColor() const
143     {
144         return primaryColor_;
145     }
146 
GetClickColor()147     const Color& GetClickColor() const
148     {
149         return clickColor_;
150     }
151 
GetTitleBarColor()152     const Color& GetTitleBarColor() const
153     {
154         return titleBarColor_;
155     }
156 
GetHoverColor()157     const Color& GetHoverColor() const
158     {
159         return hoverColor_;
160     }
161 
GetFocusedColor()162     const Color& GetFocusedColor() const
163     {
164         return focusedColor_;
165     }
166 
GetSubTitleBarColor()167     const Color& GetSubTitleBarColor() const
168     {
169         return subTitleBarColor_;
170     }
171 
GetTitleIconColor()172     const Color& GetTitleIconColor() const
173     {
174         return titleIconColor_;
175     }
176 
GetTextOffColor()177     const Color& GetTextOffColor() const
178     {
179         return textOffColor_;
180     }
181 
GetTertiaryColor()182     const Color& GetTertiaryColor() const
183     {
184         return tertiaryColor_;
185     }
186 
GetFourthColor()187     const Color& GetFourthColor() const
188     {
189         return fourthColor_;
190     }
191 
GetSeparatorColor()192     const Color& GetSeparatorColor() const
193     {
194         return separatorColor_;
195     }
196 
GetToolBarTextColor()197     const Color& GetToolBarTextColor() const
198     {
199         return toolBarTextColor_;
200     }
201 
GetToolBarIconColor()202     const Color& GetToolBarIconColor() const
203     {
204         return toolBarIconColor_;
205     }
206 
GetIconActivedColor()207     const Color& GetIconActivedColor() const
208     {
209         return iconActivedColor_;
210     }
211 
GetTextActivedColor()212     const Color& GetTextActivedColor() const
213     {
214         return textActivedColor_;
215     }
216 
GetToolBarSubBgColor()217     const Color& GetToolBarSubBgColor() const
218     {
219         return toolBarSubBgColor_;
220     }
221 
GetToolBarBgColor()222     const Color& GetToolBarBgColor() const
223     {
224         return toolBarBgColor_;
225     }
226 
GetButtonNormal()227     const Color& GetButtonNormal() const
228     {
229         return buttonNormalColor_;
230     }
231 
GetProgress()232     const Color& GetProgress() const
233     {
234         return progressColor_;
235     }
236 
GetEmphasizeColor()237     const Color& GetEmphasizeColor() const
238     {
239         return emphasizeColor_;
240     }
241 
GetPrimaryContrary()242     const Color& GetPrimaryContrary() const
243     {
244         return primaryContrary_;
245     }
246 
GetDialogTitleSize()247     const Dimension& GetDialogTitleSize() const
248     {
249         return dialogTitleSize_;
250     }
251 
GetSubTitleSize()252     const Dimension& GetSubTitleSize() const
253     {
254         return subTitleSize_;
255     }
256 
GetSubTitleTextSize()257     const Dimension& GetSubTitleTextSize() const
258     {
259         return subTitleTextSize_;
260     }
261 
GetTextButtonSize()262     const Dimension& GetTextButtonSize() const
263     {
264         return textButtonSize_;
265     }
266 
GetButtonTextSize()267     const Dimension& GetButtonTextSize() const
268     {
269         return buttonTextSize_;
270     }
271 
GetMaxPaddingStart()272     const Dimension& GetMaxPaddingStart() const
273     {
274         return maxPaddingStart_;
275     }
276 
GetMaxPaddingEnd()277     const Dimension& GetMaxPaddingEnd() const
278     {
279         return maxPaddingEnd_;
280     }
281 
GetPaddingStart()282     const Dimension& GetPaddingStart() const
283     {
284         return paddingStart_;
285     }
286 
GetPaddingEnd()287     const Dimension& GetPaddingEnd() const
288     {
289         return paddingEnd_;
290     }
291 
GetClickRadius()292     const Dimension& GetClickRadius() const
293     {
294         return clickRadius_;
295     }
296 
GetTextMargin()297     const Dimension& GetTextMargin() const
298     {
299         return textMargin_;
300     }
301 
GetTextBody()302     const Dimension& GetTextBody() const
303     {
304         return textBody_;
305     }
306 
GetTextBodySize()307     const Dimension& GetTextBodySize() const
308     {
309         return textBodySize_;
310     }
311 
GetSizeCaption()312     const Dimension& GetSizeCaption() const
313     {
314         return sizeCaption_;
315     }
316 
GetOverLineSize()317     const Dimension& GetOverLineSize() const
318     {
319         return overLineSize_;
320     }
321 
GetHeaderSize()322     const Dimension& GetHeaderSize() const
323     {
324         return headerSize_;
325     }
326 
GetHeaderLineSize()327     const Dimension& GetHeaderLineSize() const
328     {
329         return headerLineSize_;
330     }
331 
GetHeaderTextSize()332     const Dimension& GetHeaderTextSize() const
333     {
334         return headerTextSize_;
335     }
336 
GetRadiusDialog()337     const Dimension& GetRadiusDialog() const
338     {
339         return radiusDialog_;
340     }
341 
GetRadiusSubtab()342     const Dimension& GetRadiusSubtab() const
343     {
344         return radiusSubtab_;
345     }
346 
347 protected:
348     AdvancedPatternTheme() = default;
349 
350 private:
351 
352     Color primaryTextColor_;
353     Color secondaryTextColor_;
354     Color activatedColor_;
355     Color primaryColor_;
356     Color clickColor_;
357     Color titleBarColor_;
358     Color hoverColor_;
359     Color focusedColor_;
360     Color subTitleBarColor_;
361     Color titleIconColor_;
362     Color textOffColor_;
363     Color tertiaryColor_;
364     Color fourthColor_;
365     Color separatorColor_;
366     Color toolBarTextColor_;
367     Color toolBarIconColor_;
368     Color iconActivedColor_;
369     Color textActivedColor_;
370     Color toolBarSubBgColor_;
371     Color toolBarBgColor_;
372     Color buttonNormalColor_;
373     Color progressColor_;
374     Color emphasizeColor_;
375     Color primaryContrary_;
376     Dimension dialogTitleSize_;
377     Dimension maxPaddingStart_;
378     Dimension maxPaddingEnd_;
379     Dimension paddingStart_;
380     Dimension paddingEnd_;
381     Dimension subTitleSize_;
382     Dimension subTitleTextSize_;
383     Dimension textButtonSize_;
384     Dimension buttonTextSize_;
385     Dimension clickRadius_;
386     Dimension textMargin_;
387     Dimension textBody_;
388     Dimension textBodySize_;
389     Dimension sizeCaption_;
390     Dimension overLineSize_;
391     Dimension headerSize_;
392     Dimension headerLineSize_;
393     Dimension headerTextSize_;
394     Dimension radiusDialog_;
395     Dimension radiusSubtab_;
396 };
397 } // namespace OHOS::Ace
398 
399 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_ADVANCED_PATTERN_THEME_H