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