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::Claim(new 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 590 protected: 591 DialogTheme() = default; 592 593 private: 594 Radius radius_; 595 Color backgroundColor_; 596 TextStyle titleTextStyle_; 597 TextStyle subtitleTextStyle_; 598 TextStyle contentTextStyle_; 599 Dimension titleMinFontSize_; 600 Dimension contentMinFontSize_; 601 Dimension buttonBottomTopMargin_; 602 Dimension titlePaddingHorizontal_; 603 uint32_t titleMaxLines_ = 1; 604 Edge defaultPadding_; 605 Edge adjustPadding_; 606 Edge titleDefaultPadding_; 607 Edge titleAdjustPadding_; 608 Edge contentDefaultPadding_; 609 Edge contentAdjustPadding_; 610 Edge actionsPadding_; 611 Edge buttonPaddingLeft_; 612 Edge buttonPaddingRight_; 613 Edge buttonPaddingCenter_; 614 Dimension buttonSpacingHorizontal_; 615 Dimension buttonSpacingVertical_; 616 Dimension dividerLength_; 617 Dimension dividerBetweenButtonWidth_; 618 Dimension dialogLandscapeHeightBoundary_; 619 Color buttonBackgroundColor_; 620 Color buttonClickedColor_; 621 Color buttonHighlightBgColor_; 622 Color buttonHighlightFontColor_; 623 Color buttonDefaultBgColor_; 624 Color buttonDefaultFontColor_; 625 Color emphasizeButtonTextColor_; 626 Dimension translateValue_; 627 double frameStart_ = 0.0; 628 double frameEnd_ = 1.0; 629 double scaleStart_ = 0.0; 630 double scaleEnd_ = 1.0; 631 double opacityStart_ = 0.0; 632 double opacityEnd_ = 1.0; 633 double minFontScaleForElderly_ = 1.75; 634 double dialogDefaultScale_ = 1.0; 635 double contentMaxFontScale_ = 3.2; 636 double contentLandscapeMaxFontScale_ = 2.0; 637 double buttonMaxFontScale_ = 3.2; 638 double buttonLandscapeMaxFontScale_ = 2.0; 639 double titleMaxFontScale_ = 2.0; 640 int32_t animationDurationIn_ = 250; 641 int32_t opacityAnimationDurIn_ = 150; 642 int32_t animationDurationOut_ = 250; 643 Color maskColorStart_; 644 Color maskColorEnd_; 645 Color dividerColor_; 646 Color commonButtonBgColor_; 647 Color commonButtonTextColor_; 648 Color emphasizeButtonBgColor_; 649 Dimension dividerWidth_; 650 Dimension dividerHeight_; 651 Edge dividerPadding_; 652 Dimension marginLeft_; 653 Dimension marginRight_; 654 Dimension marginBottom_; 655 Dimension buttonHeight_; 656 Dimension buttonTextSize_; 657 Dimension buttonMinTextSize_; 658 Dimension minButtonWidth_; 659 Dimension maxButtonWidth_; 660 Dimension defaultPaddingBottomFixed_; 661 Dimension defaultDialogMarginBottom_; 662 Dimension buttonPaddingBottom_; 663 Dimension singleButtonPaddingStart_; 664 Dimension singleButtonPaddingEnd_; 665 Dimension mutiButtonPaddingStart_; 666 Dimension mutiButtonPaddingEnd_; 667 Dimension mutiButtonPaddingHorizontal_; 668 Dimension mutiButtonPaddingVertical_; 669 std::string multipleDialogDisplay_; 670 bool expandDisplay_ = false; 671 Dimension buttonWithContentPadding_; 672 Dimension containerMaxWidth_; 673 uint32_t defaultShadowOn_ = 6; 674 uint32_t defaultShadowOff_ = 6; 675 DialogAlignment alignment_; 676 double maxSizeScaleLandscape_ = 0.9; 677 double maxSizeScalePortrait_ = 0.8; 678 FlexAlign scrollFlexAlign_ = FlexAlign::FLEX_START; 679 NG::MeasureType columnMeasureType_ = NG::MeasureType::MATCH_CONTENT; 680 int32_t dialogDoubleBorderEnable_ = 0; 681 double dialogOuterBorderWidth_ = 0.0f; 682 Color dialogOuterBorderColor_; 683 double dialogInnerBorderWidth_ = 0.0f; 684 Color dialogInnerBorderColor_; 685 Dimension paddingSingleTitle_; 686 Dimension paddingTopTitle_; 687 Dimension backgroundBorderWidth_; 688 double dialogRatioHeight_ = 0.9; 689 int32_t text_align_content_ = 0; 690 int32_t text_align_title_ = 0; 691 int32_t button_type_ = 0; 692 uint32_t shadowDialog_ = 6; 693 int32_t alignDialog_ = 3; 694 Dimension normalButtonFontSize_; 695 Color colorBgWithBlur_; 696 Color backgroundBorderColor_; 697 int dialogBackgroundBlurStyle_ = static_cast<int>(BlurStyle::COMPONENT_ULTRA_THICK); 698 }; 699 700 } // namespace OHOS::Ace 701 702 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_THEME_H 703