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