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