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