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->menuSafeSpacing_ = pattern->GetAttr<Dimension>("text_overlay_menu_safe_spacing", 16.0_vp); 79 theme->menuButtonWidth_ = pattern->GetAttr<Dimension>("text_overlay_menu_button_width", 0.0_vp); 80 theme->menuButtonHeight_ = pattern->GetAttr<Dimension>("text_overlay_menu_button_height", 0.0_vp); 81 theme->menuButtonTextStyle_.SetFontWeight(FontWeight( 82 static_cast<int32_t>(pattern->GetAttr<double>("text_overlay_button_text_font_weight", 0.0)))); 83 theme->menuButtonPadding_ = 84 Edge(pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_left", 0.0_vp).Value(), 85 pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_top", 0.0_vp).Value(), 86 pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_right", 0.0_vp).Value(), 87 pattern->GetAttr<Dimension>("text_overlay_menu_button_padding_bottom", 0.0_vp).Value(), 88 pattern->GetAttr<Dimension>("text_overlay_menu_padding_left", 0.0_vp).Unit()); 89 theme->iconColor_ = pattern->GetAttr<Color>("icon_color", Color()); 90 theme->menuIconColor_ = pattern->GetAttr<Color>("memu_icon_color", Color()); 91 theme->handleColor_ = pattern->GetAttr<Color>("handle_outer_color", Color()); 92 theme->handleColorInner_ = pattern->GetAttr<Color>("handle_inner_color", Color()); 93 theme->menuBackgroundColor_ = pattern->GetAttr<Color>("menu_bg_color", Color()); 94 theme->buttonHoverColor_ = pattern->GetAttr<Color>("button_bg_color_hovered", Color()); 95 theme->buttonClickedColor_ = pattern->GetAttr<Color>("button_bg_color_clicked", Color()); 96 theme->moreOrBackIconColor_ = pattern->GetAttr<Color>("more_or_back_icon_color", Color()); 97 theme->menuButtonTextStyle_.SetTextColor(pattern->GetAttr<Color>(PATTERN_TEXT_COLOR, Color())); 98 theme->menuButtonTextStyle_.SetFontSize(pattern->GetAttr<Dimension>(PATTERN_TEXT_SIZE, 0.0_fp)); 99 theme->handleDiameter_ = pattern->GetAttr<Dimension>("handle_outer_diameter", 14.0_vp); 100 theme->handleDiameterInner_ = pattern->GetAttr<Dimension>("handle_inner_diameter", 12.0_vp); 101 theme->alphaDisabled_ = 102 pattern->GetAttr<double>(PATTERN_BG_COLOR_DISABLED_ALPHA, defaultTertiaryColorAlpha); 103 theme->cameraInput_ = pattern->GetAttr<std::string>("camera_input", "Camera input"); 104 theme->aiWrite_ = pattern->GetAttr<std::string>("ai_write_menu_name", "Celia writer"); 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 GetHandleDiameterStrokeWidth()173 const Dimension GetHandleDiameterStrokeWidth() const 174 { 175 return 2.0_vp; 176 } 177 GetHandleDiameterInner()178 const Dimension& GetHandleDiameterInner() const 179 { 180 return handleDiameterInner_; 181 } 182 GetMenuSpacingWithText()183 const Dimension& GetMenuSpacingWithText() const 184 { 185 return menuSpacingWithText_; 186 } 187 GetMenuSafeSpacing()188 const Dimension& GetMenuSafeSpacing() const 189 { 190 return menuSafeSpacing_; 191 } 192 GetMenuButtonWidth()193 const Dimension& GetMenuButtonWidth() const 194 { 195 return menuButtonWidth_; 196 } 197 GetMenuButtonHeight()198 const Dimension& GetMenuButtonHeight() const 199 { 200 return menuButtonHeight_; 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 2.0_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 GetAIWrite()248 const std::string& GetAIWrite() const 249 { 250 return aiWrite_; 251 } 252 protected: 253 TextOverlayTheme() = default; 254 255 private: 256 Border menuBorder_; 257 Color iconColor_; 258 Color menuIconColor_; 259 Color menuBackgroundColor_; 260 Color handleColor_; 261 Color handleColorInner_; 262 Color buttonClickedColor_; 263 Color buttonHoverColor_; 264 Color moreOrBackIconColor_; 265 Edge menuPadding_; 266 Edge menuButtonPadding_; 267 Dimension handleDiameter_; 268 Dimension handleDiameterInner_; 269 Dimension menuSpacingWithText_; 270 Dimension menuSafeSpacing_; 271 Dimension menuButtonWidth_; 272 Dimension menuButtonHeight_; 273 TextStyle menuButtonTextStyle_; 274 double alphaDisabled_ = 0.0; 275 std::string cameraInput_; 276 std::string aiWrite_; 277 278 InternalResource::ResourceId backResourceId_ = InternalResource::ResourceId::NO_ID; 279 InternalResource::ResourceId moreResourceId_ = InternalResource::ResourceId::NO_ID; 280 }; 281 282 } // namespace OHOS::Ace 283 284 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_THEME_H 285