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/utils/system_properties.h" 20 #include "core/common/container.h" 21 #include "core/components/common/layout/constants.h" 22 #include "core/components/common/layout/layout_param.h" 23 #include "core/components/common/properties/color.h" 24 #include "core/components/common/properties/edge.h" 25 #include "core/components/common/properties/radius.h" 26 #include "core/components/common/properties/text_style.h" 27 #include "core/components/theme/theme.h" 28 #include "core/components/theme/theme_constants.h" 29 #include "core/components/theme/theme_constants_defines.h" 30 31 namespace OHOS::Ace { 32 namespace { 33 constexpr double PRIMARY_RGBA_OPACITY = 0.9f; 34 constexpr double SECONDARY_RGBA_OPACITY = 0.6f; 35 constexpr int DEFAULT_ANIMATION_DURATION_OUT = 220; 36 constexpr int DEFAULT_ANIMATION_DURATION_IN = 250; 37 constexpr int DEFAULT_DIALOG_ALIGNMENT = 2; 38 constexpr double DEFAULT_DIALOG_MAXSIZE_SCALE_LANDSCAPE = 0.9f; 39 constexpr double DEFAULT_DIALOG_MAXSIZE_SCALE_PORTRAIT = 0.8f; 40 constexpr int DEFAULT_DIALOG_SCROLL_FLEX_ALIGN = 1; 41 constexpr int DEFAULT_DIALOG_COLUMN_MEASURE_TYPE = 1; 42 constexpr int DIALOG_TITLE_MAX_LINES_VALUE = 2; 43 44 } // namespace 45 /** 46 * DialogTheme defines color and styles of DialogComponent. DialogTheme should be built 47 * using DialogTheme::Builder. 48 */ 49 class DialogTheme : public virtual Theme { 50 DECLARE_ACE_TYPE(DialogTheme, Theme); 51 52 public: 53 class Builder { 54 public: 55 Builder() = default; 56 ~Builder() = default; 57 Build(const RefPtr<ThemeConstants> & themeConstants)58 RefPtr<DialogTheme> Build(const RefPtr<ThemeConstants>& themeConstants) const 59 { 60 RefPtr<DialogTheme> theme = AceType::Claim(new DialogTheme()); 61 if (!themeConstants) { 62 return theme; 63 } 64 // init theme from global data 65 ParseNewPattern(themeConstants, theme); 66 ParsePattern(themeConstants, theme); 67 return theme; 68 } 69 70 void ParsePattern(const RefPtr<ThemeConstants>& themeConstants, const RefPtr<DialogTheme>& theme) const; 71 void ParseNewPattern(const RefPtr<ThemeConstants>& themeConstants, const RefPtr<DialogTheme>& theme) const; 72 }; 73 74 ~DialogTheme() override = default; 75 GetRadius()76 const Radius& GetRadius() const 77 { 78 return radius_; 79 } 80 GetBackgroundColor()81 const Color& GetBackgroundColor() const 82 { 83 return backgroundColor_; 84 } 85 GetCommonButtonBgColor()86 const Color& GetCommonButtonBgColor() const 87 { 88 return commonButtonBgColor_; 89 } 90 GetEmphasizeButtonBgColor()91 const Color& GetEmphasizeButtonBgColor() const 92 { 93 return emphasizeButtonBgColor_; 94 } 95 GetTitleTextStyle()96 const TextStyle& GetTitleTextStyle() const 97 { 98 return titleTextStyle_; 99 } 100 GetSubTitleTextStyle()101 const TextStyle& GetSubTitleTextStyle() const 102 { 103 return subtitleTextStyle_; 104 } 105 GetTitleMinFontSize()106 const Dimension& GetTitleMinFontSize() const 107 { 108 return titleMinFontSize_; 109 } 110 GetContentMinFontSize()111 const Dimension& GetContentMinFontSize() const 112 { 113 return contentMinFontSize_; 114 } 115 GetTitleMaxLines()116 uint32_t GetTitleMaxLines() const 117 { 118 return titleMaxLines_; 119 } 120 GetContentTextStyle()121 const TextStyle& GetContentTextStyle() const 122 { 123 return contentTextStyle_; 124 } 125 GetDefaultPadding()126 const Edge& GetDefaultPadding() const 127 { 128 return defaultPadding_; 129 } 130 GetAdjustPadding()131 const Edge& GetAdjustPadding() const 132 { 133 return adjustPadding_; 134 } 135 GetTitleDefaultPadding()136 const Edge& GetTitleDefaultPadding() const 137 { 138 return titleDefaultPadding_; 139 } 140 GetTitleAdjustPadding()141 const Edge& GetTitleAdjustPadding() const 142 { 143 return titleAdjustPadding_; 144 } 145 GetContentDefaultPadding()146 const Edge& GetContentDefaultPadding() const 147 { 148 return contentDefaultPadding_; 149 } 150 GetContentAdjustPadding()151 const Edge& GetContentAdjustPadding() const 152 { 153 return contentAdjustPadding_; 154 } 155 GetActionsPadding()156 const Edge& GetActionsPadding() const 157 { 158 return actionsPadding_; 159 } 160 GetButtonPaddingLeft()161 const Edge& GetButtonPaddingLeft() const 162 { 163 return buttonPaddingLeft_; 164 } 165 GetButtonPaddingRight()166 const Edge& GetButtonPaddingRight() const 167 { 168 return buttonPaddingRight_; 169 } 170 GetButtonPaddingCenter()171 const Edge& GetButtonPaddingCenter() const 172 { 173 return buttonPaddingCenter_; 174 } 175 GetButtonPaddingBottom()176 const Dimension& GetButtonPaddingBottom() const 177 { 178 return buttonPaddingBottom_; 179 } 180 GetSingleButtonPaddingStart()181 const Dimension& GetSingleButtonPaddingStart() const 182 { 183 return singleButtonPaddingStart_; 184 } 185 GetSingleButtonPaddingEnd()186 const Dimension& GetSingleButtonPaddingEnd() const 187 { 188 return singleButtonPaddingEnd_; 189 } 190 GetMutiButtonPaddingStart()191 const Dimension& GetMutiButtonPaddingStart() const 192 { 193 return mutiButtonPaddingStart_; 194 } 195 GetMutiButtonPaddingEnd()196 const Dimension& GetMutiButtonPaddingEnd() const 197 { 198 return mutiButtonPaddingEnd_; 199 } 200 GetMutiButtonPaddingHorizontal()201 const Dimension& GetMutiButtonPaddingHorizontal() const 202 { 203 return mutiButtonPaddingHorizontal_; 204 } 205 GetMutiButtonPaddingVertical()206 const Dimension& GetMutiButtonPaddingVertical() const 207 { 208 return mutiButtonPaddingVertical_; 209 } 210 GetButtonSpacingHorizontal()211 const Dimension& GetButtonSpacingHorizontal() const 212 { 213 return buttonSpacingHorizontal_; 214 } 215 GetButtonSpacingVertical()216 const Dimension& GetButtonSpacingVertical() const 217 { 218 return buttonSpacingVertical_; 219 } 220 GetDividerLength()221 const Dimension& GetDividerLength() const 222 { 223 return dividerLength_; 224 } 225 GetDividerBetweenButtonWidth_()226 const Dimension& GetDividerBetweenButtonWidth_() const 227 { 228 return dividerBetweenButtonWidth_; 229 } 230 GetButtonBackgroundColor()231 const Color& GetButtonBackgroundColor() const 232 { 233 return buttonBackgroundColor_; 234 } 235 GetButtonClickedColor()236 const Color& GetButtonClickedColor() const 237 { 238 return buttonClickedColor_; 239 } 240 GetButtonHighlightBgColor()241 const Color& GetButtonHighlightBgColor() const 242 { 243 return buttonHighlightBgColor_; 244 } 245 GetButtonHighlightFontColor()246 const Color& GetButtonHighlightFontColor() const 247 { 248 return buttonHighlightFontColor_; 249 } 250 GetButtonDefaultBgColor()251 const Color& GetButtonDefaultBgColor() const 252 { 253 return buttonDefaultBgColor_; 254 } 255 GetButtonDefaultFontColor()256 const Color& GetButtonDefaultFontColor() const 257 { 258 return buttonDefaultFontColor_; 259 } 260 GetFrameStart()261 double GetFrameStart() const 262 { 263 return frameStart_; 264 } 265 GetFrameEnd()266 double GetFrameEnd() const 267 { 268 return frameEnd_; 269 } 270 GetScaleStart()271 double GetScaleStart() const 272 { 273 return scaleStart_; 274 } 275 GetScaleEnd()276 double GetScaleEnd() const 277 { 278 return scaleEnd_; 279 } 280 GetOpacityStart()281 double GetOpacityStart() const 282 { 283 return opacityStart_; 284 } 285 GetOpacityEnd()286 double GetOpacityEnd() const 287 { 288 return opacityEnd_; 289 } 290 GetTranslateValue()291 const Dimension& GetTranslateValue() const 292 { 293 return translateValue_; 294 } 295 GetMaskColorStart()296 const Color& GetMaskColorStart() const 297 { 298 return maskColorStart_; 299 } 300 GetMaskColorEnd()301 const Color& GetMaskColorEnd() const 302 { 303 return maskColorEnd_; 304 } 305 GetCommonButtonTextColor()306 const Color& GetCommonButtonTextColor() const 307 { 308 return commonButtonTextColor_; 309 } 310 GetEmphasizeButtonTextColor()311 const Color& GetEmphasizeButtonTextColor() const 312 { 313 return emphasizeButtonTextColor_; 314 } 315 GetOpacityAnimationDurIn()316 int32_t GetOpacityAnimationDurIn() const 317 { 318 return opacityAnimationDurIn_; 319 } 320 GetAnimationDurationIn()321 int32_t GetAnimationDurationIn() const 322 { 323 return animationDurationIn_; 324 } 325 GetAnimationDurationOut()326 int32_t GetAnimationDurationOut() const 327 { 328 return animationDurationOut_; 329 } 330 GetDividerColor()331 const Color& GetDividerColor() 332 { 333 return dividerColor_; 334 } 335 GetDividerWidth()336 const Dimension& GetDividerWidth() 337 { 338 return dividerWidth_; 339 } 340 GetDividerHeight()341 const Dimension& GetDividerHeight() 342 { 343 return dividerHeight_; 344 } 345 GetDividerPadding()346 const Edge& GetDividerPadding() 347 { 348 return dividerPadding_; 349 } 350 GetMarginBottom()351 const Dimension& GetMarginBottom() const 352 { 353 return marginBottom_; 354 } 355 GetMarginLeft()356 const Dimension& GetMarginLeft() const 357 { 358 return marginLeft_; 359 } 360 GetMarginRight()361 const Dimension& GetMarginRight() const 362 { 363 return marginRight_; 364 } 365 GetButtonHeight()366 const Dimension& GetButtonHeight() const 367 { 368 return buttonHeight_; 369 } 370 GetButtonTextSize()371 const Dimension& GetButtonTextSize() const 372 { 373 return buttonTextSize_; 374 } 375 GetMinButtonTextSize()376 const Dimension& GetMinButtonTextSize() const 377 { 378 return buttonMinTextSize_; 379 } 380 GetDefaultPaddingBottomFixed()381 const Dimension& GetDefaultPaddingBottomFixed() 382 { 383 return defaultPaddingBottomFixed_; 384 } 385 GetDefaultDialogMarginBottom()386 const Dimension& GetDefaultDialogMarginBottom() 387 { 388 return defaultDialogMarginBottom_; 389 } 390 GetMultipleDialogDisplay()391 const std::string& GetMultipleDialogDisplay() 392 { 393 return multipleDialogDisplay_; 394 } 395 GetExpandDisplay()396 bool GetExpandDisplay() const 397 { 398 return expandDisplay_; 399 } 400 GetButtonWithContentPadding()401 const Dimension& GetButtonWithContentPadding() const 402 { 403 return buttonWithContentPadding_; 404 } 405 GetContainerMaxWidth()406 const Dimension& GetContainerMaxWidth() const 407 { 408 return containerMaxWidth_; 409 } 410 GetDefaultShadowOn()411 uint32_t GetDefaultShadowOn() const 412 { 413 return defaultShadowOn_; 414 } 415 GetDefaultShadowOff()416 uint32_t GetDefaultShadowOff() const 417 { 418 return defaultShadowOff_; 419 } GetAlignment()420 const DialogAlignment& GetAlignment() const 421 { 422 return alignment_; 423 } 424 GetMaxSizeScaleLandscape()425 double GetMaxSizeScaleLandscape() const 426 { 427 return maxSizeScaleLandscape_; 428 } 429 GetMaxSizeScalePortrait()430 double GetMaxSizeScalePortrait() const 431 { 432 return maxSizeScalePortrait_; 433 } 434 GetScrollFlexAlign()435 const FlexAlign& GetScrollFlexAlign() const 436 { 437 return scrollFlexAlign_; 438 } 439 GetColumnMeasureType()440 const NG::MeasureType& GetColumnMeasureType() const 441 { 442 return columnMeasureType_; 443 } 444 GetMinFontScaleForElderly()445 double GetMinFontScaleForElderly() const 446 { 447 return minFontScaleForElderly_; 448 } 449 GetDialogDefaultScale()450 double GetDialogDefaultScale() const 451 { 452 return dialogDefaultScale_; 453 } 454 GetContentMaxFontScale()455 double GetContentMaxFontScale() const 456 { 457 return contentMaxFontScale_; 458 } 459 GetContentLandscapeMaxFontScale()460 double GetContentLandscapeMaxFontScale() const 461 { 462 return contentLandscapeMaxFontScale_; 463 } 464 GetButtonMaxFontScale()465 double GetButtonMaxFontScale() const 466 { 467 return buttonMaxFontScale_; 468 } 469 GetButtonLandscapeMaxFontScale()470 double GetButtonLandscapeMaxFontScale() const 471 { 472 return buttonLandscapeMaxFontScale_; 473 } 474 GetTitleMaxFontScale()475 double GetTitleMaxFontScale() const 476 { 477 return titleMaxFontScale_; 478 } 479 GetDialogLandscapeHeightBoundary()480 const Dimension& GetDialogLandscapeHeightBoundary() const 481 { 482 return dialogLandscapeHeightBoundary_; 483 } 484 485 protected: 486 DialogTheme() = default; 487 488 private: 489 Radius radius_; 490 Color backgroundColor_; 491 TextStyle titleTextStyle_; 492 TextStyle subtitleTextStyle_; 493 TextStyle contentTextStyle_; 494 Dimension titleMinFontSize_; 495 Dimension contentMinFontSize_; 496 uint32_t titleMaxLines_ = 1; 497 Edge defaultPadding_; 498 Edge adjustPadding_; 499 Edge titleDefaultPadding_; 500 Edge titleAdjustPadding_; 501 Edge contentDefaultPadding_; 502 Edge contentAdjustPadding_; 503 Edge actionsPadding_; 504 Edge buttonPaddingLeft_; 505 Edge buttonPaddingRight_; 506 Edge buttonPaddingCenter_; 507 Dimension buttonSpacingHorizontal_; 508 Dimension buttonSpacingVertical_; 509 Dimension dividerLength_; 510 Dimension dividerBetweenButtonWidth_; 511 Dimension dialogLandscapeHeightBoundary_; 512 Color buttonBackgroundColor_; 513 Color buttonClickedColor_; 514 Color buttonHighlightBgColor_; 515 Color buttonHighlightFontColor_; 516 Color buttonDefaultBgColor_; 517 Color buttonDefaultFontColor_; 518 Color emphasizeButtonTextColor_; 519 Dimension translateValue_; 520 double frameStart_ = 0.0; 521 double frameEnd_ = 1.0; 522 double scaleStart_ = 0.0; 523 double scaleEnd_ = 1.0; 524 double opacityStart_ = 0.0; 525 double opacityEnd_ = 1.0; 526 double minFontScaleForElderly_ = 1.75; 527 double dialogDefaultScale_ = 1.0; 528 double contentMaxFontScale_ = 3.2; 529 double contentLandscapeMaxFontScale_ = 2.0; 530 double buttonMaxFontScale_ = 3.2; 531 double buttonLandscapeMaxFontScale_ = 2.0; 532 double titleMaxFontScale_ = 2.0; 533 int32_t animationDurationIn_ = 250; 534 int32_t opacityAnimationDurIn_ = 150; 535 int32_t animationDurationOut_ = 250; 536 Color maskColorStart_; 537 Color maskColorEnd_; 538 Color dividerColor_; 539 Color commonButtonBgColor_; 540 Color commonButtonTextColor_; 541 Color emphasizeButtonBgColor_; 542 Dimension dividerWidth_; 543 Dimension dividerHeight_; 544 Edge dividerPadding_; 545 Dimension marginLeft_; 546 Dimension marginRight_; 547 Dimension marginBottom_; 548 Dimension buttonHeight_; 549 Dimension buttonTextSize_; 550 Dimension buttonMinTextSize_; 551 Dimension minButtonWidth_; 552 Dimension maxButtonWidth_; 553 Dimension defaultPaddingBottomFixed_; 554 Dimension defaultDialogMarginBottom_; 555 Dimension buttonPaddingBottom_; 556 Dimension singleButtonPaddingStart_; 557 Dimension singleButtonPaddingEnd_; 558 Dimension mutiButtonPaddingStart_; 559 Dimension mutiButtonPaddingEnd_; 560 Dimension mutiButtonPaddingHorizontal_; 561 Dimension mutiButtonPaddingVertical_; 562 std::string multipleDialogDisplay_; 563 bool expandDisplay_ = false; 564 Dimension buttonWithContentPadding_; 565 Dimension containerMaxWidth_; 566 uint32_t defaultShadowOn_ = 6; 567 uint32_t defaultShadowOff_ = 6; 568 DialogAlignment alignment_; 569 double maxSizeScaleLandscape_ = 0.9; 570 double maxSizeScalePortrait_ = 0.8; 571 FlexAlign scrollFlexAlign_ = FlexAlign::FLEX_START; 572 NG::MeasureType columnMeasureType_ = NG::MeasureType::MATCH_CONTENT; 573 }; 574 575 } // namespace OHOS::Ace 576 577 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_THEME_H 578