1 /* 2 * Copyright (c) 2021-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_SELECT_SELECT_THEME_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_THEME_H 18 19 #include "base/geometry/dimension.h" 20 #include "core/common/container.h" 21 #include "core/components/common/layout/constants.h" 22 #include "core/components/common/properties/color.h" 23 #include "core/components/common/properties/text_style.h" 24 #include "core/components/theme/theme.h" 25 #include "core/components/theme/theme_constants.h" 26 #include "core/components/theme/theme_constants_defines.h" 27 #include "core/components_ng/property/border_property.h" 28 #include "core/components_ng/property/calc_length.h" 29 30 namespace OHOS::Ace { 31 32 constexpr double SELECT_OPTION_LEFT_LENGTH = 16.0; 33 constexpr double SELECT_OPTION_TOP_LENGTH = 15.0; 34 constexpr double SELECT_OPTION_RIGHT_LENGTH = 16.0; 35 constexpr double SELECT_OPTION_BOTTOM_LENGTH = 15.0; 36 constexpr Dimension VERTICAL_INTERVAL = 14.4_vp; 37 constexpr Dimension MENU_END_ICON_WIDTH = 24.0_vp; 38 constexpr Dimension MENU_END_ICON_HEIGHT = 24.0_vp; 39 constexpr Dimension DEFAULT_MENU_WIDTH = 0.0_vp; 40 constexpr Dimension MIN_MENU_WIDTH = 64.0_vp; 41 42 /** 43 * SelectTheme defines color and styles of SelectComponent. SelectTheme should be build 44 * using SelectTheme::Builder. 45 */ 46 class SelectTheme final : public virtual Theme { 47 DECLARE_ACE_TYPE(SelectTheme, Theme); 48 49 public: 50 class Builder final { 51 public: 52 Builder() = default; 53 ~Builder() = default; 54 Build(const RefPtr<ThemeConstants> & themeConstants)55 RefPtr<SelectTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const 56 { 57 RefPtr<SelectTheme> theme = AceType::Claim(new SelectTheme()); 58 if (!themeConstants) { 59 return theme; 60 } 61 ParseNewPattern(themeConstants, theme); 62 Parse(themeConstants, theme); 63 return theme; 64 } 65 Parse(const RefPtr<ThemeConstants> & themeConstants,const RefPtr<SelectTheme> & theme)66 void Parse(const RefPtr<ThemeConstants>& themeConstants, const RefPtr<SelectTheme>& theme) const 67 { 68 if (!theme) { 69 return; 70 } 71 RefPtr<ThemeStyle> pattern = themeConstants->GetPatternByName(THEME_PATTERN_SELECT); 72 if (!pattern) { 73 LOGE("Pattern of select is null, please check!"); 74 return; 75 } 76 const double defaultTextColorAlpha = 0.9; 77 const double defaultDisabledColorAlpha = 0.4; 78 const double defaultSecondaryColorAlpha = 0.6; 79 const double defaultTertiaryColorAlpha = 0.6; 80 const double bgColorSelectedAlpha = 0.2; 81 82 theme->fontSize_ = pattern->GetAttr<Dimension>(PATTERN_TEXT_SIZE, theme->fontSize_); 83 theme->menuFontSize_ = pattern->GetAttr<Dimension>("menu_text_font_size", theme->menuFontSize_); 84 theme->menuTitleFontSize_ = 85 pattern->GetAttr<Dimension>("menu_title_text_font_size", theme->menuTitleFontSize_); 86 theme->menuTitleFontColor_ = pattern->GetAttr<Color>(PATTERN_TEXT_COLOR, theme->menuTitleFontColor_); 87 theme->menuTitleHeight_ = pattern->GetAttr<Dimension>("menu_title_height", theme->menuTitleHeight_); 88 theme->fontColor_ = 89 pattern->GetAttr<Color>("text_color", theme->fontColor_) 90 .BlendOpacity(pattern->GetAttr<double>("menu_text_primary_alpha", defaultTextColorAlpha)); 91 theme->disabledFontColorAlpha_ = 92 pattern->GetAttr<double>("color_disabled_alpha", defaultDisabledColorAlpha); 93 theme->disabledFontColor_ = theme->fontColor_.BlendOpacity(theme->disabledFontColorAlpha_); 94 theme->secondaryFontColor_ = 95 pattern->GetAttr<Color>(PATTERN_TEXT_COLOR, theme->fontColor_) 96 .BlendOpacity(pattern->GetAttr<double>("menu_text_secondary_alpha", defaultSecondaryColorAlpha)); 97 theme->menuFontColor_ = pattern->GetAttr<Color>("text_color", theme->menuFontColor_); 98 theme->disabledMenuFontColor_ = theme->menuFontColor_.BlendOpacity( 99 pattern->GetAttr<double>("menu_text_tertiary_alpha", defaultTertiaryColorAlpha)); 100 theme->clickedColor_ = pattern->GetAttr<Color>(PATTERN_BG_COLOR_CLICKED, theme->clickedColor_); 101 theme->selectedColor_ = 102 pattern->GetAttr<Color>(PATTERN_BG_COLOR_SELECTED, theme->selectedColor_) 103 .BlendOpacity(pattern->GetAttr<double>("bg_color_selected_alpha", bgColorSelectedAlpha)); 104 theme->selectedColorText_ = pattern->GetAttr<Color>(PATTERN_TEXT_COLOR_SELECTED, theme->selectedColorText_); 105 theme->hoverColor_ = pattern->GetAttr<Color>(PATTERN_BG_COLOR_HOVERED, theme->hoverColor_); 106 theme->backgroundColor_ = pattern->GetAttr<Color>("bg_color", theme->backgroundColor_); 107 theme->disabledBackgroundColor_ = 108 theme->disabledBackgroundColor_.BlendOpacity(theme->disabledFontColorAlpha_); 109 theme->lineColor_ = pattern->GetAttr<Color>("line_color", theme->lineColor_); 110 theme->spinnerColor_ = pattern->GetAttr<Color>("select_icon_color", theme->spinnerColor_); 111 theme->disabledSpinnerColor_ = theme->spinnerColor_.BlendOpacity(theme->disabledFontColorAlpha_); 112 theme->selectBorderRadius_ = pattern->GetAttr<Dimension>("border_radius", theme->selectBorderRadius_); 113 theme->menuBorderRadius_ = pattern->GetAttr<Dimension>("menu_border_radius", theme->menuBorderRadius_); 114 theme->innerBorderRadius_ = pattern->GetAttr<Dimension>("inner_border_radius", theme->innerBorderRadius_); 115 theme->menuIconPadding_ = pattern->GetAttr<Dimension>("menu_icon_padding", theme->menuIconPadding_); 116 theme->iconContentPadding_ = 117 pattern->GetAttr<Dimension>("icon_content_padding", theme->iconContentPadding_); 118 theme->menuIconColor_ = pattern->GetAttr<Color>("menu_icon_color", theme->menuIconColor_); 119 theme->dividerPaddingVertical_ = 120 pattern->GetAttr<Dimension>("divider_padding_vertical", theme->dividerPaddingVertical_); 121 theme->optionMinHeight_ = pattern->GetAttr<Dimension>("option_min_height", theme->optionMinHeight_); 122 theme->selectMenuPadding_ = pattern->GetAttr<Dimension>("select_menu_padding", theme->selectMenuPadding_); 123 theme->outPadding_ = pattern->GetAttr<Dimension>("out_padding", theme->outPadding_); 124 theme->defaultPaddingStart_ = 125 pattern->GetAttr<Dimension>("default_padding_start", theme->defaultPaddingStart_); 126 theme->defaultPaddingEnd_ = pattern->GetAttr<Dimension>("default_padding_end", theme->defaultPaddingEnd_); 127 theme->defaultPaddingTop_ = pattern->GetAttr<Dimension>("default_padding_top", theme->defaultPaddingTop_); 128 theme->defaultPaddingBottomFixed_ = 129 pattern->GetAttr<Dimension>("default_padding_bottom_fixed", theme->defaultPaddingBottomFixed_); 130 theme->contentSpinnerPadding_ = 131 pattern->GetAttr<Dimension>("content_spinner_padding", theme->contentSpinnerPadding_); 132 theme->menuAnimationOffset_ = 133 pattern->GetAttr<Dimension>("menu_animation_offset", theme->menuAnimationOffset_); 134 theme->spinnerWidth_ = pattern->GetAttr<Dimension>("spinner_width", theme->spinnerWidth_); 135 theme->spinnerHeight_ = pattern->GetAttr<Dimension>("spinner_height", theme->spinnerHeight_); 136 theme->defaultDividerWidth_ = 137 pattern->GetAttr<Dimension>("default_divider_width", theme->defaultDividerWidth_); 138 theme->selectMinWidth_ = pattern->GetAttr<Dimension>("select_min_width", theme->selectMinWidth_); 139 theme->selectDefaultHeight_ = pattern->GetAttr<Dimension>("select_min_height", theme->selectDefaultHeight_); 140 theme->iconSideLength_ = pattern->GetAttr<Dimension>("icon_side_length", theme->iconSideLength_); 141 theme->endIconWidth_ = MENU_END_ICON_WIDTH; 142 theme->endIconHeight_ = MENU_END_ICON_HEIGHT; 143 theme->contentMargin_ = pattern->GetAttr<Dimension>("content_margin", theme->contentMargin_); 144 theme->selectDefaultBgColor_ = 145 pattern->GetAttr<Color>("select_default_bg_color", theme->selectDefaultBgColor_); 146 theme->selectDefaultBorderRadius_ = 147 pattern->GetAttr<Dimension>("select_default_border_radius", theme->selectDefaultBorderRadius_); 148 if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) { 149 theme->expandDisplay_ = false; 150 } else { 151 std::string expandDisplay = pattern->GetAttr<std::string>("menu_expand_display", ""); 152 theme->expandDisplay_ = (expandDisplay == "true"); 153 } 154 theme->maxPaddingStart_ = pattern->GetAttr<Dimension>("max_padding_start", theme->maxPaddingStart_); 155 theme->maxPaddingEnd_ = pattern->GetAttr<Dimension>("max_padding_end", theme->maxPaddingEnd_); 156 } 157 ParseNewPattern(const RefPtr<ThemeConstants> & themeConstants,const RefPtr<SelectTheme> & theme)158 void ParseNewPattern(const RefPtr<ThemeConstants>& themeConstants, const RefPtr<SelectTheme>& theme) const 159 { 160 if (!theme) { 161 return; 162 } 163 RefPtr<ThemeStyle> pattern = themeConstants->GetPatternByName(THEME_PATTERN_SELECT); 164 if (!pattern) { 165 LOGE("Pattern of select is null, please check!"); 166 return; 167 } 168 theme->disabledColor_ = pattern->GetAttr<Color>("select_color_text_primary", Color(0x5C000000)); 169 theme->clickedColor_ = pattern->GetAttr<Color>("select_clicked_color", Color(0x19000000)); 170 theme->selectedColor_ = pattern->GetAttr<Color>("select_selected_color", Color(0x19254FF7)); 171 theme->fontFamily_ = "sans-serif"; 172 theme->fontSize_ = pattern->GetAttr<Dimension>("text_font_size", 16.0_fp); 173 theme->fontColor_ = pattern->GetAttr<Color>("select_font_color", Color(0xe5000000)); 174 theme->fontWeight_ = FontWeight::NORMAL; 175 theme->textDecoration_ = TextDecoration::NONE; 176 auto optionSize = pattern->GetAttr<int>("select_option_show_count", INT32_MAX); 177 theme->optionSize_ = optionSize < 0 ? theme->optionSize_ : static_cast<size_t>(optionSize); 178 theme->rrectSize_ = pattern->GetAttr<Dimension>("select_itself_rrect_size", 8.0_vp); 179 theme->popupBorderWidth_ = pattern->GetAttr<Dimension>("select_popup_border_width", 2.0_vp); 180 theme->popupShadowWidth_ = pattern->GetAttr<Dimension>("select_popup_shadow_width", 60.0_vp); 181 theme->popupRRectSize_ = pattern->GetAttr<Dimension>("select_popup_rrect_size", 16.0_vp); 182 theme->popupMinWidth_ = pattern->GetAttr<Dimension>("select_popup_min_width", 136.0_vp); 183 theme->normalPadding_ = pattern->GetAttr<Dimension>("select_normal_padding", 16.0_vp); 184 theme->iconSize_ = pattern->GetAttr<Dimension>("select_itself_icon_size", 8.0_vp); 185 theme->isTV_ = pattern->GetAttr<int>("select_is_tv", 0); 186 theme->horizontalSpacing_ = pattern->GetAttr<Dimension>("select_popup_spacing_horizontal", 24.0_vp); 187 theme->verticalSpacing_ = pattern->GetAttr<Dimension>("select_popup_spacing_vertical", 27.0_vp); 188 theme->contentSpacing_ = pattern->GetAttr<Dimension>("select_popup_spacing_content", 0.0_vp); 189 theme->selectShowTime_ = 250; // unit is ms. 190 theme->selectHideTime_ = 250; // unit is ms. 191 theme->menuShowTime_ = 250; // unit is ms. 192 theme->menuHideTime_ = 250; // unit is ms. 193 theme->hoverAnimationDuration_ = 250; 194 theme->pressAnimationDuration_ = 100; 195 theme->titleLeftPadding_ = Dimension(16.0, DimensionUnit::VP); 196 theme->titleTopPadding_ = Dimension(8.0, DimensionUnit::VP); 197 theme->titleRightPadding_ = Dimension(8.0, DimensionUnit::VP); 198 theme->titleBottomPadding_ = Dimension(16.0, DimensionUnit::VP); 199 theme->titleStyle_.SetFontSize(pattern->GetAttr<Dimension>("text_size_headline7", 24.0_vp)); 200 std::vector<std::string> families; 201 families.emplace_back("sans-serif"); 202 theme->titleStyle_.SetFontFamilies(families); 203 theme->titleStyle_.SetFontWeight(FontWeight::W500); 204 theme->titleStyle_.SetTextColor(pattern->GetAttr<Color>("select_font_color", Color(0xe5000000))); 205 theme->titleStyle_.SetTextDecoration(TextDecoration::NONE); 206 theme->optionPadding_ = Edge(SELECT_OPTION_LEFT_LENGTH, SELECT_OPTION_TOP_LENGTH, 207 SELECT_OPTION_RIGHT_LENGTH, SELECT_OPTION_BOTTOM_LENGTH, DimensionUnit::VP); 208 theme->optionInterval_ = theme->isTV_ ? Dimension(6.0, DimensionUnit::VP) : 0.0_vp; 209 theme->tvFocusTextColor_ = Color(0xE6000000); 210 theme->tvNormalBackColor_ = Color(0x33FFFFFF); 211 theme->tvBackColor_ = (theme->isTV_ ? Color(0x99000000) : Color::TRANSPARENT); 212 // disabled color 213 theme->normalDisableColor_ = pattern->GetAttr<Color>("select_option_disable_color", Color(0x32FFFFFF)); 214 theme->focusedDisableColor_ = 215 pattern->GetAttr<Color>("select_option_focused_disable_color", Color(0x5DFFFFFF)); 216 theme->normalTextDisableColor_ = 217 pattern->GetAttr<Color>("select_option_focused_disable_color", Color(0x5DFFFFFF)); 218 theme->focusedTextDisableColor_ = 219 pattern->GetAttr<Color>("select_option_focused_disable_text_color", Color(0x66000000)); 220 theme->optionTextStyle_.SetFontSize(pattern->GetAttr<Dimension>("text_font_size", 16.0_fp)); 221 theme->optionTextStyle_.SetFontFamilies({ pattern->GetAttr<std::string>("text_font_family_regular", 222 "sans-serif") }); 223 theme->optionTextStyle_.SetFontWeight(FontWeight::NORMAL); 224 theme->optionTextStyle_.SetTextColor(pattern->GetAttr<Color>("select_font_color", Color(0xe5000000))); 225 theme->optionTextStyle_.SetTextDecoration(TextDecoration::NONE); 226 } 227 }; 228 229 ~SelectTheme() override = default; 230 clone()231 RefPtr<SelectTheme> clone() 232 { 233 RefPtr<SelectTheme> theme = AceType::Claim(new SelectTheme()); 234 theme->disabledColor_ = disabledColor_; 235 theme->clickedColor_ = clickedColor_; 236 theme->selectedColor_ = selectedColor_; 237 theme->fontSize_ = fontSize_; 238 theme->fontFamily_ = fontFamily_; 239 theme->fontColor_ = fontColor_; 240 theme->disabledFontColor_ = disabledFontColor_; 241 theme->disabledFontColorAlpha_ = disabledFontColorAlpha_; 242 theme->secondaryFontColor_ = secondaryFontColor_; 243 theme->fontWeight_ = fontWeight_; 244 theme->textDecoration_ = textDecoration_; 245 theme->rrectSize_ = rrectSize_; 246 theme->iconSize_ = iconSize_; 247 theme->normalPadding_ = normalPadding_; 248 theme->optionSize_ = optionSize_; 249 theme->popupRRectSize_ = popupRRectSize_; 250 theme->popupMinWidth_ = popupMinWidth_; 251 theme->popupShadowWidth_ = popupShadowWidth_; 252 theme->popupBorderWidth_ = popupBorderWidth_; 253 theme->titleLeftPadding_ = titleLeftPadding_; 254 theme->titleTopPadding_ = titleTopPadding_; 255 theme->titleRightPadding_ = titleRightPadding_; 256 theme->titleBottomPadding_ = titleBottomPadding_; 257 theme->titleStyle_ = titleStyle_; 258 theme->isTV_ = isTV_; 259 theme->horizontalSpacing_ = horizontalSpacing_; 260 theme->verticalSpacing_ = verticalSpacing_; 261 theme->contentSpacing_ = contentSpacing_; 262 theme->menuHideTime_ = menuHideTime_; 263 theme->menuShowTime_ = menuShowTime_; 264 theme->selectShowTime_ = selectShowTime_; 265 theme->selectHideTime_ = selectHideTime_; 266 theme->hoverAnimationDuration_ = hoverAnimationDuration_; 267 theme->pressAnimationDuration_ = pressAnimationDuration_; 268 theme->optionPadding_ = optionPadding_; 269 theme->optionInterval_ = optionInterval_; 270 theme->optionMinHeight_ = optionMinHeight_; 271 theme->tvFocusTextColor_ = tvFocusTextColor_; 272 theme->tvNormalBackColor_ = tvNormalBackColor_; 273 theme->tvBackColor_ = tvBackColor_; 274 theme->focusedDisableColor_ = focusedDisableColor_; 275 theme->normalDisableColor_ = normalDisableColor_; 276 theme->focusedTextDisableColor_ = focusedTextDisableColor_; 277 theme->normalTextDisableColor_ = normalTextDisableColor_; 278 theme->spinnerColor_ = spinnerColor_; 279 theme->disabledSpinnerColor_ = disabledSpinnerColor_; 280 theme->backgroundColor_ = backgroundColor_; 281 theme->disabledBackgroundColor_ = disabledBackgroundColor_; 282 theme->hoverColor_ = hoverColor_; 283 theme->selectedColorText_ = selectedColorText_; 284 theme->lineColor_ = lineColor_; 285 theme->optionTextStyle_ = optionTextStyle_; 286 theme->selectBorderRadius_ = selectBorderRadius_; 287 theme->menuBorderRadius_ = menuBorderRadius_; 288 theme->innerBorderRadius_ = innerBorderRadius_; 289 theme->menuFontSize_ = menuFontSize_; 290 theme->menuTitleFontSize_ = menuTitleFontSize_; 291 theme->menuTitleFontColor_ = menuTitleFontColor_; 292 theme->menuTitleHeight_ = menuTitleHeight_; 293 theme->menuFontColor_ = menuFontColor_; 294 theme->disabledMenuFontColor_ = disabledMenuFontColor_; 295 theme->menuIconPadding_ = menuIconPadding_; 296 theme->iconContentPadding_ = iconContentPadding_; 297 theme->dividerPaddingVertical_ = dividerPaddingVertical_; 298 theme->menuIconColor_ = menuIconColor_; 299 theme->optionMinHeight_ = optionMinHeight_; 300 theme->selectMenuPadding_ = selectMenuPadding_; 301 theme->outPadding_ = outPadding_; 302 theme->defaultPaddingStart_ = defaultPaddingStart_; 303 theme->defaultPaddingEnd_ = defaultPaddingEnd_; 304 theme->defaultPaddingTop_ = defaultPaddingTop_; 305 theme->defaultPaddingBottomFixed_ = defaultPaddingBottomFixed_; 306 theme->contentSpinnerPadding_ = contentSpinnerPadding_; 307 theme->menuAnimationOffset_ = menuAnimationOffset_; 308 theme->spinnerWidth_ = spinnerWidth_; 309 theme->spinnerHeight_ = spinnerHeight_; 310 theme->defaultDividerWidth_ = defaultDividerWidth_; 311 theme->selectMinWidth_ = selectMinWidth_; 312 theme->selectDefaultHeight_ = selectDefaultHeight_; 313 theme->iconSideLength_ = iconSideLength_; 314 theme->endIconWidth_ = endIconWidth_; 315 theme->endIconHeight_ = endIconHeight_; 316 theme->contentMargin_ = contentMargin_; 317 theme->selectDefaultBgColor_ = selectDefaultBgColor_; 318 theme->selectDefaultBorderRadius_ = selectDefaultBorderRadius_; 319 theme->expandDisplay_ = expandDisplay_; 320 theme->maxPaddingStart_ = maxPaddingStart_; 321 theme->maxPaddingEnd_ = maxPaddingEnd_; 322 return theme; 323 } 324 GetSelectedColorText()325 const Color& GetSelectedColorText() const 326 { 327 return selectedColorText_; 328 } 329 GetHoverColor()330 const Color& GetHoverColor() const 331 { 332 return hoverColor_; 333 } 334 GetBackgroundColor()335 const Color& GetBackgroundColor() const 336 { 337 return backgroundColor_; 338 } 339 GetDisabledBackgroundColor()340 const Color& GetDisabledBackgroundColor() const 341 { 342 return disabledBackgroundColor_; 343 } 344 GetDisabledColor()345 const Color& GetDisabledColor() const 346 { 347 return disabledColor_; 348 } SetDisabledColor(const Color & value)349 void SetDisabledColor(const Color& value) 350 { 351 disabledColor_ = value; 352 } 353 GetClickedColor()354 const Color& GetClickedColor() const 355 { 356 return clickedColor_; 357 } SetClickedColor(const Color & value)358 void SetClickedColor(const Color& value) 359 { 360 clickedColor_ = value; 361 } 362 GetSelectedColor()363 const Color& GetSelectedColor() const 364 { 365 return selectedColor_; 366 } 367 SetSelectedColor(const Color & value)368 void SetSelectedColor(const Color& value) 369 { 370 selectedColor_ = value; 371 } 372 GetFontSize()373 const Dimension& GetFontSize() const 374 { 375 return fontSize_; 376 } SetFontSize(const Dimension & value)377 void SetFontSize(const Dimension& value) 378 { 379 fontSize_ = value; 380 } 381 GetFontColor()382 const Color& GetFontColor() const 383 { 384 return fontColor_; 385 } SetFontColor(const Color & value)386 void SetFontColor(const Color& value) 387 { 388 fontColor_ = value; 389 } 390 GetDisabledFontColor()391 const Color& GetDisabledFontColor() const 392 { 393 return disabledFontColor_; 394 } 395 GetDisabledFontColorAlpha()396 double GetDisabledFontColorAlpha() const 397 { 398 return disabledFontColorAlpha_; 399 } 400 GetSecondaryFontColor()401 const Color& GetSecondaryFontColor() const 402 { 403 return secondaryFontColor_; 404 } 405 GetFontFamily()406 const std::string& GetFontFamily() const 407 { 408 return fontFamily_; 409 } SetFontFamily(const std::string & value)410 void SetFontFamily(const std::string& value) 411 { 412 fontFamily_ = value; 413 } 414 GetFontWeight()415 FontWeight GetFontWeight() const 416 { 417 return fontWeight_; 418 } SetFontWeight(FontWeight value)419 void SetFontWeight(FontWeight value) 420 { 421 fontWeight_ = value; 422 } 423 GetTextDecoration()424 TextDecoration GetTextDecoration() const 425 { 426 return textDecoration_; 427 } SetTextDecoration(TextDecoration value)428 void SetTextDecoration(TextDecoration value) 429 { 430 textDecoration_ = value; 431 } 432 GetOptionSize()433 std::size_t GetOptionSize() const 434 { 435 return optionSize_; 436 } SetOptionSize(std::size_t value)437 void SetOptionSize(std::size_t value) 438 { 439 optionSize_ = value; 440 } 441 GetRRectSize()442 const Dimension& GetRRectSize() const 443 { 444 return rrectSize_; 445 } SetRRectSize(const Dimension & value)446 void SetRRectSize(const Dimension& value) 447 { 448 rrectSize_ = value; 449 } 450 GetPopupRRectSize()451 const Dimension& GetPopupRRectSize() const 452 { 453 return popupRRectSize_; 454 } SetPopupRRectSize(const Dimension & value)455 void SetPopupRRectSize(const Dimension& value) 456 { 457 popupRRectSize_ = value; 458 } 459 GetPopupBorderWidth()460 const Dimension& GetPopupBorderWidth() const 461 { 462 return popupBorderWidth_; 463 } SetPopupBorderWidth(const Dimension & value)464 void SetPopupBorderWidth(const Dimension& value) 465 { 466 popupBorderWidth_ = value; 467 } 468 GetPopupShadowWidth()469 const Dimension& GetPopupShadowWidth() const 470 { 471 return popupShadowWidth_; 472 } SetPopupShadowWidth(const Dimension & value)473 void SetPopupShadowWidth(const Dimension& value) 474 { 475 popupShadowWidth_ = value; 476 } 477 GetPopupMinWidth()478 const Dimension& GetPopupMinWidth() const 479 { 480 return popupMinWidth_; 481 } SetPopupMinWidth(const Dimension & value)482 void SetPopupMinWidth(const Dimension& value) 483 { 484 popupMinWidth_ = value; 485 } 486 GetNormalPadding()487 const Dimension& GetNormalPadding() const 488 { 489 return normalPadding_; 490 } SetNormalPadding(const Dimension & value)491 void SetNormalPadding(const Dimension& value) 492 { 493 normalPadding_ = value; 494 } 495 GetIconSize()496 const Dimension& GetIconSize() const 497 { 498 return iconSize_; 499 } SetIconSize(const Dimension & value)500 void SetIconSize(const Dimension& value) 501 { 502 iconSize_ = value; 503 } 504 GetTitleLeftPadding()505 const Dimension& GetTitleLeftPadding() const 506 { 507 return titleLeftPadding_; 508 } SetTitleLeftPadding(const Dimension & value)509 void SetTitleLeftPadding(const Dimension& value) 510 { 511 titleLeftPadding_ = value; 512 } 513 GetTitleTopPadding()514 const Dimension& GetTitleTopPadding() const 515 { 516 return titleTopPadding_; 517 } SetTitleTopPadding(const Dimension & value)518 void SetTitleTopPadding(const Dimension& value) 519 { 520 titleTopPadding_ = value; 521 } 522 GetTitleRightPadding()523 const Dimension& GetTitleRightPadding() const 524 { 525 return titleRightPadding_; 526 } SetTitleRightPadding(const Dimension & value)527 void SetTitleRightPadding(const Dimension& value) 528 { 529 titleRightPadding_ = value; 530 } 531 GetTitleBottomPadding()532 const Dimension& GetTitleBottomPadding() const 533 { 534 return titleBottomPadding_; 535 } SetTitleBottomPadding(const Dimension & value)536 void SetTitleBottomPadding(const Dimension& value) 537 { 538 titleBottomPadding_ = value; 539 } 540 GetTitleStyle()541 const TextStyle& GetTitleStyle() 542 { 543 return titleStyle_; 544 } SetTitleStyle(const TextStyle & value)545 void SetTitleStyle(const TextStyle& value) 546 { 547 titleStyle_ = value; 548 } 549 IsTV()550 bool IsTV() const 551 { 552 return isTV_; 553 } SetIsTV(bool isTV)554 void SetIsTV(bool isTV) 555 { 556 isTV_ = isTV; 557 } 558 GetHorizontalSpacing()559 const Dimension& GetHorizontalSpacing() const 560 { 561 return horizontalSpacing_; 562 } SetHorizontalSpacing(const Dimension & horizontalSpacing)563 void SetHorizontalSpacing(const Dimension& horizontalSpacing) 564 { 565 horizontalSpacing_ = horizontalSpacing; 566 } 567 GetVerticalSpacing()568 const Dimension& GetVerticalSpacing() const 569 { 570 return verticalSpacing_; 571 } SetVerticalSpacing(const Dimension & verticalSpacing)572 void SetVerticalSpacing(const Dimension& verticalSpacing) 573 { 574 verticalSpacing_ = verticalSpacing; 575 } 576 GetContentSpacing()577 const Dimension& GetContentSpacing() const 578 { 579 return contentSpacing_; 580 } SetContentSpacing(const Dimension & contentSpacing)581 void SetContentSpacing(const Dimension& contentSpacing) 582 { 583 contentSpacing_ = contentSpacing; 584 } 585 GetOptionPadding()586 const Edge& GetOptionPadding() const 587 { 588 return optionPadding_; 589 } SetOptionPadding(const Edge & value)590 void SetOptionPadding(const Edge& value) 591 { 592 optionPadding_ = value; 593 } 594 GetShowTime(bool isMenu)595 uint32_t GetShowTime(bool isMenu) const 596 { 597 if (isMenu) { 598 return menuShowTime_; 599 } else { 600 return selectShowTime_; 601 } 602 } 603 GetHideTime(bool isMenu)604 uint32_t GetHideTime(bool isMenu) const 605 { 606 if (isMenu) { 607 return menuHideTime_; 608 } else { 609 return selectHideTime_; 610 } 611 } 612 GetHoverAnimationDuration()613 int32_t GetHoverAnimationDuration() const 614 { 615 return hoverAnimationDuration_; 616 } 617 GetPressAnimationDuration()618 int32_t GetPressAnimationDuration() const 619 { 620 return pressAnimationDuration_; 621 } 622 623 SelectTheme() = default; 624 IsAllowScale()625 bool IsAllowScale() const 626 { 627 return allowScale_; 628 } 629 SetAllowScale(bool allowScale)630 void SetAllowScale(bool allowScale) 631 { 632 allowScale_ = allowScale; 633 } 634 GetOptionInterval()635 const Dimension& GetOptionInterval() const 636 { 637 return optionInterval_; 638 } 639 GetOptionMinHeight()640 const Dimension& GetOptionMinHeight() const 641 { 642 return optionMinHeight_; 643 } 644 GetTvFocusTextColor()645 const Color& GetTvFocusTextColor() const 646 { 647 return tvFocusTextColor_; 648 } 649 GetTvNormalBackColor()650 const Color& GetTvNormalBackColor() const 651 { 652 return tvNormalBackColor_; 653 } 654 GetTvBackColor()655 const Color& GetTvBackColor() const 656 { 657 return tvBackColor_; 658 } 659 GetFocusedDisableColor()660 const Color& GetFocusedDisableColor() const 661 { 662 return focusedDisableColor_; 663 } 664 GetNormalDisableColor()665 const Color& GetNormalDisableColor() const 666 { 667 return normalDisableColor_; 668 } 669 GetFocusedTextDisableColor()670 const Color& GetFocusedTextDisableColor() const 671 { 672 return focusedTextDisableColor_; 673 } 674 GetNormalTextDisableColor()675 const Color& GetNormalTextDisableColor() const 676 { 677 return normalTextDisableColor_; 678 } 679 GetSpinnerColor()680 const Color& GetSpinnerColor() const 681 { 682 return spinnerColor_; 683 } 684 GetDisabledSpinnerColor()685 const Color& GetDisabledSpinnerColor() const 686 { 687 return disabledSpinnerColor_; 688 } 689 GetMenuIconColor()690 const Color& GetMenuIconColor() const 691 { 692 return menuIconColor_; 693 } 694 GetLineColor()695 const Color& GetLineColor() const 696 { 697 return lineColor_; 698 } 699 GetOptionTextStyle()700 const TextStyle& GetOptionTextStyle() const 701 { 702 return optionTextStyle_; 703 } 704 GetSelectBorderRadius()705 const Dimension& GetSelectBorderRadius() const 706 { 707 return selectBorderRadius_; 708 } 709 GetMenuBorderRadius()710 const Dimension& GetMenuBorderRadius() const 711 { 712 return menuBorderRadius_; 713 } 714 GetInnerBorderRadius()715 const Dimension& GetInnerBorderRadius() const 716 { 717 return innerBorderRadius_; 718 } 719 GetMenuFontSize()720 const Dimension& GetMenuFontSize() const 721 { 722 return menuFontSize_; 723 } 724 GetMenuTitleFontSize()725 const Dimension& GetMenuTitleFontSize() const 726 { 727 return menuTitleFontSize_; 728 } 729 GetMenuTitleFontColor()730 const Color& GetMenuTitleFontColor() const 731 { 732 return menuTitleFontColor_; 733 } 734 GetMenuTitleHeight()735 const Dimension& GetMenuTitleHeight() const 736 { 737 return menuTitleHeight_; 738 } 739 GetMenuFontColor()740 const Color& GetMenuFontColor() const 741 { 742 return menuFontColor_; 743 } 744 GetDisabledMenuFontColor()745 const Color& GetDisabledMenuFontColor() const 746 { 747 return disabledMenuFontColor_; 748 } SetDisabledMenuFontColor(const Color & value)749 void SetDisabledMenuFontColor(const Color& value) 750 { 751 disabledMenuFontColor_ = value; 752 } 753 GetMenuIconPadding()754 const Dimension& GetMenuIconPadding() const 755 { 756 return menuIconPadding_; 757 } 758 GetIconContentPadding()759 const Dimension& GetIconContentPadding() const 760 { 761 return iconContentPadding_; 762 } 763 GetDividerPaddingVertical()764 const Dimension& GetDividerPaddingVertical() const 765 { 766 return dividerPaddingVertical_; 767 } 768 GetSelectMenuPadding()769 const Dimension& GetSelectMenuPadding() const 770 { 771 return selectMenuPadding_; 772 } 773 GetOutPadding()774 const Dimension& GetOutPadding() const 775 { 776 return outPadding_; 777 } 778 GetDefaultPaddingStart()779 const Dimension& GetDefaultPaddingStart() const 780 { 781 return defaultPaddingStart_; 782 } 783 GetDefaultPaddingEnd()784 const Dimension& GetDefaultPaddingEnd() const 785 { 786 return defaultPaddingEnd_; 787 } 788 GetDefaultPaddingTop()789 const Dimension& GetDefaultPaddingTop() const 790 { 791 return defaultPaddingTop_; 792 } 793 GetDefaultPaddingBottomFixed()794 const Dimension& GetDefaultPaddingBottomFixed() const 795 { 796 return defaultPaddingBottomFixed_; 797 } 798 GetContentSpinnerPadding()799 const Dimension& GetContentSpinnerPadding() const 800 { 801 return contentSpinnerPadding_; 802 } 803 GetMenuAnimationOffset()804 const Dimension& GetMenuAnimationOffset() const 805 { 806 return menuAnimationOffset_; 807 } 808 GetSpinnerWidth()809 const Dimension& GetSpinnerWidth() const 810 { 811 return spinnerWidth_; 812 } 813 GetSpinnerHeight()814 const Dimension& GetSpinnerHeight() const 815 { 816 return spinnerHeight_; 817 } 818 GetDefaultDividerWidth()819 const Dimension& GetDefaultDividerWidth() const 820 { 821 return defaultDividerWidth_; 822 } 823 GetSelectMinWidth()824 const Dimension& GetSelectMinWidth() const 825 { 826 return selectMinWidth_; 827 } 828 GetSelectDefaultHeight()829 const Dimension& GetSelectDefaultHeight() const 830 { 831 return selectDefaultHeight_; 832 } 833 GetIconSideLength()834 const Dimension& GetIconSideLength() const 835 { 836 return iconSideLength_; 837 } 838 GetEndIconWidth()839 const Dimension& GetEndIconWidth() const 840 { 841 return endIconWidth_; 842 } 843 GetEndIconHeight()844 const Dimension& GetEndIconHeight() const 845 { 846 return endIconHeight_; 847 } 848 GetContentMargin()849 const Dimension& GetContentMargin() const 850 { 851 return contentMargin_; 852 } 853 GetSelectDefaultBgColor()854 const Color& GetSelectDefaultBgColor() const 855 { 856 return selectDefaultBgColor_; 857 } 858 GetSelectDefaultBorderRadius()859 const Dimension& GetSelectDefaultBorderRadius() const 860 { 861 return selectDefaultBorderRadius_; 862 } 863 GetExpandDisplay()864 bool GetExpandDisplay() const 865 { 866 return expandDisplay_; 867 } 868 GetMaxPaddingStart()869 const Dimension& GetMaxPaddingStart() const 870 { 871 return maxPaddingStart_; 872 } 873 GetMaxPaddingEnd()874 const Dimension& GetMaxPaddingEnd() const 875 { 876 return maxPaddingEnd_; 877 } 878 879 private: 880 Color disabledColor_; 881 Color clickedColor_; 882 Color selectedColor_; 883 884 Color backgroundColor_ = Color::WHITE; 885 Color disabledBackgroundColor_; 886 Color hoverColor_ = Color(0x0c000000); 887 Color selectedColorText_ = Color(0xff0a59f7); 888 Color lineColor_ = Color(0x33000000); 889 Color spinnerColor_ = Color(0xE5182431); 890 Color disabledSpinnerColor_; 891 Color menuIconColor_ = Color(0x99182431); 892 Color menuFontColor_; 893 Color disabledMenuFontColor_; 894 Color menuTitleFontColor_; 895 896 bool allowScale_ = true; 897 Dimension fontSize_; 898 Color fontColor_; 899 Color disabledFontColor_; 900 double disabledFontColorAlpha_ = 0.0; 901 Color secondaryFontColor_; 902 std::string fontFamily_; 903 FontWeight fontWeight_ { FontWeight::NORMAL }; 904 TextDecoration textDecoration_ { TextDecoration::NONE }; 905 906 std::size_t optionSize_ { 0 }; 907 Dimension rrectSize_; 908 Dimension iconSize_; 909 Dimension normalPadding_; 910 911 Dimension popupRRectSize_; 912 Dimension popupBorderWidth_; 913 Dimension popupShadowWidth_; 914 Dimension popupMinWidth_; 915 916 Dimension titleLeftPadding_; 917 Dimension titleTopPadding_; 918 Dimension titleRightPadding_; 919 Dimension titleBottomPadding_; 920 Dimension horizontalSpacing_; 921 Dimension verticalSpacing_; 922 Dimension contentSpacing_; 923 Dimension optionInterval_; 924 Dimension optionMinHeight_; 925 926 Dimension selectBorderRadius_; 927 Dimension menuBorderRadius_; 928 Dimension innerBorderRadius_; 929 Dimension menuFontSize_; 930 Dimension menuTitleFontSize_; 931 Dimension menuTitleHeight_; 932 Dimension menuIconPadding_; 933 Dimension iconContentPadding_; 934 Dimension dividerPaddingVertical_; 935 936 Dimension selectMenuPadding_; 937 Dimension outPadding_; 938 Dimension defaultPaddingStart_; 939 Dimension defaultPaddingEnd_; 940 Dimension defaultPaddingTop_; 941 Dimension defaultPaddingBottomFixed_; 942 Dimension contentSpinnerPadding_; 943 Dimension menuAnimationOffset_; 944 Dimension spinnerWidth_; 945 Dimension spinnerHeight_; 946 Dimension defaultDividerWidth_; 947 948 Dimension selectMinWidth_; 949 Dimension selectDefaultHeight_; 950 Dimension iconSideLength_; 951 Dimension endIconWidth_; 952 Dimension endIconHeight_; 953 Dimension contentMargin_; 954 955 Color tvFocusTextColor_; 956 Color tvNormalBackColor_; 957 Color tvBackColor_; 958 959 Color focusedDisableColor_; 960 Color normalDisableColor_; 961 Color focusedTextDisableColor_; 962 Color normalTextDisableColor_; 963 964 TextStyle titleStyle_; 965 TextStyle optionTextStyle_; 966 bool isTV_ = false; 967 uint32_t menuShowTime_ = 0; 968 uint32_t selectShowTime_ = 0; 969 uint32_t menuHideTime_ = 0; 970 uint32_t selectHideTime_ = 0; 971 int32_t hoverAnimationDuration_ = 0; 972 int32_t pressAnimationDuration_ = 0; 973 974 Edge optionPadding_; 975 976 Color selectDefaultBgColor_; 977 Dimension selectDefaultBorderRadius_; 978 bool expandDisplay_ = false; 979 Dimension maxPaddingStart_; 980 Dimension maxPaddingEnd_; 981 }; 982 983 } // namespace OHOS::Ace 984 985 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_THEME_H 986