• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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