• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_TEXT_OVERLAY_TEXT_OVERLAY_THEME_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_THEME_H
18 
19 #include "base/geometry/dimension.h"
20 #include "core/components/common/properties/border.h"
21 #include "core/components/common/properties/border_edge.h"
22 #include "core/components/common/properties/color.h"
23 #include "core/components/common/properties/edge.h"
24 #include "core/components/common/properties/radius.h"
25 #include "core/components/common/properties/text_style.h"
26 #include "core/components/theme/theme.h"
27 #include "core/components/theme/theme_constants.h"
28 #include "core/components/theme/theme_constants_defines.h"
29 
30 namespace OHOS::Ace {
31 
32 /**
33  * DialogTheme defines color and styles of PopupComponent. PopupTheme should be built
34  * using DialogTheme::Builder.
35  */
36 class TextOverlayTheme : public virtual Theme {
37     DECLARE_ACE_TYPE(TextOverlayTheme, Theme);
38 
39 public:
40     class Builder {
41     public:
42         Builder() = default;
43         ~Builder() = default;
44 
Build(const RefPtr<ThemeConstants> & themeConstants)45         RefPtr<TextOverlayTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const
46         {
47             RefPtr<TextOverlayTheme> theme = AceType::Claim(new TextOverlayTheme());
48             if (!themeConstants) {
49                 return theme;
50             }
51             theme->backResourceId_ = themeConstants->GetResourceId(THEME_NAVIGATION_BAR_RESOURCE_ID_BACK);
52             theme->moreResourceId_ = themeConstants->GetResourceId(THEME_NAVIGATION_BAR_RESOURCE_ID_MORE);
53             ParsePattern(themeConstants->GetThemeStyle(), theme);
54             return theme;
55         }
56 
57     private:
ParsePattern(const RefPtr<ThemeStyle> & themeStyle,const RefPtr<TextOverlayTheme> & theme)58         void ParsePattern(const RefPtr<ThemeStyle>& themeStyle, const RefPtr<TextOverlayTheme>& theme) const
59         {
60             if (!themeStyle || !theme) {
61                 return;
62             }
63             auto pattern = themeStyle->GetAttr<RefPtr<ThemeStyle>>("text_overlay_pattern", nullptr);
64             if (pattern) {
65                 const double defaultTertiaryColorAlpha = 0.4;
66 
67                 theme->menuBorder_ = Border(BorderEdge(
68                     pattern->GetAttr<Color>("text_overlay_menu_border_color", Color()),
69                     pattern->GetAttr<Dimension>("text_overlay_menu_border_width", 0.0_vp),
70                     BorderStyle(
71                         static_cast<int32_t>(pattern->GetAttr<double>("text_overlay_menu_border_style", 0.0)))));
72                 theme->menuPadding_ = Edge(pattern->GetAttr<Dimension>("text_overlay_menu_padding_left", 0.0_vp),
73                     pattern->GetAttr<Dimension>("text_overlay_menu_padding_top", 0.0_vp),
74                     pattern->GetAttr<Dimension>("text_overlay_menu_padding_right", 0.0_vp),
75                     pattern->GetAttr<Dimension>("text_overlay_menu_padding_bottom", 0.0_vp));
76                 theme->menuSpacingWithText_ =
77                     pattern->GetAttr<Dimension>("text_overlay_menu_spacing_with_text", 0.0_vp);
78                 theme->menuButtonWidth_ = pattern->GetAttr<Dimension>("text_overlay_menu_button_width", 0.0_vp);
79                 theme->menuButtonHeight_ = pattern->GetAttr<Dimension>("text_overlay_menu_button_height", 0.0_vp);
80                 theme->menuButtonTextStyle_.SetFontWeight(FontWeight(
81                     static_cast<int32_t>(pattern->GetAttr<double>("text_overlay_button_text_font_weight", 0.0))));
82                 theme->menuButtonPadding_ =
83                     Edge(pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_left", 0.0_vp).Value(),
84                         pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_top", 0.0_vp).Value(),
85                         pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_right", 0.0_vp).Value(),
86                         pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_bottom", 0.0_vp).Value(),
87                         pattern->GetAttr<Dimension>("text_overlay_menu_padding_left", 0.0_vp).Unit());
88                 theme->iconColor_ = pattern->GetAttr<Color>("icon_color", Color());
89                 theme->menuIconColor_ = pattern->GetAttr<Color>("memu_icon_color", Color());
90                 theme->handleColor_ = pattern->GetAttr<Color>("handle_outer_color", Color());
91                 theme->handleColorInner_ = pattern->GetAttr<Color>("handle_inner_color", Color());
92                 theme->menuBackgroundColor_ = pattern->GetAttr<Color>("menu_bg_color", Color());
93                 theme->buttonHoverColor_ = pattern->GetAttr<Color>("button_bg_color_hovered", Color());
94                 theme->buttonClickedColor_ = pattern->GetAttr<Color>("button_bg_color_clicked", Color());
95                 theme->moreOrBackIconColor_ = pattern->GetAttr<Color>("more_or_back_icon_color", Color());
96                 theme->menuButtonTextStyle_.SetTextColor(pattern->GetAttr<Color>(PATTERN_TEXT_COLOR, Color()));
97                 theme->menuButtonTextStyle_.SetFontSize(pattern->GetAttr<Dimension>(PATTERN_TEXT_SIZE, 0.0_fp));
98                 theme->handleDiameter_ = pattern->GetAttr<Dimension>("handle_outer_diameter", 0.0_vp);
99                 theme->handleDiameterInner_ = pattern->GetAttr<Dimension>("handle_inner_diameter", 0.0_vp);
100                 theme->moreButtonHeight_ = pattern->GetAttr<Dimension>("more_button_height", 24.0_vp);
101                 theme->selectOverlayMaxWidth_ = pattern->GetAttr<Dimension>("select_overlay_max_width", 280.0_vp);
102                 theme->alphaDisabled_ =
103                     pattern->GetAttr<double>(PATTERN_BG_COLOR_DISABLED_ALPHA, defaultTertiaryColorAlpha);
104                 theme->cameraInput_ = pattern->GetAttr<std::string>("camera_input", "Camera input");
105             } else {
106                 LOGW("find pattern of textoverlay fail");
107             }
108         }
109     };
110 
111     ~TextOverlayTheme() override = default;
112 
GetMenuBorder()113     const Border& GetMenuBorder() const
114     {
115         return menuBorder_;
116     }
117 
GetMenuBackgroundColor()118     const Color& GetMenuBackgroundColor() const
119     {
120         return menuBackgroundColor_;
121     }
122 
GetHandleColor()123     const Color& GetHandleColor() const
124     {
125         return handleColor_;
126     }
127 
GetHandleColorInner()128     const Color& GetHandleColorInner() const
129     {
130         return handleColorInner_;
131     }
132 
GetButtonClickedColor()133     const Color& GetButtonClickedColor() const
134     {
135         return buttonClickedColor_;
136     }
137 
GetButtonHoverColor()138     const Color& GetButtonHoverColor() const
139     {
140         return buttonHoverColor_;
141     }
142 
GetIconColor()143     const Color& GetIconColor() const
144     {
145         return iconColor_;
146     }
147 
GetMenuIconColor()148     const Color& GetMenuIconColor() const
149     {
150         return menuIconColor_;
151     }
152 
GetMoreOrBackIconColor()153     const Color& GetMoreOrBackIconColor() const
154     {
155         return moreOrBackIconColor_;
156     }
157 
GetMenuPadding()158     const Edge& GetMenuPadding() const
159     {
160         return menuPadding_;
161     }
162 
GetMenuButtonPadding()163     const Edge& GetMenuButtonPadding() const
164     {
165         return menuButtonPadding_;
166     }
167 
GetHandleDiameter()168     const Dimension& GetHandleDiameter() const
169     {
170         return handleDiameter_;
171     }
172 
GetHandleDiameterInner()173     const Dimension& GetHandleDiameterInner() const
174     {
175         return handleDiameterInner_;
176     }
177 
GetMenuSpacingWithText()178     const Dimension& GetMenuSpacingWithText() const
179     {
180         return menuSpacingWithText_;
181     }
182 
GetMenuButtonWidth()183     const Dimension& GetMenuButtonWidth() const
184     {
185         return menuButtonWidth_;
186     }
187 
GetMenuButtonHeight()188     const Dimension& GetMenuButtonHeight() const
189     {
190         return menuButtonHeight_;
191     }
192 
GetMoreButtonHeight()193     const Dimension& GetMoreButtonHeight() const
194     {
195         return moreButtonHeight_;
196     }
197 
GetSelectOverlayMaxWidth()198     const Dimension& GetSelectOverlayMaxWidth() const
199     {
200         return selectOverlayMaxWidth_;
201     }
202 
GetMenuButtonTextStyle()203     const TextStyle& GetMenuButtonTextStyle() const
204     {
205         return menuButtonTextStyle_;
206     }
207 
GetMenuToolbarHeight()208     Dimension GetMenuToolbarHeight() const
209     {
210         return 40.0_vp;
211     }
212 
GetDefaultMenuPositionX()213     float GetDefaultMenuPositionX()
214     {
215         return Dimension(16.0_vp).ConvertToPx();
216     }
217 
GetHandleLineWidth()218     Dimension GetHandleLineWidth() const
219     {
220         return 1.5_vp;
221     }
222 
GetHandleHotZoneRadius()223     Dimension GetHandleHotZoneRadius() const
224     {
225         return handleDiameter_;
226     }
227 
GetBackResourceId()228     InternalResource::ResourceId GetBackResourceId() const
229     {
230         return backResourceId_;
231     }
232 
GetMoreResourceId()233     InternalResource::ResourceId GetMoreResourceId() const
234     {
235         return moreResourceId_;
236     }
237 
GetAlphaDisabled()238     double GetAlphaDisabled() const
239     {
240         return alphaDisabled_;
241     }
242 
GetCameraInput()243     const std::string& GetCameraInput() const
244     {
245         return cameraInput_;
246     }
247 
248 protected:
249     TextOverlayTheme() = default;
250 
251 private:
252     Border menuBorder_;
253     Color iconColor_;
254     Color menuIconColor_;
255     Color menuBackgroundColor_;
256     Color handleColor_;
257     Color handleColorInner_;
258     Color buttonClickedColor_;
259     Color buttonHoverColor_;
260     Color moreOrBackIconColor_;
261     Edge menuPadding_;
262     Edge menuButtonPadding_;
263     Dimension handleDiameter_;
264     Dimension handleDiameterInner_;
265     Dimension menuSpacingWithText_;
266     Dimension menuButtonWidth_;
267     Dimension menuButtonHeight_;
268     Dimension moreButtonHeight_;
269     Dimension selectOverlayMaxWidth_;
270     TextStyle menuButtonTextStyle_;
271     double alphaDisabled_ = 0.0;
272     std::string cameraInput_;
273 
274     InternalResource::ResourceId backResourceId_ = InternalResource::ResourceId::NO_ID;
275     InternalResource::ResourceId moreResourceId_ = InternalResource::ResourceId::NO_ID;
276 };
277 
278 } // namespace OHOS::Ace
279 
280 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_THEME_H
281