diff --git a/frameworks/core/components/popup/popup_theme.h b/frameworks/core/components/popup/popup_theme.h index 4605999844e8a4cac5e070295c74df5dd243f333..2fdda83ec96ba1707acc3605fb004527cd6e6d38 100644 --- a/frameworks/core/components/popup/popup_theme.h +++ b/frameworks/core/components/popup/popup_theme.h @@ -100,6 +100,8 @@ public: pattern->GetAttr("popup_default_shadow_style", static_cast(ShadowStyle::OuterDefaultMD))); theme->popupBackgroundBlurStyle_ = pattern->GetAttr( "popup_background_blur_style", static_cast(BlurStyle::COMPONENT_ULTRA_THICK)); + theme->arrowHeight_ = pattern->GetAttr("popup_arrow_height", 8.0_vp); + theme->arrowWidth_ = pattern->GetAttr("popup_arrow_width", 16.0_vp); ParseAdditionalStylePattern(pattern, theme); ParseTipsPattern(pattern, theme); } @@ -304,6 +306,11 @@ public: return arrowHeight_; } + const Dimension& GetArrowWidth() const + { + return arrowWidth_; + } + float GetPopupAnimationOffset() const { return popupAnimationOffset_; @@ -543,6 +550,7 @@ private: Dimension buttonSpacing = 4.0_vp; Dimension littlePadding_ = 4.0_vp; Dimension arrowHeight_ = 8.0_vp; + Dimension arrowWidth_ = 16.0_vp; Dimension focusPaintWidth_ = 2.0_vp; Dimension buttonMiniMumWidth = 72.0_vp; Dimension bubbleMiniMumHeight_ = 48.0_vp; diff --git a/frameworks/core/components_ng/pattern/bubble/bubble_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/bubble/bubble_layout_algorithm.cpp index 52cbb735e1b9334b82ec84eb95bb287414212c95..703f75297b5bf656151478d96859835d69eff1f1 100644 --- a/frameworks/core/components_ng/pattern/bubble/bubble_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/bubble/bubble_layout_algorithm.cpp @@ -52,8 +52,6 @@ constexpr size_t ALIGNMENT_STEP_OFFSET = 1; constexpr Dimension KEYBOARD_SPACE = 8.0_vp; // help value to calculate p2 p4 position -constexpr Dimension DEFAULT_BUBBLE_ARROW_WIDTH = 16.0_vp; -constexpr Dimension DEFAULT_BUBBLE_ARROW_HEIGHT = 8.0_vp; Dimension DEFAULT_P2_HEIGHT = 7.32_vp; Dimension DEFAULT_P2_WIDTH = 1.5_vp; Dimension DEFAULT_P4_END_Y = 6.0_vp; @@ -188,11 +186,12 @@ double ConvertToPxByLayoutWrapper(const Dimension& dimension, LayoutWrapper* lay return pipelineContext->NormalizeToPx(dimension); } -void calculateArrowPoint(Dimension height, Dimension width, LayoutWrapper* layoutWrapper) +void calculateArrowPoint(Dimension height, Dimension width, LayoutWrapper* layoutWrapper, + const Dimension& defaultArrowWidth) { // When the popup or tips show in subwindow, layout algorithm's pipeline will run at main window then subwindow. // When user has set arrow width and unit is lpx, should convert to px by using main window's pipeline. - auto lastWidth = ConvertToPxByLayoutWrapper(DEFAULT_BUBBLE_ARROW_WIDTH, layoutWrapper); + auto lastWidth = ConvertToPxByLayoutWrapper(defaultArrowWidth, layoutWrapper); auto rateX = NearZero(lastWidth) ? 1.0f : ConvertToPxByLayoutWrapper(width, layoutWrapper) / lastWidth; BUBBLE_ARROW_WIDTH = width; BUBBLE_ARROW_HEIGHT = height; @@ -815,9 +814,9 @@ void BubbleLayoutAlgorithm::InitProps(const RefPtr& layout targetSpace_ = layoutProp->GetTargetSpace().value_or(popupTheme->GetTargetSpace()); placement_ = layoutProp->GetPlacement().value_or(Placement::BOTTOM); isCaretMode_ = layoutProp->GetIsCaretMode().value_or(true); - auto height = layoutProp->GetArrowHeight().value_or(DEFAULT_BUBBLE_ARROW_HEIGHT); - auto width = layoutProp->GetArrowWidth().value_or(DEFAULT_BUBBLE_ARROW_WIDTH); - calculateArrowPoint(height, width, layoutWrapper); + auto height = layoutProp->GetArrowHeight().value_or(popupTheme->GetArrowHeight()); + auto width = layoutProp->GetArrowWidth().value_or(popupTheme->GetArrowWidth()); + calculateArrowPoint(height, width, layoutWrapper, popupTheme->GetArrowWidth()); followCursor_ = isTips_ && layoutProp->GetShowAtAnchorValue(TipsAnchorType::TARGET) == TipsAnchorType::CURSOR; arrowHeight_ = height.ConvertToPx(); scaledBubbleSpacing_ = arrowHeight_; diff --git a/test/unittest/core/pattern/bubble/bubble_test_One_ng.cpp b/test/unittest/core/pattern/bubble/bubble_test_One_ng.cpp index 0be1b3a42548456d167e5e7a5246714423cc10ce..f63606671d61ac16c1ce96436dabf812426ca5e3 100644 --- a/test/unittest/core/pattern/bubble/bubble_test_One_ng.cpp +++ b/test/unittest/core/pattern/bubble/bubble_test_One_ng.cpp @@ -2419,8 +2419,8 @@ HWTEST_F(BubbleTestOneNg, CheckIfNeedRemoveArrow, TestSize.Level1) float xMax = 100.0; float yMin = 0.0; float yMax = 100.0; - Dimension BUBBLE_ARROW_HEIGHT = 8.0_vp; - layoutAlgorithm->arrowHeight_ = BUBBLE_ARROW_HEIGHT.ConvertToPx(); + auto popupTheme = AceType::MakeRefPtr(); + layoutAlgorithm->arrowHeight_ = popupTheme->arrowHeight_.ConvertToPx(); layoutAlgorithm->showArrow_ = true; layoutAlgorithm->avoidKeyboard_ = true;