• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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_DIALOG_DIALOG_THEME_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_THEME_H
18 
19 #include "base/geometry/dimension.h"
20 #include "base/utils/system_properties.h"
21 #include "core/common/container.h"
22 #include "core/components/common/layout/constants.h"
23 #include "core/components/common/layout/layout_param.h"
24 #include "core/components/common/properties/color.h"
25 #include "core/components/common/properties/blur_style_option.h"
26 #include "core/components/common/properties/edge.h"
27 #include "core/components/common/properties/radius.h"
28 #include "core/components/common/properties/text_style.h"
29 #include "core/components/dialog/dialog_properties.h"
30 #include "core/components/theme/theme.h"
31 #include "core/components/theme/theme_constants.h"
32 #include "core/components/theme/theme_constants_defines.h"
33 
34 namespace OHOS::Ace {
35 namespace {
36 constexpr double PRIMARY_RGBA_OPACITY = 0.9f;
37 constexpr double SECONDARY_RGBA_OPACITY = 0.6f;
38 constexpr int DEFAULT_ANIMATION_DURATION_OUT = 220;
39 constexpr int DEFAULT_ANIMATION_DURATION_IN = 250;
40 constexpr int DEFAULT_DIALOG_ALIGNMENT = 2;
41 constexpr double DEFAULT_DIALOG_MAXSIZE_SCALE_LANDSCAPE = 0.9f;
42 constexpr double DEFAULT_DIALOG_MAXSIZE_SCALE_PORTRAIT = 0.8f;
43 constexpr int DEFAULT_DIALOG_SCROLL_FLEX_ALIGN = 1;
44 constexpr int DEFAULT_DIALOG_COLUMN_MEASURE_TYPE = 1;
45 constexpr int DIALOG_TITLE_MAX_LINES_VALUE = 2;
46 constexpr float DEFAULT_ALIGN_DIALOG = 3.0;
47 constexpr float SHADOW_NONE = 6.0;
48 
49 } // namespace
50 /**
51  * DialogTheme defines color and styles of DialogComponent. DialogTheme should be built
52  * using DialogTheme::Builder.
53  */
54 class DialogTheme : public virtual Theme {
55     DECLARE_ACE_TYPE(DialogTheme, Theme);
56 
57 public:
58     class Builder {
59     public:
60         Builder() = default;
61         ~Builder() = default;
62 
Build(const RefPtr<ThemeConstants> & themeConstants)63         RefPtr<DialogTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const
64         {
65             RefPtr<DialogTheme> theme = AceType::MakeRefPtr<DialogTheme>();
66             if (!themeConstants) {
67                 return theme;
68             }
69             // init theme from global data
70             ParseNewPattern(themeConstants, theme);
71             ParsePattern(themeConstants, theme);
72             return theme;
73         }
74 
75         void ParsePattern(const RefPtr<ThemeConstants>& themeConstants, const RefPtr<DialogTheme>& theme) const;
76         void ParseNewPattern(const RefPtr<ThemeConstants>& themeConstants, const RefPtr<DialogTheme>& theme) const;
77     };
78 
79     ~DialogTheme() override = default;
80 
GetRadius()81     const Radius& GetRadius() const
82     {
83         return radius_;
84     }
85 
GetBackgroundColor()86     const Color& GetBackgroundColor() const
87     {
88         return backgroundColor_;
89     }
90 
GetCommonButtonBgColor()91     const Color& GetCommonButtonBgColor() const
92     {
93         return commonButtonBgColor_;
94     }
95 
GetEmphasizeButtonBgColor()96     const Color& GetEmphasizeButtonBgColor() const
97     {
98         return emphasizeButtonBgColor_;
99     }
100 
GetTitleTextStyle()101     const TextStyle& GetTitleTextStyle() const
102     {
103         return titleTextStyle_;
104     }
105 
GetSubTitleTextStyle()106     const TextStyle& GetSubTitleTextStyle() const
107     {
108         return subtitleTextStyle_;
109     }
110 
GetTitleMinFontSize()111     const Dimension& GetTitleMinFontSize() const
112     {
113         return titleMinFontSize_;
114     }
115 
GetContentMinFontSize()116     const Dimension& GetContentMinFontSize() const
117     {
118         return contentMinFontSize_;
119     }
120 
GetButtonBottomTopMargin()121     const Dimension& GetButtonBottomTopMargin() const
122     {
123         return buttonBottomTopMargin_;
124     }
125 
GetTitlePaddingHorizontal()126     const Dimension& GetTitlePaddingHorizontal() const
127     {
128         return titlePaddingHorizontal_;
129     }
130 
GetTitleMaxLines()131     uint32_t GetTitleMaxLines() const
132     {
133         return titleMaxLines_;
134     }
135 
GetContentTextStyle()136     const TextStyle& GetContentTextStyle() const
137     {
138         return contentTextStyle_;
139     }
140 
GetDefaultPadding()141     const Edge& GetDefaultPadding() const
142     {
143         return defaultPadding_;
144     }
145 
GetAdjustPadding()146     const Edge& GetAdjustPadding() const
147     {
148         return adjustPadding_;
149     }
150 
GetTitleDefaultPadding()151     const Edge& GetTitleDefaultPadding() const
152     {
153         return titleDefaultPadding_;
154     }
155 
GetTitleAdjustPadding()156     const Edge& GetTitleAdjustPadding() const
157     {
158         return titleAdjustPadding_;
159     }
160 
GetContentDefaultPadding()161     const Edge& GetContentDefaultPadding() const
162     {
163         return contentDefaultPadding_;
164     }
165 
GetContentAdjustPadding()166     const Edge& GetContentAdjustPadding() const
167     {
168         return contentAdjustPadding_;
169     }
170 
GetActionsPadding()171     const Edge& GetActionsPadding() const
172     {
173         return actionsPadding_;
174     }
175 
GetButtonPaddingLeft()176     const Edge& GetButtonPaddingLeft() const
177     {
178         return buttonPaddingLeft_;
179     }
180 
GetButtonPaddingRight()181     const Edge& GetButtonPaddingRight() const
182     {
183         return buttonPaddingRight_;
184     }
185 
GetButtonPaddingCenter()186     const Edge& GetButtonPaddingCenter() const
187     {
188         return buttonPaddingCenter_;
189     }
190 
GetButtonPaddingBottom()191     const Dimension& GetButtonPaddingBottom() const
192     {
193         return buttonPaddingBottom_;
194     }
195 
GetSingleButtonPaddingStart()196     const Dimension& GetSingleButtonPaddingStart() const
197     {
198         return singleButtonPaddingStart_;
199     }
200 
GetSingleButtonPaddingEnd()201     const Dimension& GetSingleButtonPaddingEnd() const
202     {
203         return singleButtonPaddingEnd_;
204     }
205 
GetMutiButtonPaddingStart()206     const Dimension& GetMutiButtonPaddingStart() const
207     {
208         return mutiButtonPaddingStart_;
209     }
210 
GetMutiButtonPaddingEnd()211     const Dimension& GetMutiButtonPaddingEnd() const
212     {
213         return mutiButtonPaddingEnd_;
214     }
215 
GetMutiButtonPaddingHorizontal()216     const Dimension& GetMutiButtonPaddingHorizontal() const
217     {
218         return mutiButtonPaddingHorizontal_;
219     }
220 
GetMutiButtonPaddingVertical()221     const Dimension& GetMutiButtonPaddingVertical() const
222     {
223         return mutiButtonPaddingVertical_;
224     }
225 
GetButtonSpacingHorizontal()226     const Dimension& GetButtonSpacingHorizontal() const
227     {
228         return buttonSpacingHorizontal_;
229     }
230 
GetButtonSpacingVertical()231     const Dimension& GetButtonSpacingVertical() const
232     {
233         return buttonSpacingVertical_;
234     }
235 
GetDividerLength()236     const Dimension& GetDividerLength() const
237     {
238         return dividerLength_;
239     }
240 
GetDividerBetweenButtonWidth_()241     const Dimension& GetDividerBetweenButtonWidth_() const
242     {
243         return dividerBetweenButtonWidth_;
244     }
245 
GetButtonBackgroundColor()246     const Color& GetButtonBackgroundColor() const
247     {
248         return buttonBackgroundColor_;
249     }
250 
GetButtonClickedColor()251     const Color& GetButtonClickedColor() const
252     {
253         return buttonClickedColor_;
254     }
255 
GetButtonHighlightBgColor()256     const Color& GetButtonHighlightBgColor() const
257     {
258         return buttonHighlightBgColor_;
259     }
260 
GetButtonHighlightFontColor()261     const Color& GetButtonHighlightFontColor() const
262     {
263         return buttonHighlightFontColor_;
264     }
265 
GetButtonDefaultBgColor()266     const Color& GetButtonDefaultBgColor() const
267     {
268         return buttonDefaultBgColor_;
269     }
270 
GetButtonDefaultFontColor()271     const Color& GetButtonDefaultFontColor() const
272     {
273         return buttonDefaultFontColor_;
274     }
275 
GetDialogBackgroundBlurStyle()276     int GetDialogBackgroundBlurStyle() const
277     {
278         return dialogBackgroundBlurStyle_;
279     }
280 
GetFrameStart()281     double GetFrameStart() const
282     {
283         return frameStart_;
284     }
285 
GetFrameEnd()286     double GetFrameEnd() const
287     {
288         return frameEnd_;
289     }
290 
GetScaleStart()291     double GetScaleStart() const
292     {
293         return scaleStart_;
294     }
295 
GetScaleEnd()296     double GetScaleEnd() const
297     {
298         return scaleEnd_;
299     }
300 
GetOpacityStart()301     double GetOpacityStart() const
302     {
303         return opacityStart_;
304     }
305 
GetOpacityEnd()306     double GetOpacityEnd() const
307     {
308         return opacityEnd_;
309     }
310 
GetTranslateValue()311     const Dimension& GetTranslateValue() const
312     {
313         return translateValue_;
314     }
315 
GetMaskColorStart()316     const Color& GetMaskColorStart() const
317     {
318         return maskColorStart_;
319     }
320 
GetMaskColorEnd()321     const Color& GetMaskColorEnd() const
322     {
323         return maskColorEnd_;
324     }
325 
GetCommonButtonTextColor()326     const Color& GetCommonButtonTextColor() const
327     {
328         return commonButtonTextColor_;
329     }
330 
GetEmphasizeButtonTextColor()331     const Color& GetEmphasizeButtonTextColor() const
332     {
333         return emphasizeButtonTextColor_;
334     }
335 
GetOpacityAnimationDurIn()336     int32_t GetOpacityAnimationDurIn() const
337     {
338         return opacityAnimationDurIn_;
339     }
340 
GetAnimationDurationIn()341     int32_t GetAnimationDurationIn() const
342     {
343         return animationDurationIn_;
344     }
345 
GetAnimationDurationOut()346     int32_t GetAnimationDurationOut() const
347     {
348         return animationDurationOut_;
349     }
350 
GetDividerColor()351     const Color& GetDividerColor()
352     {
353         return dividerColor_;
354     }
355 
GetDividerWidth()356     const Dimension& GetDividerWidth()
357     {
358         return dividerWidth_;
359     }
360 
GetDividerHeight()361     const Dimension& GetDividerHeight()
362     {
363         return dividerHeight_;
364     }
365 
GetDividerPadding()366     const Edge& GetDividerPadding()
367     {
368         return dividerPadding_;
369     }
370 
GetMarginBottom()371     const Dimension& GetMarginBottom() const
372     {
373         return marginBottom_;
374     }
375 
GetMarginLeft()376     const Dimension& GetMarginLeft() const
377     {
378         return marginLeft_;
379     }
380 
GetMarginRight()381     const Dimension& GetMarginRight() const
382     {
383         return marginRight_;
384     }
385 
GetButtonHeight()386     const Dimension& GetButtonHeight() const
387     {
388         return buttonHeight_;
389     }
390 
GetButtonTextSize()391     const Dimension& GetButtonTextSize() const
392     {
393         return buttonTextSize_;
394     }
395 
GetMinButtonTextSize()396     const Dimension& GetMinButtonTextSize() const
397     {
398         return buttonMinTextSize_;
399     }
400 
GetDefaultPaddingBottomFixed()401     const Dimension& GetDefaultPaddingBottomFixed()
402     {
403         return defaultPaddingBottomFixed_;
404     }
405 
GetDefaultDialogMarginBottom()406     const Dimension& GetDefaultDialogMarginBottom()
407     {
408         return defaultDialogMarginBottom_;
409     }
410 
GetMultipleDialogDisplay()411     const std::string& GetMultipleDialogDisplay()
412     {
413         return multipleDialogDisplay_;
414     }
415 
GetExpandDisplay()416     bool GetExpandDisplay() const
417     {
418         return expandDisplay_;
419     }
420 
GetButtonWithContentPadding()421     const Dimension& GetButtonWithContentPadding() const
422     {
423         return buttonWithContentPadding_;
424     }
425 
GetContainerMaxWidth()426     const Dimension& GetContainerMaxWidth() const
427     {
428         return containerMaxWidth_;
429     }
430 
GetDefaultShadowOn()431     uint32_t GetDefaultShadowOn() const
432     {
433         return defaultShadowOn_;
434     }
435 
GetDefaultShadowOff()436     uint32_t GetDefaultShadowOff() const
437     {
438         return defaultShadowOff_;
439     }
GetAlignment()440     const DialogAlignment& GetAlignment() const
441     {
442         return alignment_;
443     }
444 
GetMaxSizeScaleLandscape()445     double GetMaxSizeScaleLandscape() const
446     {
447         return maxSizeScaleLandscape_;
448     }
449 
GetMaxSizeScalePortrait()450     double GetMaxSizeScalePortrait() const
451     {
452         return maxSizeScalePortrait_;
453     }
454 
GetScrollFlexAlign()455     const FlexAlign& GetScrollFlexAlign() const
456     {
457         return scrollFlexAlign_;
458     }
459 
GetColumnMeasureType()460     const NG::MeasureType& GetColumnMeasureType() const
461     {
462         return columnMeasureType_;
463     }
464 
GetDialogDoubleBorderEnable()465     int32_t GetDialogDoubleBorderEnable() const
466     {
467         return dialogDoubleBorderEnable_;
468     }
469 
GetDialogOuterBorderWidth()470     double GetDialogOuterBorderWidth() const
471     {
472         return dialogOuterBorderWidth_;
473     }
474 
GetDialogOuterBorderColor()475     Color GetDialogOuterBorderColor() const
476     {
477         return dialogOuterBorderColor_;
478     }
479 
GetDialogInnerBorderWidth()480     double GetDialogInnerBorderWidth() const
481     {
482         return dialogInnerBorderWidth_;
483     }
484 
GetDialogInnerBorderColor()485     Color GetDialogInnerBorderColor() const
486     {
487         return dialogInnerBorderColor_;
488     }
489 
GetMinFontScaleForElderly()490     double GetMinFontScaleForElderly() const
491     {
492         return minFontScaleForElderly_;
493     }
494 
GetDialogDefaultScale()495     double GetDialogDefaultScale() const
496     {
497         return dialogDefaultScale_;
498     }
499 
GetContentMaxFontScale()500     double GetContentMaxFontScale() const
501     {
502         return contentMaxFontScale_;
503     }
504 
GetContentLandscapeMaxFontScale()505     double GetContentLandscapeMaxFontScale() const
506     {
507         return contentLandscapeMaxFontScale_;
508     }
509 
GetButtonMaxFontScale()510     double GetButtonMaxFontScale() const
511     {
512         return buttonMaxFontScale_;
513     }
514 
GetButtonLandscapeMaxFontScale()515     double GetButtonLandscapeMaxFontScale() const
516     {
517         return buttonLandscapeMaxFontScale_;
518     }
519 
GetTitleMaxFontScale()520     double GetTitleMaxFontScale() const
521     {
522         return titleMaxFontScale_;
523     }
524 
GetDialogLandscapeHeightBoundary()525     const Dimension& GetDialogLandscapeHeightBoundary() const
526     {
527         return dialogLandscapeHeightBoundary_;
528     }
529 
GetBackgroudBorderColor()530     const Color& GetBackgroudBorderColor() const
531     {
532         return backgroundBorderColor_;
533     }
534 
GetBackgroudBorderWidth()535     const Dimension& GetBackgroudBorderWidth()
536     {
537         return backgroundBorderWidth_;
538     }
539 
GetDialogRatioHeight()540     double GetDialogRatioHeight() const
541     {
542         return dialogRatioHeight_;
543     }
544 
GetTextAlignContent()545     int32_t GetTextAlignContent() const
546     {
547         return text_align_content_;
548     }
549 
GetTextAlignTitle()550     int32_t GetTextAlignTitle() const
551     {
552         return text_align_title_;
553     }
554 
GetShadowDialog()555     uint32_t GetShadowDialog() const
556     {
557         return shadowDialog_;
558     }
559 
GetAlignDialog()560     int32_t GetAlignDialog() const
561     {
562         return alignDialog_;
563     }
564 
GetButtonType()565     int32_t GetButtonType() const
566     {
567         return button_type_;
568     }
569 
GetColorBgWithBlur()570     const Color& GetColorBgWithBlur() const
571     {
572         return colorBgWithBlur_;
573     }
574 
GetPaddingTopTitle()575     const Dimension& GetPaddingTopTitle() const
576     {
577         return paddingTopTitle_;
578     }
579 
GetPaddingSingleTitle()580     const Dimension& GetPaddingSingleTitle() const
581     {
582         return paddingSingleTitle_;
583     }
584 
GetNormalButtonFontSize()585     const Dimension& GetNormalButtonFontSize() const
586     {
587         return normalButtonFontSize_;
588     }
589 
GetCancelText()590     const std::string& GetCancelText() const
591     {
592         return cancelText_;
593     }
594 
GetConfirmText()595     const std::string& GetConfirmText() const
596     {
597         return confirmText_;
598     }
599 
600 protected:
601     DialogTheme() = default;
602 
603 private:
604     Radius radius_;
605     Color backgroundColor_;
606     TextStyle titleTextStyle_;
607     TextStyle subtitleTextStyle_;
608     TextStyle contentTextStyle_;
609     Dimension titleMinFontSize_;
610     Dimension contentMinFontSize_;
611     Dimension buttonBottomTopMargin_;
612     Dimension titlePaddingHorizontal_;
613     uint32_t titleMaxLines_ = 1;
614     Edge defaultPadding_;
615     Edge adjustPadding_;
616     Edge titleDefaultPadding_;
617     Edge titleAdjustPadding_;
618     Edge contentDefaultPadding_;
619     Edge contentAdjustPadding_;
620     Edge actionsPadding_;
621     Edge buttonPaddingLeft_;
622     Edge buttonPaddingRight_;
623     Edge buttonPaddingCenter_;
624     Dimension buttonSpacingHorizontal_;
625     Dimension buttonSpacingVertical_;
626     Dimension dividerLength_;
627     Dimension dividerBetweenButtonWidth_;
628     Dimension dialogLandscapeHeightBoundary_;
629     Color buttonBackgroundColor_;
630     Color buttonClickedColor_;
631     Color buttonHighlightBgColor_;
632     Color buttonHighlightFontColor_;
633     Color buttonDefaultBgColor_;
634     Color buttonDefaultFontColor_;
635     Color emphasizeButtonTextColor_;
636     Dimension translateValue_;
637     double frameStart_ = 0.0;
638     double frameEnd_ = 1.0;
639     double scaleStart_ = 0.0;
640     double scaleEnd_ = 1.0;
641     double opacityStart_ = 0.0;
642     double opacityEnd_ = 1.0;
643     double minFontScaleForElderly_ = 1.75;
644     double dialogDefaultScale_ = 1.0;
645     double contentMaxFontScale_ = 3.2;
646     double contentLandscapeMaxFontScale_ = 2.0;
647     double buttonMaxFontScale_ = 3.2;
648     double buttonLandscapeMaxFontScale_ = 2.0;
649     double titleMaxFontScale_ = 2.0;
650     int32_t animationDurationIn_ = 250;
651     int32_t opacityAnimationDurIn_ = 150;
652     int32_t animationDurationOut_ = 250;
653     Color maskColorStart_;
654     Color maskColorEnd_;
655     Color dividerColor_;
656     Color commonButtonBgColor_;
657     Color commonButtonTextColor_;
658     Color emphasizeButtonBgColor_;
659     Dimension dividerWidth_;
660     Dimension dividerHeight_;
661     Edge dividerPadding_;
662     Dimension marginLeft_;
663     Dimension marginRight_;
664     Dimension marginBottom_;
665     Dimension buttonHeight_;
666     Dimension buttonTextSize_;
667     Dimension buttonMinTextSize_;
668     Dimension minButtonWidth_;
669     Dimension maxButtonWidth_;
670     Dimension defaultPaddingBottomFixed_;
671     Dimension defaultDialogMarginBottom_;
672     Dimension buttonPaddingBottom_;
673     Dimension singleButtonPaddingStart_;
674     Dimension singleButtonPaddingEnd_;
675     Dimension mutiButtonPaddingStart_;
676     Dimension mutiButtonPaddingEnd_;
677     Dimension mutiButtonPaddingHorizontal_;
678     Dimension mutiButtonPaddingVertical_;
679     std::string multipleDialogDisplay_;
680     bool expandDisplay_ = false;
681     Dimension buttonWithContentPadding_;
682     Dimension containerMaxWidth_;
683     uint32_t defaultShadowOn_ = 6;
684     uint32_t defaultShadowOff_ = 6;
685     DialogAlignment alignment_;
686     double maxSizeScaleLandscape_ = 0.9;
687     double maxSizeScalePortrait_ = 0.8;
688     FlexAlign scrollFlexAlign_ = FlexAlign::FLEX_START;
689     NG::MeasureType columnMeasureType_ = NG::MeasureType::MATCH_CONTENT;
690     int32_t dialogDoubleBorderEnable_ = 0;
691     double dialogOuterBorderWidth_ = 0.0f;
692     Color dialogOuterBorderColor_;
693     double dialogInnerBorderWidth_ = 0.0f;
694     Color dialogInnerBorderColor_;
695     Dimension paddingSingleTitle_;
696     Dimension paddingTopTitle_;
697     Dimension backgroundBorderWidth_;
698     double dialogRatioHeight_ = 0.9;
699     int32_t text_align_content_ = 0;
700     int32_t text_align_title_ = 0;
701     int32_t button_type_ = 0;
702     uint32_t shadowDialog_ = 6;
703     int32_t alignDialog_ = 3;
704     Dimension normalButtonFontSize_;
705     Color colorBgWithBlur_;
706     Color backgroundBorderColor_;
707     int dialogBackgroundBlurStyle_ = static_cast<int>(BlurStyle::COMPONENT_ULTRA_THICK);
708     std::string cancelText_;
709     std::string confirmText_;
710 };
711 
712 } // namespace OHOS::Ace
713 
714 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_THEME_H
715