diff --git a/adapter/ohos/osal/resource_theme_style.cpp b/adapter/ohos/osal/resource_theme_style.cpp index 12e9fe61b01a1b5676e7accc26569f03490c6333..d4a71441f408b69c2a78ac78757e1d4bc088d244 100644 --- a/adapter/ohos/osal/resource_theme_style.cpp +++ b/adapter/ohos/osal/resource_theme_style.cpp @@ -143,6 +143,7 @@ static const std::unordered_set stringAttrs = { "text_overlay_menu_translate_label", "text_overlay_menu_share_label", "text_overlay_menu_search_label", + "menu_word_break", }; void ParseNumberUnit(const std::string& value, std::string& number, std::string& unit) diff --git a/frameworks/core/components/select/select_theme.h b/frameworks/core/components/select/select_theme.h index 25e9a2c9d78b0f3d0996c5e854dfa298bc3f0821..ea179b9b587a913314b8667b2bdb708f2b136ac1 100644 --- a/frameworks/core/components/select/select_theme.h +++ b/frameworks/core/components/select/select_theme.h @@ -331,6 +331,12 @@ public: theme->menuItemHorIntervalPadding_ = pattern->GetAttr("menu_item_hor_interval", theme->menuItemHorIntervalPadding_); theme->menuPadding_ = pattern->GetAttr("menu_padding_interval", theme->menuPadding_); + auto menuWordBreak = pattern->GetAttr("menu_word_break", static_cast(WordBreak::BREAK_WORD)); + if (menuWordBreak != static_cast(WordBreak::BREAK_WORD) && + menuWordBreak != static_cast(WordBreak::BREAK_ALL)) { + menuWordBreak = static_cast(WordBreak::BREAK_WORD); + } + theme->menuWordBreak_ = static_cast(menuWordBreak); } void ParseAttribute(const RefPtr& theme, const RefPtr& pattern) const @@ -513,6 +519,7 @@ public: theme->menuBackgroundBlurStyle_ = menuBackgroundBlurStyle_; theme->menuItemHorIntervalPadding_ = menuItemHorIntervalPadding_; theme->menuPadding_ = menuPadding_; + theme->menuWordBreak_ = menuWordBreak_; } void CloneWideScreenAttrs(RefPtr& theme) @@ -1487,6 +1494,11 @@ public: { return menuBackgroundBlurStyle_; } + + WordBreak GetWordBreak() const + { + return menuWordBreak_; + } private: Color disabledColor_; @@ -1657,6 +1669,7 @@ private: double optionFocusStyleType_ = 0.0; bool menuNeedFocus_ = false; int menuBackgroundBlurStyle_ = static_cast(BlurStyle::COMPONENT_ULTRA_THICK); + WordBreak menuWordBreak_ = WordBreak::BREAK_WORD; }; } // namespace OHOS::Ace diff --git a/frameworks/core/components_ng/pattern/menu/menu_item/menu_item_pattern.cpp b/frameworks/core/components_ng/pattern/menu/menu_item/menu_item_pattern.cpp index fe5faf84bbd5bd0294deac2c96c90e9fe2adb781..20a72aebc76dd786fa653c0630286737a0605c4f 100644 --- a/frameworks/core/components_ng/pattern/menu/menu_item/menu_item_pattern.cpp +++ b/frameworks/core/components_ng/pattern/menu/menu_item/menu_item_pattern.cpp @@ -2265,6 +2265,7 @@ void MenuItemPattern::UpdateTextOverflow(RefPtr& textPropert textProperty->UpdateTextMarqueeFadeout(true); textProperty->UpdateTextMarqueeStart(false); } + textProperty->UpdateWordBreak(theme->GetWordBreak()); } void MenuItemPattern::UpdateFont(RefPtr& menuProperty, RefPtr& theme, bool isLabel) diff --git a/frameworks/core/components_ng/pattern/menu/menu_view.cpp b/frameworks/core/components_ng/pattern/menu/menu_view.cpp index 091c4cc4687aa6678b0563bdc51b15f65fc3799a..8624d4d78a3a8eed5ec7209283e48e1b7c4df6d1 100644 --- a/frameworks/core/components_ng/pattern/menu/menu_view.cpp +++ b/frameworks/core/components_ng/pattern/menu/menu_view.cpp @@ -1841,6 +1841,7 @@ RefPtr MenuView::CreateText(const std::string& value, const RefPtr(theme->GetOptionContentNormalAlign()); auto convertValue = ConvertTxtTextAlign(IsRightToLeft, textAlign); textProperty->UpdateAlignment(convertValue); + textProperty->UpdateWordBreak(theme->GetWordBreak()); textNode->MountToParent(parent); textNode->MarkModifyDone(); diff --git a/test/unittest/core/pattern/menu/menu_view_test_ng.cpp b/test/unittest/core/pattern/menu/menu_view_test_ng.cpp index d86c822a152507fd7ac896ea63cf9edb91f989c5..206153474bf7f801dd4762a3964016eaacbcca4c 100644 --- a/test/unittest/core/pattern/menu/menu_view_test_ng.cpp +++ b/test/unittest/core/pattern/menu/menu_view_test_ng.cpp @@ -343,4 +343,32 @@ HWTEST_F(MenuViewTestNg, UpdateMenuProperties001, TestSize.Level1) MenuView::UpdateMenuProperties(wrapperNode_, menuFrameNode_, menuParam, MenuType::MENU); EXPECT_EQ(menuWrapperPattern->GetMenuParam().outlineWidth->leftDimen->ToString(), "10.00px"); } + +/** + * @tc.name: SetWordBreak001 + * @tc.desc: Test MenuView GetSetWordBreak is BREAK_WORD. + * @tc.type: FUNC + */ +HWTEST_F(MenuViewTestNg, SetWordBreak001, TestSize.Level1) +{ + auto theme = AceType::MakeRefPtr(); + theme->menuWordBreak_ = WordBreak::BREAK_WORD; + auto textProperty = AceType::MakeRefPtr(); + textProperty->UpdateWordBreak(theme->GetWordBreak()); + EXPECT_EQ(textProperty->GetWordBreak(), WordBreak::BREAK_WORD); +} + +/** + * @tc.name: SetWordBreak002 + * @tc.desc: Test MenuView GetSetWordBreak is BREAK_ALL. + * @tc.type: FUNC + */ +HWTEST_F(MenuViewTestNg, SetWordBreak002, TestSize.Level1) +{ + auto theme = AceType::MakeRefPtr(); + theme->menuWordBreak_ = WordBreak::BREAK_ALL; + auto textProperty = AceType::MakeRefPtr(); + textProperty->UpdateWordBreak(theme->GetWordBreak()); + EXPECT_EQ(textProperty->GetWordBreak(), WordBreak::BREAK_ALL); +} } // namespace OHOS::Ace::NG