From fafa3764be03a92b8a4f0088a4911d31dd48d904 Mon Sep 17 00:00:00 2001 From: zhanghang Date: Mon, 23 Jun 2025 13:54:27 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E8=A1=A8=E5=8D=95=E7=B1=BB=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E3=80=91=E6=B7=B1=E6=B5=85=E8=89=B2=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhanghang --- .../arkts_native_radio_bridge.cpp | 9 + .../arkts_native_slider_bridge.cpp | 5 +- .../declarative_frontend/jsview/js_radio.cpp | 12 +- .../declarative_frontend/jsview/js_select.cpp | 31 +-- .../declarative_frontend/jsview/js_slider.cpp | 4 + .../declarative_frontend/jsview/js_toggle.cpp | 27 +-- .../jsview/models/checkboxgroup_model_impl.h | 2 +- .../jsview/models/select_model_impl.cpp | 2 +- .../jsview/models/select_model_impl.h | 8 +- .../components/checkable/checkable_theme.h | 22 +- .../common/properties/popup_param.h | 8 +- .../core/components_ng/base/view_abstract.cpp | 8 +- .../base/view_abstract_model_ng.h | 2 +- .../pattern/button/button_model_ng.cpp | 22 +- .../pattern/button/button_pattern.cpp | 4 + .../pattern/checkbox/checkbox_model_ng.cpp | 54 +++-- .../pattern/checkbox/checkbox_model_ng.h | 5 +- .../pattern/checkbox/checkbox_pattern.cpp | 56 +---- .../pattern/checkbox/checkbox_pattern.h | 3 - .../checkboxgroup/checkboxgroup_model.h | 2 +- .../checkboxgroup/checkboxgroup_model_ng.cpp | 101 ++++++--- .../checkboxgroup/checkboxgroup_model_ng.h | 14 +- .../checkboxgroup/checkboxgroup_pattern.cpp | 50 +---- .../checkboxgroup/checkboxgroup_pattern.h | 2 - .../pattern/menu/menu_pattern.cpp | 2 +- .../components_ng/pattern/menu/menu_pattern.h | 6 +- .../components_ng/pattern/radio/radio_model.h | 3 +- .../pattern/radio/radio_model_ng.cpp | 19 +- .../pattern/radio/radio_model_ng.h | 2 + .../pattern/radio/radio_pattern.cpp | 23 +- .../pattern/radio/radio_pattern.h | 19 +- .../pattern/select/select_model.h | 9 +- .../pattern/select/select_model_ng.cpp | 162 +++++++++----- .../pattern/select/select_model_ng.h | 27 ++- .../pattern/select/select_paint_property.h | 5 +- .../pattern/select/select_pattern.cpp | 148 ++++++------- .../pattern/select/select_pattern.h | 15 +- .../pattern/slider/slider_model_ng.cpp | 15 +- .../pattern/slider/slider_pattern.cpp | 2 +- .../pattern/toggle/switch_pattern.cpp | 52 ----- .../pattern/toggle/switch_pattern.h | 3 - .../pattern/toggle/toggle_model.h | 2 + .../pattern/toggle/toggle_model_ng.cpp | 208 +++++++++++------- .../pattern/toggle/toggle_model_ng.h | 15 +- .../core/interfaces/arkoala/arkoala_api.h | 6 +- .../native/node/button_modifier.cpp | 40 ++-- .../native/node/checkboxgroup_modifier.cpp | 8 +- .../native/node/node_checkbox_modifier.cpp | 6 +- .../native/node/node_slider_modifier.cpp | 92 ++++---- .../native/node/node_toggle_modifier.cpp | 27 ++- .../interfaces/native/node/radio_modifier.cpp | 21 +- .../native/node/select_modifier.cpp | 120 ++++++---- .../pattern/button/toggle_button_test_ng.cpp | 83 +++++++ .../pattern/checkbox/checkbox_test_ng.cpp | 141 ++++++++++++ .../checkboxgroup/checkboxgroup_test_ng.cpp | 142 ++++++++++++ .../pattern/menu/menu_pattern_test_ng.cpp | 93 ++++++++ .../pattern/radio/radio_pattern_test_ng.cpp | 118 ++++++++++ .../core/pattern/radio/radio_test_ng.cpp | 159 +++++++++++++ .../pattern/slider/slider_pattern_test_ng.cpp | 151 +++++++++++++ .../pattern/toggle/toggle_switch_test_ng.cpp | 70 ++++++ 60 files changed, 1785 insertions(+), 682 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_radio_bridge.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_radio_bridge.cpp index 9b862985a3b..ae04d031166 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_radio_bridge.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_radio_bridge.cpp @@ -91,10 +91,15 @@ ArkUINativeModuleValue RadioBridge::SetRadioStyle(ArkUIRuntimeCallInfo* runtimeC RefPtr unBorderColorResObj; RefPtr indicatorColorResObj; ArkUIRadioColorStruct resObjStru; + bool jsBgColorSetByUser = false; + bool jsUnBorderColorSetByUser = false; + bool jsIndicatorColorSetByUser = false; + if (checkedBackgroundColor->IsNull() || checkedBackgroundColor->IsUndefined() || !ArkTSUtils::ParseJsColorAlpha(vm, checkedBackgroundColor, checkedBackgroundColorVal, backgroundColorResObj)) { checkedBackgroundColorVal = radioTheme->GetActiveColor(); } else { + jsBgColorSetByUser = true; resObjStru.checkedBackgroundColor = AceType::RawPtr(backgroundColorResObj); } Color uncheckedBorderColorVal; @@ -102,6 +107,7 @@ ArkUINativeModuleValue RadioBridge::SetRadioStyle(ArkUIRuntimeCallInfo* runtimeC !ArkTSUtils::ParseJsColorAlpha(vm, uncheckedBorderColor, uncheckedBorderColorVal, unBorderColorResObj)) { uncheckedBorderColorVal = radioTheme->GetInactiveColor(); } else { + jsUnBorderColorSetByUser = true; resObjStru.uncheckedBorderColor = AceType::RawPtr(unBorderColorResObj); } Color indicatorColorVal; @@ -109,9 +115,12 @@ ArkUINativeModuleValue RadioBridge::SetRadioStyle(ArkUIRuntimeCallInfo* runtimeC !ArkTSUtils::ParseJsColorAlpha(vm, indicatorColor, indicatorColorVal, indicatorColorResObj)) { indicatorColorVal = radioTheme->GetPointColor(); } else { + jsIndicatorColorSetByUser = true; resObjStru.indicatorColor = AceType::RawPtr(indicatorColorResObj); } + GetArkUINodeModifiers()->getRadioModifier()->setRadioColorSetByUser( + nativeNode, jsBgColorSetByUser, jsUnBorderColorSetByUser, jsIndicatorColorSetByUser); GetArkUINodeModifiers()->getRadioModifier()->setRadioStylePtr(nativeNode, checkedBackgroundColorVal.GetValue(), uncheckedBorderColorVal.GetValue(), indicatorColorVal.GetValue(), resObjStru); diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_slider_bridge.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_slider_bridge.cpp index 6a3ec70d8d0..1bb471ef1d6 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_slider_bridge.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_slider_bridge.cpp @@ -355,11 +355,10 @@ ArkUINativeModuleValue SliderBridge::SetTrackBackgroundColor(ArkUIRuntimeCallInf auto colorLength = gradient.GetColors().size(); std::vector colorValues; std::vector offsetValues; + GetArkUINodeModifiers()->getSliderModifier()->resetTrackBackgroundColor(nativeNode); if (colorLength <= 0) { - GetArkUINodeModifiers()->getSliderModifier()->resetTrackBackgroundColor(nativeNode); return panda::JSValueRef::Undefined(vm); } - for (int32_t i = 0; i < static_cast(colorLength); i++) { colorValues.push_back(gradient.GetColors()[i].GetLinearColor().GetValue()); offsetValues.push_back(ArkUILengthType { @@ -522,7 +521,7 @@ ArkUINativeModuleValue SliderBridge::SetBlockStyle(ArkUIRuntimeCallInfo* runtime std::string moduleName; Framework::JSViewAbstract::GetJsMediaBundleInfo(image, bundleName, moduleName); SliderModelNG::SetBlockImage(frameNode, src, bundleName, moduleName); - if (SystemProperties::ConfigChangePerform() && mediaResObj) { + if (SystemProperties::ConfigChangePerform()) { SliderModelNG::CreateWithMediaResourceObj(frameNode, mediaResObj, bundleName, moduleName); } } else if (type == SliderModel::BlockStyleType::SHAPE) { diff --git a/frameworks/bridge/declarative_frontend/jsview/js_radio.cpp b/frameworks/bridge/declarative_frontend/jsview/js_radio.cpp index 380de8f2587..5a6eaefddee 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_radio.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_radio.cpp @@ -321,9 +321,9 @@ void JSRadio::SetCheckedBackgroundColor(const JSCallbackInfo& info, const RefPtr RefPtr backgroundResObj; bool isUserSetBgColor = true; if (!ParseJsColor(checkedBackgroundColor, checkedBackgroundColorVal, backgroundResObj)) { + isUserSetBgColor = false; if (!JSRadioTheme::ObtainCheckedBackgroundColor(checkedBackgroundColorVal)) { checkedBackgroundColorVal = theme->GetActiveColor(); - isUserSetBgColor = false; } } CreateWithResourceObj(backgroundResObj, static_cast(RadioColorType::CHECKED_BACKGROUND_COLOR)); @@ -338,10 +338,12 @@ void JSRadio::SetUncheckedBorderColor(const JSCallbackInfo& info, const RefPtr borderResObj; bool isUserSetUnBorderColor = true; + bool isByTheme = false; if (!ParseJsColor(uncheckedBorderColor, uncheckedBorderColorVal, borderResObj)) { + isUserSetUnBorderColor = false; if (!JSRadioTheme::ObtainUncheckedBorderColor(uncheckedBorderColorVal)) { + isByTheme = true; uncheckedBorderColorVal = theme->GetInactiveColor(); - isUserSetUnBorderColor = false; } } else { auto frameNode = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode(); @@ -353,6 +355,7 @@ void JSRadio::SetUncheckedBorderColor(const JSCallbackInfo& info, const RefPtr(RadioColorType::UNCHECKED_BORDER_COLOR)); RadioModel::GetInstance()->SetUncheckedBorderColor(uncheckedBorderColorVal); RadioModel::GetInstance()->SetUncheckedBorderColorSetByUser(isUserSetUnBorderColor); + RadioModel::GetInstance()->SetUncheckedBorderColorByJSRadioTheme(isByTheme); } void JSRadio::SetIndicatorColor(const JSCallbackInfo& info, const RefPtr& theme) @@ -362,15 +365,18 @@ void JSRadio::SetIndicatorColor(const JSCallbackInfo& info, const RefPtr indicatorResObj; bool isUserSetIndicatorColor = true; + bool isByTheme = false; if (!ParseJsColor(indicatorColor, indicatorColorVal, indicatorResObj)) { + isUserSetIndicatorColor = false; if (!JSRadioTheme::ObtainIndicatorColor(indicatorColorVal)) { + isByTheme = true; indicatorColorVal = theme->GetPointColor(); - isUserSetIndicatorColor = false; } } CreateWithResourceObj(indicatorResObj, static_cast(RadioColorType::INDICATOR_COLOR)); RadioModel::GetInstance()->SetIndicatorColor(indicatorColorVal); RadioModel::GetInstance()->SetIndicatorColorSetByUser(isUserSetIndicatorColor); + RadioModel::GetInstance()->SetIndicatorColorByJSRadioTheme(isByTheme); } void JSRadio::CreateWithResourceObj(const RefPtr& resObj, const int32_t colorType) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_select.cpp b/frameworks/bridge/declarative_frontend/jsview/js_select.cpp index 5ece50eb2a8..9fbe2858233 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_select.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_select.cpp @@ -423,17 +423,19 @@ void JSSelect::FontColor(const JSCallbackInfo& info) Color textColor; RefPtr resObj; + bool isNormal = false; if (!ParseJsColor(info[0], textColor, resObj)) { SelectModel::GetInstance()->ResetFontColor(); } else { SelectModel::GetInstance()->SetFontColor(textColor); + isNormal = true; } if (SystemProperties::ConfigChangePerform()) { + SelectModel::GetInstance()->SetFontColorByUser(isNormal); SelectModel::GetInstance()->CreateWithColorResourceObj(resObj, SelectColorType::FONT_COLOR); } } - void JSSelect::BackgroundColor(const JSCallbackInfo& info) { if (info.Length() < 1) { @@ -522,17 +524,16 @@ void JSSelect::OptionBgColor(const JSCallbackInfo& info) Color bgColor; RefPtr resObj; if (!ParseJsColor(info[0], bgColor, resObj)) { - if (info[0]->IsUndefined() || info[0]->IsNull()) { - auto pipeline = PipelineBase::GetCurrentContext(); - CHECK_NULL_VOID(pipeline); - auto theme = pipeline->GetTheme(); - CHECK_NULL_VOID(theme); - bgColor = theme->GetBackgroundColor(); - SelectModel::GetInstance()->SetOptionBgColor(bgColor, false); + if (!(info[0]->IsUndefined() || info[0]->IsNull())) { + return; } - } else { - SelectModel::GetInstance()->SetOptionBgColor(bgColor); + auto pipeline = PipelineBase::GetCurrentContextSafelyWithCheck(); + CHECK_NULL_VOID(pipeline); + auto theme = pipeline->GetTheme(); + CHECK_NULL_VOID(theme); + bgColor = theme->GetBackgroundColor(); } + SelectModel::GetInstance()->SetOptionBgColor(bgColor); if (SystemProperties::ConfigChangePerform()) { SelectModel::GetInstance()->CreateWithColorResourceObj(resObj, SelectColorType::OPTION_BG_COLOR); } @@ -561,6 +562,7 @@ void JSSelect::OptionFontColor(const JSCallbackInfo& info) } Color textColor; RefPtr resObj; + bool isNormal = true; if (!ParseJsColor(info[0], textColor, resObj)) { if (info[0]->IsUndefined() || info[0]->IsNull()) { auto pipeline = PipelineBase::GetCurrentContext(); @@ -568,11 +570,13 @@ void JSSelect::OptionFontColor(const JSCallbackInfo& info) auto theme = pipeline->GetTheme(); CHECK_NULL_VOID(theme); textColor = theme->GetMenuFontColor(); + isNormal = false; } else { return; } } if (SystemProperties::ConfigChangePerform()) { + SelectModel::GetInstance()->SetOptionFontColorByUser(isNormal); SelectModel::GetInstance()->CreateWithColorResourceObj(resObj, SelectColorType::OPTION_FONT_COLOR); } TAG_LOGD(AceLogTag::ACE_SELECT_COMPONENT, "set option font color %{public}s", textColor.ColorToString().c_str()); @@ -881,12 +885,13 @@ void JSSelect::SetMenuBackgroundColor(const JSCallbackInfo& info) return; } } - if (SystemProperties::ConfigChangePerform()) { - SelectModel::GetInstance()->CreateWithColorResourceObj(resObj, SelectColorType::MENU_BACKGROUND_COLOR); - } TAG_LOGD(AceLogTag::ACE_SELECT_COMPONENT, "set menu background color %{public}s", menuBackgroundColor.ColorToString().c_str()); SelectModel::GetInstance()->SetMenuBackgroundColor(menuBackgroundColor); + if (SystemProperties::ConfigChangePerform()) { + SelectModel::GetInstance()->SetMenuBackgroundColorByUser(true); + SelectModel::GetInstance()->CreateWithColorResourceObj(resObj, SelectColorType::MENU_BACKGROUND_COLOR); + } } void JSSelect::SetMenuBackgroundBlurStyle(const JSCallbackInfo& info) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_slider.cpp b/frameworks/bridge/declarative_frontend/jsview/js_slider.cpp index c99d4010fc0..2db3d13c601 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_slider.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_slider.cpp @@ -273,6 +273,9 @@ void JSSlider::SetTrackColor(const JSCallbackInfo& info) SliderModel::GetInstance()->CreateWithColorResourceObj(resObj, SliderColorType::TRACK_COLOR); } } + if (SystemProperties::ConfigChangePerform()) { + SliderModel::GetInstance()->CreateWithColorResourceObj(nullptr, SliderColorType::TRACK_COLOR); + } // Set track gradient color to NG::SliderModelNG SliderModel::GetInstance()->SetTrackBackgroundColor(gradient, isResourceColor); } @@ -600,6 +603,7 @@ void JSSlider::SetBlockStyle(const JSCallbackInfo& info) std::string moduleName; if (!ParseJsMedia(image, src, resObj)) { ResetBlockStyle(); + return; } else { GetJsMediaBundleInfo(image, bundleName, moduleName); SliderModel::GetInstance()->SetBlockImage(src, bundleName, moduleName); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_toggle.cpp b/frameworks/bridge/declarative_frontend/jsview/js_toggle.cpp index ffe31882fa7..c571be44e28 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_toggle.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_toggle.cpp @@ -270,10 +270,7 @@ void JSToggle::SelectedColor(const JSCallbackInfo& info) if (ParseJsColor(info[0], color, resObj)) { selectedColor = color; } - if (SystemProperties::ConfigChangePerform()) { - ToggleModel::GetInstance()->CreateWithColorResourceObj(resObj, ToggleColorType::SELECTED_COLOR); - } - + CreateWithColorResourceObj(resObj, static_cast(ToggleColorType::SELECTED_COLOR)); ToggleModel::GetInstance()->SetSelectedColor(selectedColor); } @@ -285,14 +282,14 @@ void JSToggle::SwitchPointColor(const JSCallbackInfo& info) Color color; RefPtr resObj; std::optional switchPointColor; + bool isValidValue = false; if (ParseJsColor(info[0], color, resObj)) { switchPointColor = color; + isValidValue = true; } - if (SystemProperties::ConfigChangePerform()) { - ToggleModel::GetInstance()->CreateWithColorResourceObj(resObj, ToggleColorType::SWITCH_POINT_COLOR); - } - + CreateWithColorResourceObj(resObj, static_cast(ToggleColorType::SWITCH_POINT_COLOR)); ToggleModel::GetInstance()->SetSwitchPointColor(switchPointColor); + ToggleModel::GetInstance()->SetSwitchPointColorSetByUser(isValidValue); } void JSToggle::JsPadding(const JSCallbackInfo& info) @@ -446,11 +443,11 @@ void JSToggle::SetPointRadius(const JSRef& jsObj) if (jsObj->HasProperty("pointRadius") && ParseJsDimensionVpNG(jsObj->GetProperty("pointRadius"), pointRadius, pointRadiusResObj, false) && !pointRadius.IsNegative()) { - CreateWithDimensionResourceObj(pointRadiusResObj, static_cast(ToggleDimensionType::POINT_RADIUS)); ToggleModel::GetInstance()->SetPointRadius(pointRadius); } else { ToggleModel::GetInstance()->ResetPointRadius(); } + CreateWithDimensionResourceObj(pointRadiusResObj, static_cast(ToggleDimensionType::POINT_RADIUS)); } void JSToggle::SetUnselectedColor(const JSRef& jsObj) @@ -459,15 +456,17 @@ void JSToggle::SetUnselectedColor(const JSRef& jsObj) RefPtr unselectedColorResObj; if (jsObj->HasProperty("unselectedColor") && ParseJsColor(jsObj->GetProperty("unselectedColor"), unselectedColor, unselectedColorResObj)) { - CreateWithColorResourceObj(unselectedColorResObj, static_cast(ToggleColorType::UN_SELECTED_COLOR)); ToggleModel::GetInstance()->SetUnselectedColor(unselectedColor); + ToggleModel::GetInstance()->SetUnselectedColorSetByUser(true); } else { auto theme = GetTheme(); if (theme) { unselectedColor = theme->GetInactiveColor(); } ToggleModel::GetInstance()->SetUnselectedColor(unselectedColor); + ToggleModel::GetInstance()->SetUnselectedColorSetByUser(false); } + CreateWithColorResourceObj(unselectedColorResObj, static_cast(ToggleColorType::UN_SELECTED_COLOR)); } void JSToggle::SetPointColor(const JSRef& jsObj) @@ -476,15 +475,17 @@ void JSToggle::SetPointColor(const JSRef& jsObj) RefPtr pointColorResObj; if (jsObj->HasProperty("pointColor") && ParseJsColor(jsObj->GetProperty("pointColor"), pointColor, pointColorResObj)) { - CreateWithColorResourceObj(pointColorResObj, static_cast(ToggleColorType::SWITCH_POINT_COLOR)); ToggleModel::GetInstance()->SetSwitchPointColor(pointColor); + ToggleModel::GetInstance()->SetSwitchPointColorSetByUser(true); } else { auto theme = GetTheme(); if (theme) { pointColor = theme->GetPointColor(); } ToggleModel::GetInstance()->SetSwitchPointColor(pointColor); + ToggleModel::GetInstance()->SetSwitchPointColorSetByUser(false); } + CreateWithColorResourceObj(pointColorResObj, static_cast(ToggleColorType::SWITCH_POINT_COLOR)); } void JSToggle::SetTrackBorderRadius(const JSRef& jsObj) @@ -494,12 +495,12 @@ void JSToggle::SetTrackBorderRadius(const JSRef& jsObj) if (jsObj->HasProperty("trackBorderRadius") && ParseJsDimensionVpNG(jsObj->GetProperty("trackBorderRadius"), trackRadius, trackBorderRadiusResObj, false) && !trackRadius.IsNegative()) { - CreateWithDimensionResourceObj(trackBorderRadiusResObj, - static_cast(ToggleDimensionType::TRACK_BORDER_RADIUS)); ToggleModel::GetInstance()->SetTrackBorderRadius(trackRadius); } else { ToggleModel::GetInstance()->ResetTrackBorderRadius(); } + CreateWithDimensionResourceObj(trackBorderRadiusResObj, + static_cast(ToggleDimensionType::TRACK_BORDER_RADIUS)); } void JSToggle::CreateWithDimensionResourceObj(RefPtr& resObj, const int32_t resType) diff --git a/frameworks/bridge/declarative_frontend/jsview/models/checkboxgroup_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/checkboxgroup_model_impl.h index 66f45a683f6..5c0dc38ae01 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/checkboxgroup_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/checkboxgroup_model_impl.h @@ -33,7 +33,7 @@ public: void ResetUnSelectedColor() override {}; void ResetCheckMarkColor() override {}; void CreateWithColorResourceObj(const RefPtr& resObj, - const CheckBoxGroupColorType checkBoxGroupColorType) override {}; + const CheckBoxGroupColorType& checkBoxGroupColorType) override {}; }; } // namespace OHOS::Ace::Framework #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_MODELS_CHECKBOXGROUP_MODEL_IMPL_H diff --git a/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.cpp index 9522597f258..1f81028169c 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.cpp @@ -238,7 +238,7 @@ void SelectModelImpl::SetSelectedOptionFontColor(const Color& color) } } -void SelectModelImpl::SetOptionBgColor(const Color& color, bool isNormal) +void SelectModelImpl::SetOptionBgColor(const Color& color) { auto component = ViewStackProcessor::GetInstance()->GetMainComponent(); auto selectComponent = AceType::DynamicCast(component); diff --git a/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.h index b7673a2e3ef..73d1642b125 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/select_model_impl.h @@ -38,7 +38,7 @@ public: void SetSelectedOptionFontFamily(const std::vector& value) override; void SetSelectedOptionItalicFontStyle(const Ace::FontStyle& value) override; void SetSelectedOptionFontColor(const Color& color) override; - void SetOptionBgColor(const Color& color, bool isNormal = true) override; + void SetOptionBgColor(const Color& color) override; void SetOptionFontSize(const Dimension& value) override; void SetOptionFontWeight(const FontWeight& value) override; void SetOptionFontFamily(const std::vector& value) override; @@ -85,11 +85,13 @@ public: void ResetShowInSubWindow() override {}; void SetShowDefaultSelectedIcon(bool show) override {}; void ResetShowDefaultSelectedIcon() override {}; - void CreateWithColorResourceObj(const RefPtr& resObj, - const SelectColorType selectColorType) override {}; + void CreateWithColorResourceObj(const RefPtr& resObj, const SelectColorType& type) override {}; void CreateWithValueIconResourceObj(const std::vector& resObjVec) override {}; void CreateWithIntegerResourceObj(const RefPtr& resObj) override {}; void CreateWithStringResourceObj(const RefPtr& resObj) override {}; + void SetOptionFontColorByUser(bool flag) override {}; + void SetMenuBackgroundColorByUser(bool flag) override {}; + void SetFontColorByUser(bool flag) override {}; }; } // namespace OHOS::Ace::Framework #endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_MODELS_SELECT_MODEL_IMPL_H diff --git a/frameworks/core/components/checkable/checkable_theme.h b/frameworks/core/components/checkable/checkable_theme.h index 9464733fe3a..1d26618eaee 100644 --- a/frameworks/core/components/checkable/checkable_theme.h +++ b/frameworks/core/components/checkable/checkable_theme.h @@ -23,7 +23,7 @@ #include "core/components/theme/theme_constants_defines.h" namespace OHOS::Ace { - +constexpr Color DEFAULT_UNCHECK_BORDER_COLOR = Color(0x4B181819); class CheckableTheme : public virtual Theme { DECLARE_ACE_TYPE(CheckableTheme, Theme); @@ -235,7 +235,10 @@ public: { return hotZoneVerticalSize_; } - + const Color& GetUnCheckBorderColor() const + { + return uncheckBorderColor_; + } protected: CheckableTheme() = default; @@ -283,6 +286,7 @@ protected: InternalResource::ResourceId dotResourceId_ = InternalResource::ResourceId::RADIO_DOT_SVG; Dimension hotZoneHorizontalSize_; Dimension hotZoneVerticalSize_; + Color uncheckBorderColor_; }; class CheckboxTheme : public CheckableTheme { @@ -486,6 +490,19 @@ public: } protected: + void ParseUncheckBorderColor( + const RefPtr& themeConstants, const RefPtr& theme) const + { + RefPtr radioPattern = themeConstants->GetPatternByName(THEME_PATTERN_RADIO); + if (!radioPattern) { + LOGW("find pattern of radio fail"); + return; + } + + theme->uncheckBorderColor_ = + radioPattern->GetAttr("radio_uncheck_border_color", DEFAULT_UNCHECK_BORDER_COLOR); + } + void ParsePattern(const RefPtr& themeConstants, const RefPtr& theme) const { RefPtr radioPattern = themeConstants->GetPatternByName(THEME_PATTERN_RADIO); @@ -493,6 +510,7 @@ public: LOGW("find pattern of radio fail"); return; } + ParseUncheckBorderColor(themeConstants, theme); theme->width_ = radioPattern->GetAttr("radio_size", 0.0_vp); theme->height_ = theme->width_; theme->hotZoneHorizontalPadding_ = radioPattern->GetAttr("radio_hotzone_padding", 0.0_vp); diff --git a/frameworks/core/components/common/properties/popup_param.h b/frameworks/core/components/common/properties/popup_param.h index e3930b359a6..efc9578d2ad 100644 --- a/frameworks/core/components/common/properties/popup_param.h +++ b/frameworks/core/components/common/properties/popup_param.h @@ -745,7 +745,7 @@ public: resourceArrowHeightObj_ = obj; } - const RefPtr& GeArrowHeightResourceObject() + const RefPtr& GetArrowHeightResourceObject() { return resourceArrowHeightObj_; } @@ -755,7 +755,7 @@ public: resourceRadiusObj_ = obj; } - const RefPtr& GeRadiusResourceObject() + const RefPtr& GetRadiusResourceObject() { return resourceRadiusObj_; } @@ -765,7 +765,7 @@ public: resourceOutlineWidthObj_ = obj; } - const RefPtr& GeOutlineWidthResourceObject() + const RefPtr& GetOutlineWidthResourceObject() { return resourceOutlineWidthObj_; } @@ -775,7 +775,7 @@ public: resourceBorderWidthObj_ = obj; } - const RefPtr& GeBorderWidthResourceObject() + const RefPtr& GetBorderWidthResourceObject() { return resourceBorderWidthObj_; } diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index 126422a63fe..0f585ef27ed 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -3459,16 +3459,16 @@ void ViewAbstract::UpdatePopupParamResource(const RefPtr& param, con auto arrowWidthResourceObject = param->GetArrowWidthResourceObject(); optionsType = POPUP_OPTIONTYPE_ARROWWIDTH; ViewAbstractModel::GetInstance()->CreateWithResourceObj(frameNode, arrowWidthResourceObject, optionsType); - auto arrowHeightResourceObject = param->GeArrowHeightResourceObject(); + auto arrowHeightResourceObject = param->GetArrowHeightResourceObject(); optionsType = POPUP_OPTIONTYPE_ARROWHEIGHT; ViewAbstractModel::GetInstance()->CreateWithResourceObj(frameNode, arrowHeightResourceObject, optionsType); - auto radiusResourceObject = param->GeRadiusResourceObject(); + auto radiusResourceObject = param->GetRadiusResourceObject(); optionsType = POPUP_OPTIONTYPE_RADIUS; ViewAbstractModel::GetInstance()->CreateWithResourceObj(frameNode, radiusResourceObject, optionsType); - auto outLineResourceObject = param->GeOutlineWidthResourceObject(); + auto outLineResourceObject = param->GetOutlineWidthResourceObject(); optionsType = POPUP_OPTIONTYPE_OUTLINEWIDTH; ViewAbstractModel::GetInstance()->CreateWithResourceObj(frameNode, outLineResourceObject, optionsType); - auto borderResourceObject = param->GeBorderWidthResourceObject(); + auto borderResourceObject = param->GetBorderWidthResourceObject(); optionsType = POPUP_OPTIONTYPE_BORDERWIDTH; ViewAbstractModel::GetInstance()->CreateWithResourceObj(frameNode, borderResourceObject, optionsType); } diff --git a/frameworks/core/components_ng/base/view_abstract_model_ng.h b/frameworks/core/components_ng/base/view_abstract_model_ng.h index 38ede33d2bc..339b5e784ec 100644 --- a/frameworks/core/components_ng/base/view_abstract_model_ng.h +++ b/frameworks/core/components_ng/base/view_abstract_model_ng.h @@ -1661,7 +1661,7 @@ public: const RefPtr& frameNode, const RefPtr& maskResObj); static std::string PopupOptionTypeStr(const PopupOptionsType& type); static void ParseOptionsDimension(const RefPtr& frameNode, - const RefPtr& dimensionResObj, const PopupOptionsType& type, CalcDimension& dimession); + const RefPtr& dimensionResObj, const PopupOptionsType& type, CalcDimension& dimension); static void CreateWithDimensionResourceObj(const RefPtr& frameNode, const RefPtr& dimensionResObj, const PopupOptionsType& type); virtual void CreateWithResourceObj(const RefPtr& frameNode, diff --git a/frameworks/core/components_ng/pattern/button/button_model_ng.cpp b/frameworks/core/components_ng/pattern/button/button_model_ng.cpp index 20bb8557310..73ea8a69454 100644 --- a/frameworks/core/components_ng/pattern/button/button_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/button/button_model_ng.cpp @@ -156,7 +156,6 @@ void ButtonModelNG::CreateWithColorResourceObj( ParseButtonResColor(resObj, result, buttonColorType); UpdateResColor(AceType::RawPtr(frameNode), result, buttonColorType); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -179,7 +178,6 @@ void ButtonModelNG::CreateWithStringResourceObj(const RefPtr& re pattern->UpdateComponentString(result, buttonStringType); } }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -194,11 +192,12 @@ void ButtonModelNG::CreateWithFamiliesResourceObj(const RefPtr& void ButtonModelNG::UpdateDefaultFamilies( FrameNode* frameNode, std::vector& value, const ButtonStringType buttonStringType) { - auto pipelineContext = PipelineBase::GetCurrentContext(); + CHECK_NULL_VOID(frameNode); + auto pipelineContext = frameNode->GetContext(); CHECK_NULL_VOID(pipelineContext); - auto textTheme = pipelineContext->GetTheme(); - CHECK_NULL_VOID(textTheme); - value = textTheme->GetTextStyle().GetFontFamilies(); + auto buttonTheme = pipelineContext->GetTheme(); + CHECK_NULL_VOID(buttonTheme); + value = buttonTheme->GetTextStyle().GetFontFamilies(); if (pipelineContext->IsSystmColorChange()) { switch (buttonStringType) { @@ -218,9 +217,9 @@ void ButtonModelNG::UpdateComponentFamilies( FrameNode* frameNode, const std::vector& value, const ButtonStringType buttonStringType) { CHECK_NULL_VOID(frameNode); - auto pipelineContext = PipelineBase::GetCurrentContext(); + auto pipelineContext = frameNode->GetContext(); CHECK_NULL_VOID(pipelineContext); - auto textTheme = pipelineContext->GetTheme(); + auto buttonTheme = pipelineContext->GetTheme(); if (pipelineContext->IsSystmColorChange()) { switch (buttonStringType) { case ButtonStringType::FONT_FAMILY: @@ -260,7 +259,6 @@ void ButtonModelNG::CreateWithFamiliesResourceObj( } ButtonModelNG::UpdateComponentFamilies(AceType::RawPtr(frameNode), result, buttonStringType); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -289,7 +287,6 @@ void ButtonModelNG::CreateWithDimensionFpResourceObj(FrameNode* frameNode, const pattern->UpdateComponentDimension(result, buttonDimensionType); } }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -305,12 +302,12 @@ bool ButtonModelNG::CheckFontScale(bool resultFlag, double result, const ButtonD { switch (buttonDoubleType) { case ButtonDoubleType::MIN_FONT_SCALE: - if (LessOrEqual(result, 0.0f) || GreatOrEqual(result, 1.0f)) { + if (LessNotEqual(result, 0.0f) || GreatNotEqual(result, 1.0f)) { resultFlag = true; } break; case ButtonDoubleType::MAX_FONT_SCALE: - resultFlag = LessOrEqual(result, 1.0f); + resultFlag = LessNotEqual(result, 1.0f); break; } return resultFlag; @@ -336,7 +333,6 @@ void ButtonModelNG::CreateWithDoubleResourceObj( pattern->UpdateComponentDouble(result, buttonDoubleType); } }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } diff --git a/frameworks/core/components_ng/pattern/button/button_pattern.cpp b/frameworks/core/components_ng/pattern/button/button_pattern.cpp index c1690cef428..cef68f5b502 100644 --- a/frameworks/core/components_ng/pattern/button/button_pattern.cpp +++ b/frameworks/core/components_ng/pattern/button/button_pattern.cpp @@ -1263,6 +1263,10 @@ void ButtonPattern::OnColorConfigurationUpdate() auto color = buttonTheme->GetBgColor(buttonStyle, buttonRole); renderContext->UpdateBackgroundColor(color); } + if (SystemProperties::ConfigChangePerform()) { + themeBgColor_ = buttonTheme->GetBgColor(buttonStyle, buttonRole); + themeTextColor_ = buttonTheme->GetTextColor(buttonStyle, buttonRole); + } auto textNode = DynamicCast(node->GetFirstChild()); CHECK_NULL_VOID(textNode); auto textLayoutProperty = textNode->GetLayoutProperty(); diff --git a/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.cpp b/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.cpp index 89099e456fa..ac5fd8cadd5 100644 --- a/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.cpp @@ -374,15 +374,39 @@ void CheckBoxModelNG::CreateWithColorResourceObj( CreateWithResourceObj(frameNode, checkBoxColorType, resObj); } -void CheckBoxModelNG::UpdateComponentColor(FrameNode* frameNode, const CheckBoxColorType checkBoxColorType) +void CheckBoxModelNG::ResetComponentColor(FrameNode* frameNode, const CheckBoxColorType type) { CHECK_NULL_VOID(frameNode); - switch (checkBoxColorType) { + auto pipelineContext = frameNode->GetContext(); + CHECK_NULL_VOID(pipelineContext); + auto theme = pipelineContext->GetTheme(frameNode->GetThemeScopeId()); + CHECK_NULL_VOID(theme); + Color color; + switch (type) { case CheckBoxColorType::SELECTED_COLOR: ResetSelectedColor(frameNode); + color = theme->GetActiveColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(CheckBoxPaintProperty, CheckBoxSelectedColor, color, frameNode); break; case CheckBoxColorType::UN_SELECTED_COLOR: ResetUnSelectedColor(frameNode); + color = theme->GetInactiveColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(CheckBoxPaintProperty, CheckBoxUnSelectedColor, color, frameNode); + break; + default: + break; + } +} + +void CheckBoxModelNG::UpdateComponentColor(FrameNode* frameNode, const CheckBoxColorType type, const Color& color) +{ + CHECK_NULL_VOID(frameNode); + switch (type) { + case CheckBoxColorType::SELECTED_COLOR: + SetSelectedColor(frameNode, color); + break; + case CheckBoxColorType::UN_SELECTED_COLOR: + SetUnSelectedColor(frameNode, color); break; default: break; @@ -390,29 +414,27 @@ void CheckBoxModelNG::UpdateComponentColor(FrameNode* frameNode, const CheckBoxC } void CheckBoxModelNG::CreateWithResourceObj( - FrameNode* frameNode, const CheckBoxColorType jsResourceType, const RefPtr& resObj) + FrameNode* frameNode, const CheckBoxColorType type, const RefPtr& resObj) { CHECK_NULL_VOID(frameNode); auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); - - std::string key = "checkbox" + ColorTypeToString(jsResourceType); - pattern->RemoveResObj(key); - CHECK_NULL_VOID(resObj); - auto&& updateFunc = [jsResourceType, weak = AceType::WeakClaim(frameNode)](const RefPtr& resObj) { + std::string key = "checkbox" + ColorTypeToString(type); + if (!resObj) { + pattern->RemoveResObj(key); + return; + } + auto&& updateFunc = [type, weak = AceType::WeakClaim(frameNode)](const RefPtr& resObj) { + CHECK_NULL_VOID(resObj); auto frameNode = weak.Upgrade(); CHECK_NULL_VOID(frameNode); - auto pattern = frameNode->GetPattern(); - CHECK_NULL_VOID(pattern); Color result; - if (ResourceParseUtils::ParseResColor(resObj, result)) { - UpdateComponentColor(AceType::RawPtr(frameNode), jsResourceType); - return; + if (!ResourceParseUtils::ParseResColor(resObj, result)) { + ResetComponentColor(AceType::RawPtr(frameNode), type); + } else { + UpdateComponentColor(AceType::RawPtr(frameNode), type, result); } - - pattern->UpdateCheckboxComponentColor(result, jsResourceType); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } diff --git a/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.h b/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.h index 76982eb848a..0b6d15912d7 100644 --- a/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.h +++ b/frameworks/core/components_ng/pattern/checkbox/checkbox_model_ng.h @@ -88,9 +88,10 @@ public: static std::string GetCheckboxGroup(FrameNode* frameNode); static void SetOnChange(FrameNode* frameNode, ChangeEvent&& onChange); - static void UpdateComponentColor(FrameNode* frameNode, const CheckBoxColorType checkBoxColorType); + static void ResetComponentColor(FrameNode* frameNode, const CheckBoxColorType type); + static void UpdateComponentColor(FrameNode* frameNode, const CheckBoxColorType type, const Color& color); static void CreateWithResourceObj( - FrameNode* frameNode, const CheckBoxColorType jsResourceType, const RefPtr& resObj); + FrameNode* frameNode, const CheckBoxColorType type, const RefPtr& resObj); private: static std::string ColorTypeToString(const CheckBoxColorType checkBoxColorType); diff --git a/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.cpp b/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.cpp index a3fd15d7345..c8f056a06ac 100644 --- a/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.cpp +++ b/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.cpp @@ -528,56 +528,6 @@ void CheckBoxPattern::UpdateUIStatus(bool check) host->MarkDirtyNode(PROPERTY_UPDATE_RENDER); } -void CheckBoxPattern::UpdateCheckboxComponentColor(const Color& color, const CheckBoxColorType checkBoxColorType) -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - auto pipelineContext = host->GetContext(); - CHECK_NULL_VOID(pipelineContext); - auto paintProperty = GetPaintProperty(); - CHECK_NULL_VOID(paintProperty); - - if (pipelineContext->IsSystmColorChange()) { - switch (checkBoxColorType) { - case CheckBoxColorType::SELECTED_COLOR: - paintProperty->UpdateCheckBoxSelectedColor(color); - paintProperty->UpdateCheckBoxSelectedColorFlagByUser(true); - break; - case CheckBoxColorType::UN_SELECTED_COLOR: - paintProperty->UpdateCheckBoxUnSelectedColor(color); - paintProperty->UpdateCheckBoxUnSelectedColorFlagByUser(true); - break; - } - } - if (host->GetRerenderable()) { - host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); - } -} - -void CheckBoxPattern::UpdateComponentColor(const Color& color, const ToggleColorType toggleColorType) -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - auto pipelineContext = host->GetContext(); - CHECK_NULL_VOID(pipelineContext); - auto paintProperty = GetPaintProperty(); - CHECK_NULL_VOID(paintProperty); - - if (pipelineContext->IsSystmColorChange()) { - switch (toggleColorType) { - case ToggleColorType::SELECTED_COLOR: - paintProperty->UpdateCheckBoxSelectedColor(color); - paintProperty->UpdateCheckBoxSelectedColorFlagByUser(true); - break; - default: - break; - } - } - if (host->GetRerenderable()) { - host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); - } -} - void CheckBoxPattern::OnDetachFromFrameNode(FrameNode* frameNode) { CHECK_NULL_VOID(frameNode); @@ -1124,16 +1074,16 @@ bool CheckBoxPattern::OnThemeScopeUpdate(int32_t themeScopeId) auto result = false; auto checkBoxPaintProperty = host->GetPaintProperty(); CHECK_NULL_RETURN(checkBoxPaintProperty, false); - if (!checkBoxPaintProperty->HasCheckBoxSelectedColorFlagByUser()) { + if (!checkBoxPaintProperty->GetCheckBoxSelectedColorFlagByUserValue(false)) { checkBoxPaintProperty->UpdateCheckBoxSelectedColor(checkBoxTheme->GetActiveColor()); result = true; } - if (!checkBoxPaintProperty->HasCheckBoxUnSelectedColorFlagByUser()) { + if (!checkBoxPaintProperty->GetCheckBoxUnSelectedColorFlagByUserValue(false)) { checkBoxPaintProperty->UpdateCheckBoxUnSelectedColor(checkBoxTheme->GetInactiveColor()); result = true; } - if (!checkBoxPaintProperty->HasCheckBoxCheckMarkColorFlagByUser()) { + if (!checkBoxPaintProperty->GetCheckBoxCheckMarkColorFlagByUserValue(false)) { checkBoxPaintProperty->UpdateCheckBoxCheckMarkColor(checkBoxTheme->GetPointColor()); result = true; } diff --git a/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.h b/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.h index 6bcf87d9f97..e67f845dc3d 100644 --- a/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.h +++ b/frameworks/core/components_ng/pattern/checkbox/checkbox_pattern.h @@ -183,9 +183,6 @@ public: { return true; } - void UpdateCheckboxComponentColor(const Color& color, const CheckBoxColorType checkBoxColorType); - void UpdateComponentColor(const Color& color, const ToggleColorType toggleColorType); - private: void OnAttachToFrameNode() override; void OnDetachFromFrameNode(FrameNode* frameNode) override; diff --git a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model.h b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model.h index bd86bdbf723..441c6b62f90 100644 --- a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model.h +++ b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model.h @@ -50,7 +50,7 @@ public: virtual void ResetUnSelectedColor() {}; virtual void ResetCheckMarkColor() {}; virtual void CreateWithColorResourceObj(const RefPtr& resObj, - const CheckBoxGroupColorType checkBoxGroupColorType) {}; + const CheckBoxGroupColorType& checkBoxGroupColorType) {}; private: static std::unique_ptr instance_; diff --git a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.cpp b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.cpp index bc7438a0f49..821180d040c 100644 --- a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.cpp @@ -286,10 +286,10 @@ CheckBoxStyle CheckBoxGroupModelNG::GetCheckboxGroupStyle(FrameNode* frameNode) return value; } -std::string CheckBoxGroupModelNG::ColorTypeToString(const CheckBoxGroupColorType checkBoxGroupColorType) +std::string CheckBoxGroupModelNG::ColorTypeToString(const CheckBoxGroupColorType& type) { std::string rst; - switch (checkBoxGroupColorType) { + switch (type) { case CheckBoxGroupColorType::SELECTED_COLOR: rst = "SelectedColor"; break; @@ -335,38 +335,47 @@ void CheckBoxGroupModelNG::ResetCheckMarkColor() } void CheckBoxGroupModelNG::CreateWithColorResourceObj( - const RefPtr& resObj, const CheckBoxGroupColorType checkBoxGroupColorType) + const RefPtr& resObj, const CheckBoxGroupColorType& type) { auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); CHECK_NULL_VOID(frameNode); - CreateWithResourceObj(frameNode, checkBoxGroupColorType, resObj); + CreateWithResourceObj(frameNode, type, resObj); } -void CheckBoxGroupModelNG::ResetUnSelectedColor(FrameNode* frameNode) +void CheckBoxGroupModelNG::ResetComponentColor(FrameNode* frameNode, const CheckBoxGroupColorType& type) { - ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( - CheckBoxGroupPaintProperty, CheckBoxGroupUnSelectedColor, PROPERTY_UPDATE_RENDER, frameNode); - ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( - CheckBoxGroupPaintProperty, CheckBoxGroupUnSelectedColorFlagByUser, PROPERTY_UPDATE_RENDER, frameNode); -} - -void CheckBoxGroupModelNG::ResetSelectedColor(FrameNode* frameNode) -{ - ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( - CheckBoxGroupPaintProperty, CheckBoxGroupSelectedColor, PROPERTY_UPDATE_RENDER, frameNode); - ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( - CheckBoxGroupPaintProperty, CheckBoxGroupSelectedColorFlagByUser, PROPERTY_UPDATE_RENDER, frameNode); + CHECK_NULL_VOID(frameNode); + auto pipelineContext = frameNode->GetContext(); + CHECK_NULL_VOID(pipelineContext); + auto theme = pipelineContext->GetTheme(); + CHECK_NULL_VOID(theme); + Color color; + switch (type) { + case CheckBoxGroupColorType::SELECTED_COLOR: + ResetSelectedColor(frameNode); + color = theme->GetActiveColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(CheckBoxGroupPaintProperty, CheckBoxGroupSelectedColor, color, frameNode); + break; + case CheckBoxGroupColorType::UN_SELECTED_COLOR: + ResetUnSelectedColor(frameNode); + color = theme->GetInactiveColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(CheckBoxGroupPaintProperty, CheckBoxGroupUnSelectedColor, color, frameNode); + break; + default: + break; + } } -void CheckBoxGroupModelNG::UpdateComponentColor(FrameNode* frameNode, const CheckBoxGroupColorType checkBoxColorType) +void CheckBoxGroupModelNG::UpdateComponentColor( + FrameNode* frameNode, const CheckBoxGroupColorType& type, const Color& color) { CHECK_NULL_VOID(frameNode); - switch (checkBoxColorType) { + switch (type) { case CheckBoxGroupColorType::SELECTED_COLOR: - ResetSelectedColor(frameNode); + SetSelectedColor(frameNode, color); break; case CheckBoxGroupColorType::UN_SELECTED_COLOR: - ResetUnSelectedColor(frameNode); + SetUnSelectedColor(frameNode, color); break; default: break; @@ -374,29 +383,53 @@ void CheckBoxGroupModelNG::UpdateComponentColor(FrameNode* frameNode, const Chec } void CheckBoxGroupModelNG::CreateWithResourceObj( - FrameNode* frameNode, const CheckBoxGroupColorType jsResourceType, const RefPtr& resObj) + FrameNode* frameNode, const CheckBoxGroupColorType& type, const RefPtr& resObj) { CHECK_NULL_VOID(frameNode); auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); - std::string key = "checkboxgroup" + ColorTypeToString(jsResourceType); - pattern->RemoveResObj(key); - CHECK_NULL_VOID(resObj); - - auto&& updateFunc = [jsResourceType, weak = AceType::WeakClaim(frameNode)](const RefPtr& resObj) { + std::string key = "checkboxgroup" + ColorTypeToString(type); + if (!resObj) { + pattern->RemoveResObj(key); + return; + } + auto&& updateFunc = [type, weak = AceType::WeakClaim(frameNode)](const RefPtr& resObj) { + CHECK_NULL_VOID(resObj); auto frameNode = weak.Upgrade(); CHECK_NULL_VOID(frameNode); - auto pattern = frameNode->GetPattern(); - CHECK_NULL_VOID(pattern); Color result; if (!ResourceParseUtils::ParseResColor(resObj, result)) { - UpdateComponentColor(AceType::RawPtr(frameNode), jsResourceType); - return; + ResetComponentColor(AceType::RawPtr(frameNode), type); + } else { + UpdateComponentColor(AceType::RawPtr(frameNode), type, result); } - - pattern->UpdateCheckBoxGroupComponentColor(result, jsResourceType); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } + +void CheckBoxGroupModelNG::SetUnSelectedColorByUser(FrameNode* frameNode, bool flag) +{ + ACE_UPDATE_NODE_PAINT_PROPERTY(CheckBoxGroupPaintProperty, CheckBoxGroupUnSelectedColorFlagByUser, flag, frameNode); +} + +void CheckBoxGroupModelNG::SetSelectedColorByUser(FrameNode* frameNode, bool flag) +{ + ACE_UPDATE_NODE_PAINT_PROPERTY(CheckBoxGroupPaintProperty, CheckBoxGroupSelectedColorFlagByUser, flag, frameNode); +} + +void CheckBoxGroupModelNG::ResetSelectedColor(FrameNode* frameNode) +{ + ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( + CheckBoxGroupPaintProperty, CheckBoxGroupSelectedColor, PROPERTY_UPDATE_RENDER, frameNode); + ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( + CheckBoxGroupPaintProperty, CheckBoxGroupSelectedColorFlagByUser, PROPERTY_UPDATE_RENDER, frameNode); +} + +void CheckBoxGroupModelNG::ResetUnSelectedColor(FrameNode* frameNode) +{ + ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( + CheckBoxGroupPaintProperty, CheckBoxGroupUnSelectedColor, PROPERTY_UPDATE_RENDER, frameNode); + ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG( + CheckBoxGroupPaintProperty, CheckBoxGroupUnSelectedColorFlagByUser, PROPERTY_UPDATE_RENDER, frameNode); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.h b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.h index a048fe45f3b..43ebddcc2fa 100644 --- a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.h +++ b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.h @@ -38,8 +38,7 @@ public: void ResetSelectedColor() override; void ResetUnSelectedColor() override; void ResetCheckMarkColor() override; - void CreateWithColorResourceObj(const RefPtr& resObj, - const CheckBoxGroupColorType checkBoxGroupColorType) override; + void CreateWithColorResourceObj(const RefPtr& resObj, const CheckBoxGroupColorType& type) override; static RefPtr CreateFrameNode(int32_t nodeId); static void SetSelectAll(FrameNode* frameNode, bool isSelected); static void SetSelectedColor(FrameNode* frameNode, const Color& color); @@ -62,14 +61,17 @@ public: static CheckBoxStyle GetCheckboxGroupStyle(FrameNode* frameNode); static void SetOnChange(FrameNode* frameNode, GroupChangeEvent&& onChange); - static void UpdateComponentColor(FrameNode* frameNode, const CheckBoxGroupColorType checkBoxColorType); + static void ResetComponentColor(FrameNode* frameNode, const CheckBoxGroupColorType& type); + static void UpdateComponentColor(FrameNode* frameNode, const CheckBoxGroupColorType& type, const Color& color); static void CreateWithResourceObj( - FrameNode* frameNode, const CheckBoxGroupColorType jsResourceType, const RefPtr& resObj); - static void ResetUnSelectedColor(FrameNode* frameNode); + FrameNode* frameNode, const CheckBoxGroupColorType& type, const RefPtr& resObj); + static void SetUnSelectedColorByUser(FrameNode* frameNode, bool flag); + static void SetSelectedColorByUser(FrameNode* frameNode, bool flag); static void ResetSelectedColor(FrameNode* frameNode); + static void ResetUnSelectedColor(FrameNode* frameNode); private: - static std::string ColorTypeToString(const CheckBoxGroupColorType checkBoxGroupColorType); + static std::string ColorTypeToString(const CheckBoxGroupColorType& checkBoxGroupColorType); }; } // namespace OHOS::Ace::NG #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_CHECKBOXGROUP_CHECKBOXGROUP_MODEL_NG_H diff --git a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.cpp b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.cpp index 28207076996..8694e33508c 100644 --- a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.cpp +++ b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.cpp @@ -647,23 +647,6 @@ void CheckBoxGroupPattern::OnColorConfigurationUpdate() auto host = GetHost(); CHECK_NULL_VOID(host); OnThemeScopeUpdate(host->GetThemeScopeId()); - if (SystemProperties::ConfigChangePerform()) { - auto pipeline = host->GetContextWithCheck(); - CHECK_NULL_VOID(pipeline); - auto theme = pipeline->GetTheme(); - CHECK_NULL_VOID(theme); - - auto paintProperty = host->GetPaintProperty(); - CHECK_NULL_VOID(paintProperty); - - if (!paintProperty->GetCheckBoxGroupSelectedColorFlagByUserValue(false)) { - UpdateCheckBoxGroupComponentColor(theme->GetActiveColor(), CheckBoxGroupColorType::SELECTED_COLOR); - } - - if (!paintProperty->GetCheckBoxGroupUnSelectedColorFlagByUserValue(false)) { - UpdateCheckBoxGroupComponentColor(theme->GetInactiveColor(), CheckBoxGroupColorType::UN_SELECTED_COLOR); - } - } host->MarkModifyDone(); host->MarkDirtyNode(); } @@ -679,15 +662,15 @@ bool CheckBoxGroupPattern::OnThemeScopeUpdate(int32_t themeScopeId) CHECK_NULL_RETURN(checkBoxTheme, result); auto checkBoxGroupPaintProperty = host->GetPaintProperty(); CHECK_NULL_RETURN(checkBoxGroupPaintProperty, result); - if (!checkBoxGroupPaintProperty->HasCheckBoxGroupSelectedColorFlagByUser()) { + if (!checkBoxGroupPaintProperty->GetCheckBoxGroupSelectedColorFlagByUserValue(false)) { checkBoxGroupPaintProperty->UpdateCheckBoxGroupSelectedColor(checkBoxTheme->GetActiveColor()); result = true; } - if (!checkBoxGroupPaintProperty->HasCheckBoxGroupUnSelectedColorFlagByUser()) { + if (!checkBoxGroupPaintProperty->GetCheckBoxGroupUnSelectedColorFlagByUserValue(false)) { checkBoxGroupPaintProperty->UpdateCheckBoxGroupUnSelectedColor(checkBoxTheme->GetInactiveColor()); result = true; } - if (!checkBoxGroupPaintProperty->HasCheckBoxGroupCheckMarkColorFlagByUser()) { + if (!checkBoxGroupPaintProperty->GetCheckBoxGroupCheckMarkColorFlagByUserValue(false)) { checkBoxGroupPaintProperty->UpdateCheckBoxGroupCheckMarkColor(checkBoxTheme->GetPointColor()); result = true; } @@ -837,33 +820,6 @@ std::optional CheckBoxGroupPattern::ParseSelectStatus(const std::string& c return json->GetBool("selectStatus"); } -void CheckBoxGroupPattern::UpdateCheckBoxGroupComponentColor(const Color& color, - const CheckBoxGroupColorType checkBoxGroupColorType) -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - auto pipelineContext = host->GetContext(); - CHECK_NULL_VOID(pipelineContext); - auto paintProperty = GetPaintProperty(); - CHECK_NULL_VOID(paintProperty); - - if (pipelineContext->IsSystmColorChange()) { - switch (checkBoxGroupColorType) { - case CheckBoxGroupColorType::SELECTED_COLOR: - paintProperty->UpdateCheckBoxGroupSelectedColor(color); - paintProperty->UpdateCheckBoxGroupSelectedColorFlagByUser(true); - break; - case CheckBoxGroupColorType::UN_SELECTED_COLOR: - paintProperty->UpdateCheckBoxGroupUnSelectedColor(color); - paintProperty->UpdateCheckBoxGroupUnSelectedColorFlagByUser(true); - break; - } - } - if (host->GetRerenderable()) { - host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); - } -} - int32_t CheckBoxGroupPattern::OnInjectionEvent(const std::string& command) { auto host = GetHost(); diff --git a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.h b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.h index a1ee93b78e1..9d9bff79377 100644 --- a/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.h +++ b/frameworks/core/components_ng/pattern/checkboxgroup/checkboxgroup_pattern.h @@ -190,8 +190,6 @@ public: { return true; } - void UpdateCheckBoxGroupComponentColor(const Color& color, const CheckBoxGroupColorType checkBoxGroupColorType); - private: void OnAttachToFrameNode() override; void OnDetachFromFrameNode(FrameNode* frameNode) override; diff --git a/frameworks/core/components_ng/pattern/menu/menu_pattern.cpp b/frameworks/core/components_ng/pattern/menu/menu_pattern.cpp index 707ccfc42df..eee5b45594b 100644 --- a/frameworks/core/components_ng/pattern/menu/menu_pattern.cpp +++ b/frameworks/core/components_ng/pattern/menu/menu_pattern.cpp @@ -2181,7 +2181,7 @@ void MenuPattern::OnColorConfigurationUpdate() auto renderContext = host->GetRenderContext(); if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN) || !renderContext->IsUniRenderEnabled() || menuTheme->GetMenuBlendBgColor()) { - if (!isDisableMenuBgColor_) { + if (!isDisableMenuBgColorByUser_) { renderContext->UpdateBackgroundColor(menuTheme->GetBackgroundColor()); } } else { diff --git a/frameworks/core/components_ng/pattern/menu/menu_pattern.h b/frameworks/core/components_ng/pattern/menu/menu_pattern.h index 6b6d8b2d0ec..d628ce9acde 100644 --- a/frameworks/core/components_ng/pattern/menu/menu_pattern.h +++ b/frameworks/core/components_ng/pattern/menu/menu_pattern.h @@ -700,9 +700,9 @@ public: originPreviewYForStack_ = tmp; } - void SetDisableMenuBgColor(bool ret = false) + void SetDisableMenuBgColorByUser(bool isSetByUser = false) { - isDisableMenuBgColor_ = ret; + isDisableMenuBgColorByUser_ = isSetByUser; } void SetSubMenuDepth(int32_t depth) @@ -845,7 +845,7 @@ private: float translateYForStack_ = 0.0f; float originMenuYForStack_ = 0.0f; float originPreviewYForStack_ = 0.0f; - bool isDisableMenuBgColor_ = false; + bool isDisableMenuBgColorByUser_ = false; // only used for Side sub menu int32_t subMenuDepth_ = 0; diff --git a/frameworks/core/components_ng/pattern/radio/radio_model.h b/frameworks/core/components_ng/pattern/radio/radio_model.h index 142ed63e1cf..e82c98b1de7 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_model.h +++ b/frameworks/core/components_ng/pattern/radio/radio_model.h @@ -54,7 +54,8 @@ public: virtual void SetHoverEffect(HoverEffectType hoverEffect) {}; virtual void CreateWithColorResourceObj(const RefPtr& resObj, const RadioColorType radioColorType) {}; - + virtual void SetUncheckedBorderColorByJSRadioTheme(bool flag) {} + virtual void SetIndicatorColorByJSRadioTheme(bool flag) {} private: static std::unique_ptr instance_; static std::mutex mutex_; diff --git a/frameworks/core/components_ng/pattern/radio/radio_model_ng.cpp b/frameworks/core/components_ng/pattern/radio/radio_model_ng.cpp index 2603b36701d..489a336e396 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/radio/radio_model_ng.cpp @@ -367,7 +367,6 @@ void RadioModelNG::CreateWithColorResourceObj(FrameNode* frameNode, const RefPtr pattern->UpdateRadioComponentColor(result, radioColorType); } }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } else { pattern->RemoveResObj(key); @@ -402,4 +401,22 @@ void RadioModelNG::SetIsUserSetMargin(FrameNode* frameNode, bool isUserSet) auto pattern = frameNode->GetPattern(); pattern->SetIsUserSetMargin(isUserSet); } + +void RadioModelNG::SetUncheckedBorderColorByJSRadioTheme(bool flag) +{ + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + CHECK_NULL_VOID(frameNode); + auto pattern = frameNode->GetPattern(); + CHECK_NULL_VOID(pattern); + pattern->SetUncheckedBorderColorByJSRadioTheme(flag); +} + +void RadioModelNG::SetIndicatorColorByJSRadioTheme(bool flag) +{ + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + CHECK_NULL_VOID(frameNode); + auto pattern = frameNode->GetPattern(); + CHECK_NULL_VOID(pattern); + pattern->SetIndicatorColorByJSRadioTheme(flag); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/radio/radio_model_ng.h b/frameworks/core/components_ng/pattern/radio/radio_model_ng.h index 2d2aaac0dd8..bf278b8abf8 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_model_ng.h +++ b/frameworks/core/components_ng/pattern/radio/radio_model_ng.h @@ -58,6 +58,8 @@ public: void SetHoverEffect(HoverEffectType hoverEffect) override; void CreateWithColorResourceObj(const RefPtr& resObj, const RadioColorType radioColorType) override; + void SetUncheckedBorderColorByJSRadioTheme(bool flag) override; + void SetIndicatorColorByJSRadioTheme(bool flag) override; static void CreateWithColorResourceObj(FrameNode* frameNode, const RefPtr& resObj, const RadioColorType radioColorType); static RefPtr CreateFrameNode(int32_t nodeId); diff --git a/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp b/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp index 743fffa82d5..315674b894a 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp +++ b/frameworks/core/components_ng/pattern/radio/radio_pattern.cpp @@ -39,7 +39,7 @@ constexpr float DEFAULT_INTERPOLATINGSPRING_VELOCITY = 0.0f; constexpr float DEFAULT_INTERPOLATINGSPRING_MASS = 1.0f; constexpr float DEFAULT_INTERPOLATINGSPRING_STIFFNESS = 728.0f; constexpr float DEFAULT_INTERPOLATINGSPRING_DAMPING = 46.0f; - +constexpr Color DEFAULT_INDICATOR_DARK_LIGHT_COLOR = Color(0xffffffff); } // namespace void RadioPattern::OnAttachToFrameNode() @@ -1053,6 +1053,8 @@ void RadioPattern::UpdateRadioComponentColor(const Color& color, const RadioColo paintProperty->UpdateRadioIndicatorColor(color); ImageNodeCreate(); break; + default: + break; } host->MarkDirtyNode(PROPERTY_UPDATE_RENDER); } @@ -1135,17 +1137,30 @@ void RadioPattern::OnColorConfigurationUpdate() CHECK_NULL_VOID(pipeline); auto radioTheme = pipeline->GetTheme(); CHECK_NULL_VOID(radioTheme); + auto pattern = host->GetPattern(); + CHECK_NULL_VOID(pattern); + if (!paintProperty->GetRadioCheckedBackgroundColorSetByUser().value_or(false)) { auto activeColor = radioTheme->GetActiveColor(); paintProperty->UpdateRadioCheckedBackgroundColor(activeColor); } if (!paintProperty->GetRadioUncheckedBorderColorSetByUser().value_or(false)) { - auto inActiveColor = radioTheme->GetInactiveColor(); + Color inActiveColor; + if (pattern->GetUncheckedBorderColorByJSRadioTheme()) { + inActiveColor = radioTheme->GetInactiveColor(); + } else { + inActiveColor = radioTheme->GetUnCheckBorderColor(); + } paintProperty->UpdateRadioUncheckedBorderColor(inActiveColor); } if (!paintProperty->GetRadioIndicatorColorSetByUser().value_or(false)) { - auto pointColor = radioTheme->GetPointColor(); - paintProperty->UpdateRadioIndicatorColor(pointColor); + Color pointColor; + if (pattern->GetIndicatorColorByJSRadioTheme()) { + pointColor = radioTheme->GetPointColor(); + paintProperty->UpdateRadioIndicatorColor(pointColor); + } else { + paintProperty->UpdateRadioIndicatorColor(DEFAULT_INDICATOR_DARK_LIGHT_COLOR); + } ImageNodeCreate(); } host->MarkModifyDone(); diff --git a/frameworks/core/components_ng/pattern/radio/radio_pattern.h b/frameworks/core/components_ng/pattern/radio/radio_pattern.h index d38b00c8611..53ce924dea2 100644 --- a/frameworks/core/components_ng/pattern/radio/radio_pattern.h +++ b/frameworks/core/components_ng/pattern/radio/radio_pattern.h @@ -196,7 +196,22 @@ public: } void UpdateRadioComponentColor(const Color& color, const RadioColorType radioColorType); void OnColorConfigurationUpdate() override; - + void SetUncheckedBorderColorByJSRadioTheme(bool flag) + { + borderColorByJSRadioTheme_ = flag; + } + void SetIndicatorColorByJSRadioTheme(bool flag) + { + indicatorColorByJSRadioTheme_ = flag; + } + bool GetUncheckedBorderColorByJSRadioTheme() + { + return borderColorByJSRadioTheme_; + } + bool GetIndicatorColorByJSRadioTheme() + { + return indicatorColorByJSRadioTheme_; + } private: void OnAttachToFrameNode() override; void OnDetachFromFrameNode(FrameNode* frameNode) override; @@ -285,6 +300,8 @@ private: std::function isFocusActiveUpdateEvent_; ACE_DISALLOW_COPY_AND_MOVE(RadioPattern); bool isUserSetUncheckBorderColor_ = false; + bool borderColorByJSRadioTheme_ = true; + bool indicatorColorByJSRadioTheme_ = true; }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/select/select_model.h b/frameworks/core/components_ng/pattern/select/select_model.h index 4d639975918..3627791c1a4 100644 --- a/frameworks/core/components_ng/pattern/select/select_model.h +++ b/frameworks/core/components_ng/pattern/select/select_model.h @@ -98,7 +98,7 @@ public: virtual void SetSelectedOptionFontFamily(const std::vector& value); virtual void SetSelectedOptionItalicFontStyle(const Ace::FontStyle& value); virtual void SetSelectedOptionFontColor(const Color& color); - virtual void SetOptionBgColor(const Color& color, bool isNormal = true); + virtual void SetOptionBgColor(const Color& color); virtual void SetOptionFontSize(const Dimension& value); virtual void SetOptionFontWeight(const FontWeight& value); virtual void SetOptionFontFamily(const std::vector& value); @@ -144,11 +144,14 @@ public: virtual void ResetShowInSubWindow() = 0; virtual void SetShowDefaultSelectedIcon(bool show) = 0; virtual void ResetShowDefaultSelectedIcon() = 0; - virtual void CreateWithColorResourceObj(const RefPtr& resObj, - const SelectColorType selectColorType) {}; + virtual void CreateWithColorResourceObj( + const RefPtr& resObj, const SelectColorType& selectColorType) {}; virtual void CreateWithValueIconResourceObj(const std::vector& resObjVec) {}; virtual void CreateWithIntegerResourceObj(const RefPtr& resObj) {}; virtual void CreateWithStringResourceObj(const RefPtr& resObj) {}; + virtual void SetOptionFontColorByUser(bool isValidValue) {}; + virtual void SetMenuBackgroundColorByUser(bool isFromModifier) {}; + virtual void SetFontColorByUser(bool isValidValue) {}; private: static std::unique_ptr instance_; diff --git a/frameworks/core/components_ng/pattern/select/select_model_ng.cpp b/frameworks/core/components_ng/pattern/select/select_model_ng.cpp index f4d52d514bd..2cec48dc68d 100644 --- a/frameworks/core/components_ng/pattern/select/select_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/select/select_model_ng.cpp @@ -57,10 +57,13 @@ void SelectModelNG::Create(const std::vector& params) props->ResetFontColorSetByUser(); props->ResetSelectedOptionBgColorSetByUser(); props->ResetSelectedOptionFontColorSetByUser(); - props->ResetOptionBgColorSetByUser(); props->ResetOptionFontColorSetByUser(); props->ResetBackgroundColorSetByUser(); props->ResetMenuBackgroundColorSetByUser(); + props->ResetTextModifierSetByUser(); + props->ResetOptionTextModifierSetByUser(); + props->ResetSelectedOptionTextModifierSetByUser(); + props->ResetArrowModifierSetByUser(); } } @@ -111,7 +114,6 @@ void SelectModelNG::SetFontColor(const Color& color) auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->SetFontColor(color); - ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, FontColorSetByUser, true); } void SelectModelNG::SetSelectedOptionBgColor(const Color& color) @@ -158,13 +160,11 @@ void SelectModelNG::SetSelectedOptionFontColor(const Color& color) ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, SelectedOptionFontColorSetByUser, true); } -void SelectModelNG::SetOptionBgColor(const Color& color, bool isNormal) +void SelectModelNG::SetOptionBgColor(const Color& color) { auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); - pattern->SetNormalOptionBgColorResource(isNormal); pattern->SetOptionBgColor(color); - ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, OptionBgColorSetByUser, false); } void SelectModelNG::SetOptionFontSize(const Dimension& value) @@ -200,7 +200,6 @@ void SelectModelNG::SetOptionFontColor(const Color& color) auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->SetOptionFontColor(color); - ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, OptionFontColorSetByUser, true); } void SelectModelNG::SetOnSelect(NG::SelectEvent&& onSelect) @@ -534,7 +533,7 @@ RefPtr SelectModelNG::GetSelectTheme(FrameNode* frameNode) CHECK_NULL_RETURN(frameNode, nullptr); auto context = frameNode->GetContext(); CHECK_NULL_RETURN(context, nullptr); - return context->GetTheme(); + return context->GetTheme(frameNode->GetThemeScopeId()); } void SelectModelNG::SetDefaultBackGroundColor(FrameNode* frameNode) @@ -545,14 +544,18 @@ void SelectModelNG::SetDefaultBackGroundColor(FrameNode* frameNode) renderContext->UpdateBackgroundColor(Color(0x00000000)); } -void SelectModelNG::UpdateSelectComponentColor(FrameNode* frameNode, const SelectColorType selectColorType) +void SelectModelNG::ResetComponentColor(FrameNode* frameNode, const SelectColorType& type) { CHECK_NULL_VOID(frameNode); auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); auto selectTheme = GetSelectTheme(frameNode); - Color color; - switch (selectColorType) { + CHECK_NULL_VOID(selectTheme); + auto layoutProps = frameNode->GetLayoutProperty(); + CHECK_NULL_VOID(layoutProps); + auto props = frameNode->GetPaintProperty(); + CHECK_NULL_VOID(props); + switch (type) { case SelectColorType::FONT_COLOR: pattern->ResetFontColor(); break; @@ -560,53 +563,69 @@ void SelectModelNG::UpdateSelectComponentColor(FrameNode* frameNode, const Selec SetDefaultBackGroundColor(frameNode); break; case SelectColorType::SELECTED_OPTION_BG_COLOR: - CHECK_NULL_VOID(selectTheme); - color = selectTheme->GetSelectedColor(); - pattern->SetSelectedOptionBgColor(color); + if (!layoutProps->GetShowDefaultSelectedIconValue(false)) { + pattern->SetSelectedOptionBgColor(selectTheme->GetSelectedColor()); + } break; case SelectColorType::SELECTED_OPTION_FONT_COLOR: - CHECK_NULL_VOID(selectTheme); - color = selectTheme->GetSelectedColorText(); - pattern->SetSelectedOptionFontColor(color); + if (!layoutProps->GetShowDefaultSelectedIconValue(false)) { + pattern->SetSelectedOptionFontColor(selectTheme->GetSelectedColorText()); + } break; case SelectColorType::OPTION_BG_COLOR: - CHECK_NULL_VOID(selectTheme); - color = selectTheme->GetBackgroundColor(); - pattern->SetOptionBgColor(color); + pattern->SetOptionBgColor(selectTheme->GetBackgroundColor()); break; case SelectColorType::OPTION_FONT_COLOR: - CHECK_NULL_VOID(selectTheme); - color = selectTheme->GetMenuFontColor(); - pattern->SetOptionFontColor(color); + pattern->SetOptionFontColor(selectTheme->GetMenuFontColor()); break; - case SelectColorType::MENU_BACKGROUND_COLOR: - pattern->SetMenuBackgroundColor(Color(0x00000000)); + case SelectColorType::MENU_BACKGROUND_COLOR: { + if (!props->GetMenuBackgroundColorSetByUserValue(false)) { + pattern->SetMenuBackgroundColor(Color::TRANSPARENT); + } else { + pattern->SetMenuBackgroundColor(selectTheme->GetBackgroundColor()); + } break; + } default: break; } + frameNode->MarkModifyDone(); + frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } -void SelectModelNG::CreateWithColorResourceObj( - const RefPtr& resObj, const SelectColorType selectColorType) +void SelectModelNG::CreateWithColorResourceObj(const RefPtr& resObj, const SelectColorType& type) { auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); CHECK_NULL_VOID(frameNode); - CreateWithColorResourceObj(frameNode, resObj, selectColorType); + CreateWithColorResourceObj(frameNode, resObj, type); +} + +void SelectModelNG::SetColorStatus(FrameNode* frameNode, const SelectColorType& type) +{ + if (type != SelectColorType::MENU_BACKGROUND_COLOR) { + return; + } + CHECK_NULL_VOID(frameNode); + auto pattern = frameNode->GetPattern(); + CHECK_NULL_VOID(pattern); + auto menuNode = pattern->GetMenuNode(); + CHECK_NULL_VOID(menuNode); + auto menuPattern = menuNode->GetPattern(); + CHECK_NULL_VOID(menuPattern); + menuPattern->SetDisableMenuBgColorByUser(true); } void SelectModelNG::CreateWithColorResourceObj( - FrameNode* frameNode, const RefPtr& resObj, const SelectColorType selectColorType) + FrameNode* frameNode, const RefPtr& resObj, const SelectColorType& type) { CHECK_NULL_VOID(frameNode); + SetColorStatus(frameNode, type); auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); - std::string key = "select" + ModifierColorTypeToString(selectColorType); - if (!resObj) { - pattern->RemoveResObj(key); - return; - } - auto&& updateFunc = [selectColorType, weak = AceType::WeakClaim(frameNode)](const RefPtr& resObj) { + std::string key = "select" + ModifierColorTypeToString(type); + pattern->RemoveResObj(key); + CHECK_NULL_VOID(resObj); + auto&& updateFunc = [type, weak = AceType::WeakClaim(frameNode)](const RefPtr& resObj) { auto frameNode = weak.Upgrade(); CHECK_NULL_VOID(frameNode); CHECK_NULL_VOID(resObj); @@ -614,12 +633,11 @@ void SelectModelNG::CreateWithColorResourceObj( auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); if (!ResourceParseUtils::ParseResColor(resObj, result)) { - UpdateSelectComponentColor(AceType::RawPtr(frameNode), selectColorType); + SelectModelNG::ResetComponentColor(AceType::RawPtr(frameNode), type); return; } - pattern->UpdateComponentColor(result, selectColorType); + pattern->UpdateComponentColor(result, type); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -642,7 +660,7 @@ void SelectModelNG::CreateWithValueIconResourceObj(const std::vector& resObj, const int32_t index, const SelectOptionType optionType) + std::string key, const RefPtr& resObj, const int32_t index, const SelectOptionType& optionType) { auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); CHECK_NULL_VOID(frameNode); @@ -653,7 +671,7 @@ void SelectModelNG::AddResObjWithCallBack( return; } auto&& updateFunc = [index, optionType, weak = AceType::WeakClaim(AceType::RawPtr(pattern))]( - const RefPtr& resObj) { + const RefPtr& resObj) { auto pattern = weak.Upgrade(); CHECK_NULL_VOID(pattern); CHECK_NULL_VOID(resObj); @@ -669,10 +687,11 @@ void SelectModelNG::AddResObjWithCallBack( return; } break; + default: + break; } pattern->UpdateMenuOption(index, result, optionType); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -703,7 +722,6 @@ void SelectModelNG::CreateWithIntegerResourceObj(FrameNode* frameNode, const Ref } pattern->SetSelected(result); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -734,11 +752,10 @@ void SelectModelNG::CreateWithStringResourceObj(FrameNode* frameNode, const RefP } pattern->SetValue(result); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } -std::string SelectModelNG::ModifierColorTypeToString(const SelectColorType selectColorType) +std::string SelectModelNG::ModifierColorTypeToString(const SelectColorType& selectColorType) { switch (selectColorType) { case SelectColorType::FONT_COLOR: @@ -759,7 +776,7 @@ std::string SelectModelNG::ModifierColorTypeToString(const SelectColorType selec return "Unknown"; } -std::string SelectModelNG::ColorTypeToString(const SelectColorType selectColorType) +std::string SelectModelNG::ColorTypeToString(const SelectColorType& selectColorType) { switch (selectColorType) { case SelectColorType::FONT_COLOR: @@ -951,13 +968,11 @@ void SelectModelNG::SetOptionItalicFontStyle(FrameNode* frameNode, const Ace::Fo pattern->SetOptionItalicFontStyle(value); } -void SelectModelNG::SetOptionBgColor(FrameNode* frameNode, const Color& color, bool isNormal) +void SelectModelNG::SetOptionBgColor(FrameNode* frameNode, const Color& color) { auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(frameNode); CHECK_NULL_VOID(pattern); - pattern->SetNormalOptionBgColorResource(isNormal); pattern->SetOptionBgColor(color); - ACE_UPDATE_NODE_PAINT_PROPERTY(SelectPaintProperty, OptionBgColorSetByUser, true, frameNode); } void SelectModelNG::SetSelectedOptionFontColor(FrameNode* frameNode, const Color& color) @@ -1001,7 +1016,6 @@ void SelectModelNG::SetOptionFontColor(FrameNode* frameNode, const Color& color) auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(frameNode); CHECK_NULL_VOID(pattern); pattern->SetOptionFontColor(color); - ACE_UPDATE_NODE_PAINT_PROPERTY(SelectPaintProperty, OptionFontColorSetByUser, true, frameNode); } void SelectModelNG::SetOptionWidth(FrameNode* frameNode, const Dimension& value) @@ -1037,7 +1051,6 @@ void SelectModelNG::SetMenuBackgroundColor(const Color& color) auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->SetMenuBackgroundColor(color); - ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, MenuBackgroundColorSetByUser, false); } void SelectModelNG::SetMenuBackgroundBlurStyle(const BlurStyleOption& blurStyle) @@ -1092,7 +1105,6 @@ void SelectModelNG::SetMenuBackgroundColor(FrameNode* frameNode, const Color& co auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(frameNode); CHECK_NULL_VOID(pattern); pattern->SetMenuBackgroundColor(color); - ACE_UPDATE_NODE_PAINT_PROPERTY(SelectPaintProperty, MenuBackgroundColorSetByUser, true, frameNode); } void SelectModelNG::SetMenuBackgroundBlurStyle(FrameNode* frameNode, const BlurStyleOption& blurStyle) @@ -1122,7 +1134,6 @@ void SelectModelNG::ResetFontColor() auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->ResetFontColor(); - ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, FontColorSetByUser, false); } void SelectModelNG::BackgroundColor(const Color& color) @@ -1159,6 +1170,7 @@ void SelectModelNG::SetTextModifierApply(const std::functionGetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->SetTextModifierApply(textApply); + ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, TextModifierSetByUser, true); } void SelectModelNG::SetArrowModifierApply(const std::function)>& arrowApply) @@ -1166,6 +1178,7 @@ void SelectModelNG::SetArrowModifierApply(const std::functionGetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->SetArrowModifierApply(arrowApply); + ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, ArrowModifierSetByUser, true); } void SelectModelNG::SetOptionTextModifier(const std::function)>& optionApply) @@ -1173,6 +1186,7 @@ void SelectModelNG::SetOptionTextModifier(const std::functionGetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->SetOptionTextModifier(optionApply); + ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, OptionTextModifierSetByUser, true); } void SelectModelNG::SetSelectedOptionTextModifier( @@ -1181,6 +1195,7 @@ void SelectModelNG::SetSelectedOptionTextModifier( auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern(); CHECK_NULL_VOID(pattern); pattern->SetSelectedOptionTextModifier(optionSelectedApply); + ACE_UPDATE_PAINT_PROPERTY(SelectPaintProperty, OptionTextModifierSetByUser, true); } void SelectModelNG::SetShowInSubWindow(bool isShowInSubWindow) @@ -1230,4 +1245,49 @@ void SelectModelNG::SetShowDefaultSelectedIcon(FrameNode* frameNode, bool show) CHECK_NULL_VOID(selectPattern); selectPattern->SetShowDefaultSelectedIcon(show); } + +void SelectModelNG::SetOptionFontColorByUser(bool isValidValue) +{ + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + CHECK_NULL_VOID(frameNode); + SetOptionFontColorByUser(frameNode, isValidValue); +} + +void SelectModelNG::SetOptionFontColorByUser(FrameNode* frameNode, bool isValidValue) +{ + CHECK_NULL_VOID(frameNode); + auto paintProperty = frameNode->GetPaintProperty(); + CHECK_NULL_VOID(paintProperty); + paintProperty->UpdateOptionFontColorSetByUser(isValidValue); +} + +void SelectModelNG::SetFontColorByUser(bool isValidValue) +{ + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + CHECK_NULL_VOID(frameNode); + SetFontColorByUser(frameNode, isValidValue); +} + +void SelectModelNG::SetFontColorByUser(FrameNode* frameNode, bool isValidValue) +{ + CHECK_NULL_VOID(frameNode); + auto paintProperty = frameNode->GetPaintProperty(); + CHECK_NULL_VOID(paintProperty); + paintProperty->UpdateFontColorSetByUser(isValidValue); +} + +void SelectModelNG::SetMenuBackgroundColorByUser(bool isFromModifier) +{ + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + CHECK_NULL_VOID(frameNode); + SetMenuBackgroundColorByUser(frameNode, isFromModifier); +} + +void SelectModelNG::SetMenuBackgroundColorByUser(FrameNode* frameNode, bool isFromModifier) +{ + CHECK_NULL_VOID(frameNode); + auto paintProperty = frameNode->GetPaintProperty(); + CHECK_NULL_VOID(paintProperty); + paintProperty->UpdateMenuBackgroundColorSetByUser(isFromModifier); +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/select/select_model_ng.h b/frameworks/core/components_ng/pattern/select/select_model_ng.h index dd9aded5cbb..f3c46f23421 100644 --- a/frameworks/core/components_ng/pattern/select/select_model_ng.h +++ b/frameworks/core/components_ng/pattern/select/select_model_ng.h @@ -53,7 +53,7 @@ public: void SetSelectedOptionFontFamily(const std::vector& value) override; void SetSelectedOptionItalicFontStyle(const Ace::FontStyle& value) override; void SetSelectedOptionFontColor(const Color& color) override; - void SetOptionBgColor(const Color& color, bool isNormal = true) override; + void SetOptionBgColor(const Color& color) override; void SetOptionFontSize(const Dimension& value) override; void SetOptionFontWeight(const FontWeight& value) override; void SetOptionFontFamily(const std::vector& value) override; @@ -84,17 +84,16 @@ public: void SetMenuBackgroundBlurStyle(const BlurStyleOption& blurStyle) override; void SetDivider(const NG::SelectDivider& divider) override; void SetDividerStyle(const NG::SelectDivider& divider, const DividerMode& mode) override; - void CreateWithColorResourceObj(const RefPtr& resObj, - const SelectColorType selectColorType) override; + void CreateWithColorResourceObj(const RefPtr& resObj, const SelectColorType& type) override; void CreateWithValueIconResourceObj(const std::vector& resObjVec) override; void CreateWithIntegerResourceObj(const RefPtr& resObj) override; void CreateWithStringResourceObj(const RefPtr& resObj) override; static RefPtr GetSelectTheme(FrameNode* frameNode); static void SetDefaultBackGroundColor(FrameNode* frameNode); - static void UpdateSelectComponentColor(FrameNode* frameNode, const SelectColorType selectColorType); - static std::string ModifierColorTypeToString(const SelectColorType selectColorType); + static void ResetComponentColor(FrameNode* frameNode, const SelectColorType& type); + static std::string ModifierColorTypeToString(const SelectColorType& selectColorType); static void CreateWithColorResourceObj( - FrameNode* frameNode, const RefPtr& resObj, const SelectColorType selectColorType); + FrameNode* frameNode, const RefPtr& resObj, const SelectColorType& type); static void CreateWithIntegerResourceObj(FrameNode* frameNode, const RefPtr& resObj); static void CreateWithStringResourceObj(FrameNode* frameNode, const RefPtr& resObj); static void SetDivider(FrameNode* frameNode, const NG::SelectDivider& divider); @@ -140,7 +139,7 @@ public: static void SetOptionFontFamily(FrameNode* frameNode, const std::vector& value); static void SetOptionItalicFontStyle(FrameNode* frameNode, const Ace::FontStyle& value); static void SetOptionFontColor(FrameNode* frameNode, const Color& color); - static void SetOptionBgColor(FrameNode* frameNode, const Color& color, bool isNormal = true); + static void SetOptionBgColor(FrameNode* frameNode, const Color& color); static void SetSelectedOptionFontColor(FrameNode* frameNode, const Color& color); static void SetSelectedOptionFontSize(FrameNode* frameNode, const Dimension& value); static void SetSelectedOptionFontWeight(FrameNode* frameNode, const FontWeight& value); @@ -157,10 +156,18 @@ public: static void SetMenuOutline(FrameNode* frameNode, const MenuParam& menuParam); static void SetShowInSubWindow(FrameNode* frameNode, bool isShowInSubWindow); static void SetShowDefaultSelectedIcon(FrameNode* frameNode, bool show); + static void SetColorStatus(FrameNode* frameNode, const SelectColorType& type); + void SetMenuBackgroundColorByUser(bool isFromModifier) override; + static void SetMenuBackgroundColorByUser(FrameNode* frameNode, bool isFromModifier); + void SetOptionFontColorByUser(bool isValidValue) override; + static void SetOptionFontColorByUser(FrameNode* frameNode, bool isValidValue); + void SetFontColorByUser(bool isValidValue) override; + static void SetFontColorByUser(FrameNode* frameNode, bool isValidValue); + private: - std::string ColorTypeToString(const SelectColorType selectColorType); - void AddResObjWithCallBack(std::string key, const RefPtr& resObj, - const int32_t index, const SelectOptionType optionType); + std::string ColorTypeToString(const SelectColorType& selectColorType); + void AddResObjWithCallBack( + std::string key, const RefPtr& resObj, const int32_t index, const SelectOptionType& optionType); }; } // namespace OHOS::Ace::NG #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_SELECT_SELECT_MODEL_NG_H diff --git a/frameworks/core/components_ng/pattern/select/select_paint_property.h b/frameworks/core/components_ng/pattern/select/select_paint_property.h index a0bb009a580..a132c73bf78 100644 --- a/frameworks/core/components_ng/pattern/select/select_paint_property.h +++ b/frameworks/core/components_ng/pattern/select/select_paint_property.h @@ -71,10 +71,13 @@ public: ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontColorSetByUser, bool, PROPERTY_UPDATE_RENDER); ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedOptionBgColorSetByUser, bool, PROPERTY_UPDATE_RENDER); ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedOptionFontColorSetByUser, bool, PROPERTY_UPDATE_RENDER); - ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(OptionBgColorSetByUser, bool, PROPERTY_UPDATE_RENDER); ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(OptionFontColorSetByUser, bool, PROPERTY_UPDATE_RENDER); ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BackgroundColorSetByUser, bool, PROPERTY_UPDATE_RENDER); ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MenuBackgroundColorSetByUser, bool, PROPERTY_UPDATE_RENDER); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextModifierSetByUser, bool, PROPERTY_UPDATE_RENDER); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(OptionTextModifierSetByUser, bool, PROPERTY_UPDATE_RENDER); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedOptionTextModifierSetByUser, bool, PROPERTY_UPDATE_RENDER); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ArrowModifierSetByUser, bool, PROPERTY_UPDATE_RENDER); }; } // namespace OHOS::Ace::NG #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_SELECT_SELECT_PAINT_PROPERTY_H \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/select/select_pattern.cpp b/frameworks/core/components_ng/pattern/select/select_pattern.cpp index 6caf661d527..061a4a3806e 100644 --- a/frameworks/core/components_ng/pattern/select/select_pattern.cpp +++ b/frameworks/core/components_ng/pattern/select/select_pattern.cpp @@ -1252,15 +1252,20 @@ void SelectPattern::UpdateComponentColor(const Color& color, const SelectColorTy switch (selectColorType) { case SelectColorType::FONT_COLOR: SetFontColor(color); + text_->MarkDirtyNode(PROPERTY_UPDATE_LAYOUT); break; case SelectColorType::BACKGROUND_COLOR: renderContext->UpdateBackgroundColor(color); break; case SelectColorType::SELECTED_OPTION_BG_COLOR: SetSelectedOptionBgColor(color); + host->MarkModifyDone(); + host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); break; case SelectColorType::SELECTED_OPTION_FONT_COLOR: SetSelectedOptionFontColor(color); + host->MarkModifyDone(); + host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); break; case SelectColorType::OPTION_BG_COLOR: SetOptionBgColor(color); @@ -1269,9 +1274,13 @@ void SelectPattern::UpdateComponentColor(const Color& color, const SelectColorTy break; case SelectColorType::OPTION_FONT_COLOR: SetOptionFontColor(color); + host->MarkModifyDone(); + host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); break; case SelectColorType::MENU_BACKGROUND_COLOR: SetMenuBackgroundColor(color); + host->MarkModifyDone(); + host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); break; default: break; @@ -1296,7 +1305,11 @@ void SelectPattern::UpdateMenuOption(int32_t index, const std::string& value, co case SelectOptionType::ICON: menuPattern->UpdateSelectOptionIconByIndex(index, value); break; + default: + break; } + menu->MarkModifyDone(); + menu->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } void SelectPattern::UpdateLastSelectedProps(int32_t index) @@ -1875,9 +1888,7 @@ void SelectPattern::OnColorConfigurationUpdate() CHECK_NULL_VOID(menuPattern); auto renderContext = menuNode->GetRenderContext(); CHECK_NULL_VOID(renderContext); - if (!SystemProperties::ConfigChangePerform()) { - renderContext->UpdateBackgroundColor(selectTheme->GetBackgroundColor()); - } + renderContext->UpdateBackgroundColor(selectTheme->GetBackgroundColor()); if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_ELEVEN) && renderContext->IsUniRenderEnabled()) { renderContext->UpdateBackBlurStyle(renderContext->GetBackBlurStyle()); @@ -1895,58 +1906,12 @@ void SelectPattern::OnColorConfigurationUpdate() child->MarkModifyDone(); child->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); } - if (!SystemProperties::ConfigChangePerform()) { - SetOptionBgColor(selectTheme->GetBackgroundColor()); - } + SetOptionBgColor(selectTheme->GetBackgroundColor()); UpdateMenuScrollColorConfiguration(menuNode); host->SetNeedCallChildrenUpdate(false); SetColorByUser(host); } -void SelectPattern::SetMenuBackgroundColorByUser(Color themeColor) -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - auto props = host->GetPaintProperty(); - CHECK_NULL_VOID(props); - auto menu = GetMenuNode(); - CHECK_NULL_VOID(menu); - auto renderContext = menu->GetRenderContext(); - CHECK_NULL_VOID(renderContext); - auto pattern = host->GetPattern(); - CHECK_NULL_VOID(pattern); - auto menuNode = pattern->GetMenuNode(); - CHECK_NULL_VOID(menuNode); - auto menuPattern = menuNode->GetPattern(); - CHECK_NULL_VOID(menuPattern); - menuPattern->SetDisableMenuBgColor(true); - Color menuBackgroundColor = themeColor; - if (!props->GetMenuBackgroundColorSetByUser().value_or(false) && menuBackgroundColor_.has_value()) { - menuBackgroundColor = menuBackgroundColor_.value(); - } - renderContext->UpdateBackgroundColor(menuBackgroundColor); -} - -void SelectPattern::SetOptionBgColorByUser(Color themeColor) -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - auto props = host->GetPaintProperty(); - CHECK_NULL_VOID(props); - Color optionBgColor = themeColor; - if (props->GetOptionBgColorSetByUser().value_or(false) && optionBgColor_.has_value()) { - optionBgColor = optionBgColor_.value(); - } - optionBgColor_ = optionBgColor; - for (const auto& option : options_) { - auto paintProperty = option->GetPaintProperty(); - CHECK_NULL_VOID(paintProperty); - paintProperty->UpdateOptionBgColor(optionBgColor); - option->MarkModifyDone(); - option->MarkDirtyNode(PROPERTY_UPDATE_BY_CHILD_REQUEST); - } -} - void SelectPattern::SetColorByUser(const RefPtr& host) { if (!SystemProperties::ConfigChangePerform()) { @@ -1955,41 +1920,16 @@ void SelectPattern::SetColorByUser(const RefPtr& host) CHECK_NULL_VOID(host); auto pipeline = host->GetContextWithCheck(); CHECK_NULL_VOID(pipeline); - auto theme = pipeline->GetTheme(); + auto theme = pipeline->GetTheme(host->GetThemeScopeId()); CHECK_NULL_VOID(theme); - auto themeBgColor = theme->GetBackgroundColor(); - SetMenuBackgroundColorByUser(themeBgColor); - SetOptionBgColorByUser(themeBgColor); auto props = host->GetPaintProperty(); CHECK_NULL_VOID(props); - auto spinnerId = GetSpinnerId(); - auto spinner = FrameNode::GetOrCreateFrameNode( - V2::SYMBOL_ETS_TAG, spinnerId, []() { return AceType::MakeRefPtr(); }); - CHECK_NULL_VOID(spinner); - InitSpinner(spinner, theme); - spinner->MarkModifyDone(); - - auto rowId = GetRowId(); - auto row = FrameNode::GetOrCreateFrameNode( - V2::ROW_ETS_TAG, rowId, []() { return AceType::MakeRefPtr(false); }); - CHECK_NULL_VOID(row); - row->MarkModifyDone(); - row->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF_AND_PARENT); - - if (!props->GetFontColorSetByUser().value_or(false)) { - ResetFontColor(); - } - if (!props->GetOptionFontColorSetByUser().value_or(false)) { - SetOptionFontColor(theme->GetMenuFontColor()); - } - - if (!props->GetSelectedOptionBgColorSetByUser().value_or(false)) { + auto layoutProps = host->GetLayoutProperty(); + CHECK_NULL_VOID(layoutProps); + SetModifierByUser(host, props, layoutProps); + if (!layoutProps->GetShowDefaultSelectedIconValue(false) && !props->GetSelectedOptionBgColorSetByUserValue(false)) { SetSelectedOptionBgColor(theme->GetSelectedColor()); } - - if (!props->GetSelectedOptionFontColorSetByUser().value_or(false)) { - SetSelectedOptionFontColor(theme->GetSelectedColorText()); - } host->MarkModifyDone(); host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); } @@ -2152,7 +2092,6 @@ void SelectPattern::SetOptionHeight(const Dimension& value) void SelectPattern::SetMenuBackgroundColor(const Color& color) { - menuBackgroundColor_ = color; auto menu = GetMenuNode(); CHECK_NULL_VOID(menu); auto renderContext = menu->GetRenderContext(); @@ -2496,4 +2435,51 @@ void SelectPattern::DumpInfo() DumpLog::GetInstance().AddDesc("OptionBgColor: " + optionBgColor_.value_or(Color()).ToString()); DumpLog::GetInstance().AddDesc("ControlSize: " + ConvertControlSizeToString(controlSize_)); } + +void SelectPattern::SetModifierByUser(const RefPtr& frameNode, const RefPtr& props, + const RefPtr& layoutProps) +{ + CHECK_NULL_VOID(frameNode); + CHECK_NULL_VOID(props); + CHECK_NULL_VOID(layoutProps); + auto pipeline = frameNode->GetContextRefPtr(); + CHECK_NULL_VOID(pipeline); + auto theme = pipeline->GetTheme(frameNode->GetThemeScopeId()); + CHECK_NULL_VOID(theme); + if (props->GetTextModifierSetByUserValue(false)) { + SetTextModifierApply(textApply_); + } else if (!props->GetFontColorSetByUserValue(false)) { + ResetFontColor(); + } + + if (props->GetOptionTextModifierSetByUserValue(false)) { + SetOptionTextModifier(textOptionApply_); + } else if (!props->GetOptionFontColorSetByUserValue(false)) { + SetOptionFontColor(theme->GetMenuFontColor()); + } + + if (props->GetSelectedOptionTextModifierSetByUserValue(false)) { + SetSelectedOptionTextModifier(textSelectOptionApply_); + } else if (!layoutProps->GetShowDefaultSelectedIconValue(false) && + !props->GetSelectedOptionFontColorSetByUserValue(false)) { + SetSelectedOptionFontColor(theme->GetSelectedColorText()); + } + + if (props->GetArrowModifierSetByUserValue(false)) { + SetArrowModifierApply(arrowApply_); + } else { + auto spinnerId = GetSpinnerId(); + auto spinner = FrameNode::GetOrCreateFrameNode( + V2::SYMBOL_ETS_TAG, spinnerId, []() { return AceType::MakeRefPtr(); }); + CHECK_NULL_VOID(spinner); + InitSpinner(spinner, theme); + spinner->MarkModifyDone(); + auto rowId = GetRowId(); + auto row = FrameNode::GetOrCreateFrameNode( + V2::ROW_ETS_TAG, rowId, []() { return AceType::MakeRefPtr(false); }); + CHECK_NULL_VOID(row); + row->MarkModifyDone(); + row->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF_AND_PARENT); + } +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/select/select_pattern.h b/frameworks/core/components_ng/pattern/select/select_pattern.h index 0c20718cc76..768fce87328 100644 --- a/frameworks/core/components_ng/pattern/select/select_pattern.h +++ b/frameworks/core/components_ng/pattern/select/select_pattern.h @@ -252,15 +252,8 @@ public: void UpdateComponentColor(const Color& color, const SelectColorType selectColorType); void SetColorByUser(const RefPtr& host); void UpdateMenuOption(int32_t index, const std::string& value, const SelectOptionType optionType); - void SetNormalOptionBgColorResource(bool flag) - { - isNormalOptionBgColorFlag_ = flag; - } - - bool IsNormalOptionBgColorResource() - { - return isNormalOptionBgColorFlag_; - } + void SetModifierByUser(const RefPtr& frameNode, const RefPtr& props, + const RefPtr& layoutProps); private: void OnAttachToFrameNode() override; @@ -270,8 +263,6 @@ private: void HandleFocusStyleTask(); void HandleBlurStyleTask(); void SetFocusStyle(); - void SetMenuBackgroundColorByUser(Color themeColor); - void SetOptionBgColorByUser(Color themeColor); void ClearFocusStyle(); void ModFocusIconStyle(RefPtr selectTheme, bool focusedFlag); void InitFocusEvent(); @@ -402,8 +393,6 @@ private: std::function)> textApply_ = nullptr; std::function)> textOptionApply_ = nullptr; std::function)> textSelectOptionApply_ = nullptr; - bool isNormalOptionBgColorFlag_ = false; - std::optional menuBackgroundColor_; }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/slider/slider_model_ng.cpp b/frameworks/core/components_ng/pattern/slider/slider_model_ng.cpp index 7b202e97014..c2afb2e9b7f 100644 --- a/frameworks/core/components_ng/pattern/slider/slider_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/slider/slider_model_ng.cpp @@ -895,7 +895,6 @@ void SliderModelNG::CreateWithColorResourceObj( Gradient gradient = SliderModelNG::CreateSolidGradient(result); pattern->UpdateSliderComponentColor(result, sliderColorType, gradient); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -916,19 +915,20 @@ void SliderModelNG::CreateWithMediaResourceObj(FrameNode* frameNode, const RefPt std::string key = "sliderImage"; pattern->RemoveResObj(key); CHECK_NULL_VOID(resObj); - auto&& updateFunc = [bundleName, moduleName, weak = AceType::WeakClaim(AceType::RawPtr(pattern))]( + auto&& updateFunc = [bundleName, moduleName, weak = AceType::WeakClaim(frameNode)]( const RefPtr& resObj) { - auto pattern = weak.Upgrade(); + auto frameNode = weak.Upgrade(); + CHECK_NULL_VOID(frameNode); + auto pattern = frameNode->GetPattern(); CHECK_NULL_VOID(pattern); std::string result; if (ResourceParseUtils::ParseResMedia(resObj, result)) { - ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockImage, result); - ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockImageBundleName, bundleName); - ACE_UPDATE_PAINT_PROPERTY(SliderPaintProperty, BlockImageModuleName, moduleName); + ACE_UPDATE_NODE_PAINT_PROPERTY(SliderPaintProperty, BlockImage, result, frameNode); + ACE_UPDATE_NODE_PAINT_PROPERTY(SliderPaintProperty, BlockImageBundleName, bundleName, frameNode); + ACE_UPDATE_NODE_PAINT_PROPERTY(SliderPaintProperty, BlockImageModuleName, moduleName, frameNode); pattern->UpdateSliderComponentMedia(); } }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -957,7 +957,6 @@ void SliderModelNG::CreateWithStringResourceObj(FrameNode* frameNode, const RefP pattern->UpdateSliderComponentString(isShowTips, result); } }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } diff --git a/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp b/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp index 71b99e18aaa..419f600f288 100644 --- a/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp +++ b/frameworks/core/components_ng/pattern/slider/slider_pattern.cpp @@ -265,7 +265,7 @@ void SliderPattern::OnColorConfigurationUpdate() CHECK_NULL_VOID(host); auto pipeline = host->GetContextWithCheck(); CHECK_NULL_VOID(pipeline); - auto sliderTheme = pipeline->GetTheme(); + auto sliderTheme = pipeline->GetTheme(GetThemeScopeId()); CHECK_NULL_VOID(sliderTheme); auto paintProperty = GetPaintProperty(); CHECK_NULL_VOID(paintProperty); diff --git a/frameworks/core/components_ng/pattern/toggle/switch_pattern.cpp b/frameworks/core/components_ng/pattern/toggle/switch_pattern.cpp index 33e604bb58f..90ad7c9dcf7 100644 --- a/frameworks/core/components_ng/pattern/toggle/switch_pattern.cpp +++ b/frameworks/core/components_ng/pattern/toggle/switch_pattern.cpp @@ -431,58 +431,6 @@ void SwitchPattern::UpdateColorWhenIsOn(bool isOn) } } -void SwitchPattern::UpdateComponentColor(const Color& color, const ToggleColorType toggleColorType) -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - auto pipelineContext = host->GetContext(); - CHECK_NULL_VOID(pipelineContext); - auto paintProperty = GetPaintProperty(); - CHECK_NULL_VOID(paintProperty); - - if (pipelineContext->IsSystmColorChange()) { - switch (toggleColorType) { - case ToggleColorType::SELECTED_COLOR: - paintProperty->UpdateSelectedColor(color); - break; - case ToggleColorType::SWITCH_POINT_COLOR: - paintProperty->UpdateSwitchPointColor(color); - break; - case ToggleColorType::UN_SELECTED_COLOR: - paintProperty->UpdateUnselectedColor(color); - break; - } - } - if (host->GetRerenderable()) { - host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); - } -} - -void SwitchPattern::UpdateComponentDimension(const CalcDimension& dimension, - const ToggleDimensionType toggleDimensionType) -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - auto pipelineContext = host->GetContext(); - CHECK_NULL_VOID(pipelineContext); - auto paintProperty = GetPaintProperty(); - CHECK_NULL_VOID(paintProperty); - - if (pipelineContext->IsSystmColorChange()) { - switch (toggleDimensionType) { - case ToggleDimensionType::POINT_RADIUS: - paintProperty->UpdatePointRadius(dimension); - break; - case ToggleDimensionType::TRACK_BORDER_RADIUS: - paintProperty->UpdateTrackBorderRadius(dimension); - break; - } - } - if (host->GetRerenderable()) { - host->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); - } -} - void SwitchPattern::OnTouchDown() { if (UseContentModifier()) { diff --git a/frameworks/core/components_ng/pattern/toggle/switch_pattern.h b/frameworks/core/components_ng/pattern/toggle/switch_pattern.h index 47a4d1ad481..4d719d0620f 100644 --- a/frameworks/core/components_ng/pattern/toggle/switch_pattern.h +++ b/frameworks/core/components_ng/pattern/toggle/switch_pattern.h @@ -154,9 +154,6 @@ public: { return true; } - void UpdateComponentColor(const Color& color, const ToggleColorType toggleColorType); - void UpdateComponentDimension(const CalcDimension& dimension, const ToggleDimensionType toggleDimensionType); - private: void OnAttachToFrameNode() override; void OnModifyDone() override; diff --git a/frameworks/core/components_ng/pattern/toggle/toggle_model.h b/frameworks/core/components_ng/pattern/toggle/toggle_model.h index 3c864068168..a1d5a9f9259 100644 --- a/frameworks/core/components_ng/pattern/toggle/toggle_model.h +++ b/frameworks/core/components_ng/pattern/toggle/toggle_model.h @@ -73,6 +73,8 @@ public: const ToggleColorType toggleColorType) {}; virtual void CreateWithDimensionVpResourceObj(const RefPtr& resObj, const ToggleDimensionType toggleDimensionType) {}; + virtual void SetSwitchPointColorSetByUser(const bool flag) {}; + virtual void SetUnselectedColorSetByUser(const bool flag) {}; private: static std::unique_ptr instance_; diff --git a/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.cpp b/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.cpp index fd2ddc55d69..43b7720bb09 100644 --- a/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.cpp @@ -141,13 +141,22 @@ void ToggleModelNG::SetSwitchPointColor(const std::optional& switchPointC if (paintProperty) { if (switchPointColor.has_value()) { paintProperty->UpdateSwitchPointColor(switchPointColor.value()); - ACE_UPDATE_PAINT_PROPERTY(SwitchPaintProperty, SwitchPointColorSetByUser, true); } else { paintProperty->ResetSwitchPointColor(); - ACE_UPDATE_PAINT_PROPERTY(SwitchPaintProperty, SwitchPointColorSetByUser, false); } } } + +void ToggleModelNG::SetSwitchPointColorSetByUser(const bool flag) +{ + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + CHECK_NULL_VOID(frameNode); + auto paintProperty = frameNode->GetPaintProperty(); + if (paintProperty) { + paintProperty->UpdateSwitchPointColorSetByUser(flag); + } +} + void ToggleModelNG::OnChange(ChangeEvent&& onChange) { auto* stack = ViewStackProcessor::GetInstance(); @@ -439,7 +448,16 @@ void ToggleModelNG::SetUnselectedColor(const Color& unselectedColor) auto paintProperty = frameNode->GetPaintProperty(); if (paintProperty) { paintProperty->UpdateUnselectedColor(unselectedColor); - ACE_UPDATE_PAINT_PROPERTY(SwitchPaintProperty, UnselectedColorSetByUser, true); + } +} + +void ToggleModelNG::SetUnselectedColorSetByUser(const bool flag) +{ + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + CHECK_NULL_VOID(frameNode); + auto paintProperty = frameNode->GetPaintProperty(); + if (paintProperty) { + paintProperty->UpdateUnselectedColorSetByUser(flag); } } @@ -452,6 +470,11 @@ void ToggleModelNG::SetUnselectedColor(FrameNode* frameNode, const Color& unsele } } +void ToggleModelNG::SetUnselectedColorSetByUser(FrameNode* frameNode, const bool flag) +{ + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, UnselectedColorSetByUser, flag, frameNode); +} + void ToggleModelNG::SetTrackBorderRadius(const Dimension& borderRadius) { auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); @@ -530,10 +553,12 @@ void ToggleModelNG::SetSelectedColor(FrameNode* frameNode, const std::optionalGetTheme(frameNode->GetThemeScopeId()); CHECK_NULL_VOID(theme); color = theme->GetActiveColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SelectedColorSetByUser, false, frameNode); + } else { + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SelectedColorSetByUser, true, frameNode); } ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SelectedColor, color, frameNode); - ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SelectedColorSetByUser, true, frameNode); } void ToggleModelNG::SetSwitchPointColor(FrameNode* frameNode, const std::optional& switchPointColor) @@ -552,7 +577,11 @@ void ToggleModelNG::SetSwitchPointColor(FrameNode* frameNode, const std::optiona color = theme->GetPointColor(); } ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SwitchPointColor, color, frameNode); - ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SwitchPointColorSetByUser, true, frameNode); +} + +void ToggleModelNG::SetSwitchPointColorSetByUser(FrameNode* frameNode, const bool flag) +{ + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SwitchPointColorSetByUser, flag, frameNode); } void ToggleModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& color) @@ -642,22 +671,25 @@ void ToggleModelNG::CreateWithColorResourceObj( CreateWithResourceObj(frameNode, toggleColorType, resObj); } -void ToggleModelNG::UpdateSwitchToggleComponentColor(FrameNode* frameNode, const ToggleColorType toggleColorType) +void ToggleModelNG::SetSwitchDefaultColor(FrameNode* frameNode, const ToggleColorType type) { CHECK_NULL_VOID(frameNode); - auto pipeline = PipelineBase::GetCurrentContextSafely(); + auto pipeline = frameNode->GetContext(); CHECK_NULL_VOID(pipeline); - auto theme = pipeline->GetTheme(frameNode->GetThemeScopeId()); + auto theme = pipeline->GetTheme(); CHECK_NULL_VOID(theme); - auto color = theme->GetPointColor(); - switch (toggleColorType) { + Color color; + switch (type) { case ToggleColorType::SELECTED_COLOR: - SetUnselectedColor(frameNode, color); + color = theme->GetActiveColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SelectedColor, color, frameNode); break; case ToggleColorType::SWITCH_POINT_COLOR: - SetSwitchPointColor(frameNode, color); + color = theme->GetPointColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SwitchPointColor, color, frameNode); break; case ToggleColorType::UN_SELECTED_COLOR: + color = theme->GetInactiveColor(); SetUnselectedColor(frameNode, color); break; default: @@ -671,45 +703,50 @@ void ToggleModelNG::CreateWithSwitchResourceObj(FrameNode* node, const ToggleCol CHECK_NULL_VOID(node); auto pattern = node->GetPattern(); CHECK_NULL_VOID(pattern); - pattern->RemoveResObj(key); - CHECK_NULL_VOID(resObj); + if (!resObj) { + pattern->RemoveResObj(key); + return; + } auto&& updateFunc = [toggleColorType, weak = AceType::WeakClaim(node)](const RefPtr& resObj) { auto frameNode = weak.Upgrade(); CHECK_NULL_VOID(frameNode); - auto pattern = frameNode->GetPattern(); - CHECK_NULL_VOID(pattern); + CHECK_NULL_VOID(resObj); Color result; if (!ResourceParseUtils::ParseResColor(resObj, result)) { - UpdateSwitchToggleComponentColor(AceType::RawPtr(frameNode), toggleColorType); + SetSwitchDefaultColor(AceType::RawPtr(frameNode), toggleColorType); + return; } - - pattern->UpdateComponentColor(result, toggleColorType); + switch (toggleColorType) { + case ToggleColorType::SELECTED_COLOR: + SetSelectedColor(AceType::RawPtr(frameNode), result); + break; + case ToggleColorType::SWITCH_POINT_COLOR: + SetSwitchPointColor(AceType::RawPtr(frameNode), result); + break; + case ToggleColorType::UN_SELECTED_COLOR: + SetUnselectedColor(AceType::RawPtr(frameNode), result); + break; + default: + break; + } + frameNode->MarkModifyDone(); + frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } -void ToggleModelNG::UpdateCBToggleComponentColor(FrameNode* frameNode, const ToggleColorType toggleColorType) +void ToggleModelNG::SetCheckboxDefaultColor(FrameNode* frameNode, const ToggleColorType type) { + if (type != ToggleColorType::SELECTED_COLOR) { + return; + } CHECK_NULL_VOID(frameNode); - auto pipeline = PipelineBase::GetCurrentContextSafely(); + auto pipeline = frameNode->GetContext(); CHECK_NULL_VOID(pipeline); - auto theme = pipeline->GetTheme(frameNode->GetThemeScopeId()); + auto theme = pipeline->GetTheme(); CHECK_NULL_VOID(theme); - auto color = theme->GetPointColor(); - switch (toggleColorType) { - case ToggleColorType::SELECTED_COLOR: - SetUnselectedColor(frameNode, color); - break; - case ToggleColorType::SWITCH_POINT_COLOR: - SetSwitchPointColor(frameNode, color); - break; - case ToggleColorType::UN_SELECTED_COLOR: - SetUnselectedColor(frameNode, color); - break; - default: - break; - } + auto color = theme->GetActiveColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SelectedColor, color, frameNode); } void ToggleModelNG::CreateWithCheckBoxResourceObj(FrameNode* node, const ToggleColorType toggleColorType, @@ -718,44 +755,40 @@ void ToggleModelNG::CreateWithCheckBoxResourceObj(FrameNode* node, const ToggleC CHECK_NULL_VOID(node); auto pattern = node->GetPattern(); CHECK_NULL_VOID(pattern); - pattern->RemoveResObj(key); - CHECK_NULL_VOID(resObj); + if (!resObj) { + pattern->RemoveResObj(key); + return; + } auto&& updateFunc = [toggleColorType, weak = AceType::WeakClaim(node)](const RefPtr& resObj) { auto frameNode = weak.Upgrade(); CHECK_NULL_VOID(frameNode); - auto pattern = frameNode->GetPattern(); - CHECK_NULL_VOID(pattern); + CHECK_NULL_VOID(resObj); Color result; if (!ResourceParseUtils::ParseResColor(resObj, result)) { - UpdateCBToggleComponentColor(AceType::RawPtr(frameNode), toggleColorType); + SetCheckboxDefaultColor(AceType::RawPtr(frameNode), toggleColorType); + return; + } + if (toggleColorType == ToggleColorType::SELECTED_COLOR) { + SetSelectedColor(AceType::RawPtr(frameNode), result); + frameNode->MarkModifyDone(); + frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); } - pattern->UpdateComponentColor(result, toggleColorType); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } -void ToggleModelNG::UpdateToggleButtonComponentColor(FrameNode* frameNode, const ToggleColorType toggleColorType) +void ToggleModelNG::SetButtonDefaultColor(FrameNode* frameNode, const ToggleColorType type) { + if (type != ToggleColorType::SELECTED_COLOR) { + return; + } CHECK_NULL_VOID(frameNode); - auto pipeline = PipelineBase::GetCurrentContextSafely(); + auto pipeline = frameNode->GetContext(); CHECK_NULL_VOID(pipeline); - auto theme = pipeline->GetTheme(frameNode->GetThemeScopeId()); + auto theme = pipeline->GetTheme(); CHECK_NULL_VOID(theme); - auto color = theme->GetPointColor(); - switch (toggleColorType) { - case ToggleColorType::SELECTED_COLOR: - SetUnselectedColor(frameNode, color); - break; - case ToggleColorType::SWITCH_POINT_COLOR: - SetSwitchPointColor(frameNode, color); - break; - case ToggleColorType::UN_SELECTED_COLOR: - SetUnselectedColor(frameNode, color); - break; - default: - break; - } + auto color = theme->GetCheckedColor(); + ACE_UPDATE_NODE_PAINT_PROPERTY(SwitchPaintProperty, SelectedColor, color, frameNode); } void ToggleModelNG::CreateWithButtonResourceObj(FrameNode* node, const ToggleColorType toggleColorType, @@ -764,21 +797,25 @@ void ToggleModelNG::CreateWithButtonResourceObj(FrameNode* node, const ToggleCol CHECK_NULL_VOID(node); auto pattern = node->GetPattern(); CHECK_NULL_VOID(pattern); - pattern->RemoveResObj(key); - CHECK_NULL_VOID(resObj); + if (!resObj) { + pattern->RemoveResObj(key); + return; + } auto&& updateFunc = [toggleColorType, weak = AceType::WeakClaim(node)](const RefPtr& resObj) { auto frameNode = weak.Upgrade(); CHECK_NULL_VOID(frameNode); - auto pattern = frameNode->GetPattern(); - CHECK_NULL_VOID(pattern); + CHECK_NULL_VOID(resObj); Color result; if (!ResourceParseUtils::ParseResColor(resObj, result)) { - UpdateToggleButtonComponentColor(AceType::RawPtr(frameNode), toggleColorType); + SetButtonDefaultColor(AceType::RawPtr(frameNode), toggleColorType); + return; + } + if (toggleColorType == ToggleColorType::SELECTED_COLOR) { + SetSelectedColor(AceType::RawPtr(frameNode), result); + frameNode->MarkModifyDone(); + frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE_SELF); } - - pattern->UpdateComponentColor(result, toggleColorType); }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } @@ -801,25 +838,36 @@ void ToggleModelNG::CreateWithDimensionVpResourceObj( } void ToggleModelNG::CreateWithResourceObj( - const FrameNode* node, const ToggleDimensionType toggleDimensionType, const RefPtr& resObj) + FrameNode* node, const ToggleDimensionType toggleDimensionType, const RefPtr& resObj) { CHECK_NULL_VOID(node); auto pattern = node->GetPattern(); CHECK_NULL_VOID(pattern); - std::string key = "toggle" + DimensionTypeToString(toggleDimensionType); - pattern->RemoveResObj(key); - CHECK_NULL_VOID(resObj); - auto&& updateFunc = [toggleDimensionType, weak = AceType::WeakClaim(AceType::RawPtr(pattern))]( - const RefPtr& resObj) { - auto pattern = weak.Upgrade(); - CHECK_NULL_VOID(pattern); + if (!resObj) { + pattern->RemoveResObj(key); + return; + } + auto&& updateFunc = [toggleDimensionType, weak = AceType::WeakClaim(node)](const RefPtr& resObj) { + auto frameNode = weak.Upgrade(); + CHECK_NULL_VOID(frameNode); + CHECK_NULL_VOID(resObj); CalcDimension result; - if (ResourceParseUtils::ParseResDimensionVpNG(resObj, result, false)) { - pattern->UpdateComponentDimension(result, toggleDimensionType); + if (!ResourceParseUtils::ParseResDimensionVpNG(resObj, result, false) && !result.IsNegative()) { + ResetTrackBorderRadius(AceType::RawPtr(frameNode)); + return; + } + switch (toggleDimensionType) { + case ToggleDimensionType::POINT_RADIUS: + SetPointRadius(AceType::RawPtr(frameNode), result); + break; + case ToggleDimensionType::TRACK_BORDER_RADIUS: + SetTrackBorderRadius(AceType::RawPtr(frameNode), result); + break; + default: + break; } }; - updateFunc(resObj); pattern->AddResObj(key, resObj, std::move(updateFunc)); } diff --git a/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.h b/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.h index 53f87ea0d12..2bf6ddd9685 100644 --- a/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.h +++ b/frameworks/core/components_ng/pattern/toggle/toggle_model_ng.h @@ -60,6 +60,11 @@ public: const ToggleColorType toggleColorType) override; void CreateWithDimensionVpResourceObj(const RefPtr& resObj, const ToggleDimensionType toggleDimensionType) override; + void SetSwitchPointColorSetByUser(const bool flag) override; + void SetUnselectedColorSetByUser(const bool flag) override; + + static void SetUnselectedColorSetByUser(FrameNode* frameNode, const bool flag); + static void SetSwitchPointColorSetByUser(FrameNode* frameNode, const bool flag); static void SetPointRadius(FrameNode* frameNode, const Dimension& switchPointRadius); static void ResetPointRadius(FrameNode* frameNode); static void SetUnselectedColor(FrameNode* frameNode, const Color& unselectedColor); @@ -85,9 +90,9 @@ public: static bool GetSwitchIsOn(FrameNode* frameNode); static Color GetUnselectedColor(FrameNode* frameNode); - static void UpdateSwitchToggleComponentColor(FrameNode* frameNode, const ToggleColorType toggleColorType); - static void UpdateCBToggleComponentColor(FrameNode* frameNode, const ToggleColorType toggleColorType); - static void UpdateToggleButtonComponentColor(FrameNode* frameNode, const ToggleColorType toggleColorType); + static void SetSwitchDefaultColor(FrameNode* frameNode, const ToggleColorType type); + static void SetCheckboxDefaultColor(FrameNode* frameNode, const ToggleColorType type); + static void SetButtonDefaultColor(FrameNode* frameNode, const ToggleColorType type); static void CreateWithSwitchResourceObj(FrameNode* node, const ToggleColorType toggleColorType, const RefPtr& resObj, const std::string& key); static void CreateWithCheckBoxResourceObj(FrameNode* node, const ToggleColorType toggleColorType, @@ -95,9 +100,9 @@ public: static void CreateWithButtonResourceObj(FrameNode* node, const ToggleColorType toggleColorType, const RefPtr& resObj, const std::string& key); static void CreateWithResourceObj( - const FrameNode* node, const ToggleDimensionType toggleDimensionType, const RefPtr& resObj); + FrameNode* node, const ToggleDimensionType toggleDimensionType, const RefPtr& resObj); static void CreateWithResourceObj( - const FrameNode* node, const ToggleColorType toggleDimensionType, const RefPtr& resObj); + const FrameNode* node, const ToggleColorType toggleColorType, const RefPtr& resObj); private: static void ReCreateFrameNode( diff --git a/frameworks/core/interfaces/arkoala/arkoala_api.h b/frameworks/core/interfaces/arkoala/arkoala_api.h index 081995de657..9766a50b2ce 100644 --- a/frameworks/core/interfaces/arkoala/arkoala_api.h +++ b/frameworks/core/interfaces/arkoala/arkoala_api.h @@ -5266,10 +5266,10 @@ struct ArkUIToggleModifier { void (*setToggleSwitchPointColorPtr)(ArkUINodeHandle node, ArkUI_Uint32 switchPointColor, ArkUI_VoidPtr colorRawPtr); void (*setTogglePointRadiusPtr)(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, - ArkUI_VoidPtr radiuRawPtr); + ArkUI_VoidPtr radiusRawPtr); void (*setToggleUnselectedColorPtr)(ArkUINodeHandle node, ArkUI_Uint32 unselectedColor, ArkUI_VoidPtr colorRawPtr); void (*setToggleTrackBorderRadiusPtr)(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, - ArkUI_VoidPtr radiuRawPtr); + ArkUI_VoidPtr radiusRawPtr); void (*setToggleMargin)(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right, const struct ArkUISizeType* bottom, const struct ArkUISizeType* left); void (*resetToggleMargin)(ArkUINodeHandle node); @@ -6272,6 +6272,8 @@ struct ArkUIRadioModifier { void (*setRadioMargin)(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right, const struct ArkUISizeType* bottom, const struct ArkUISizeType* left); void (*resetRadioMargin)(ArkUINodeHandle node); + void (*setRadioColorSetByUser)(ArkUINodeHandle node, ArkUI_Bool isCheckedBackgroundColorSetByUser, + ArkUI_Bool isUncheckedBorderColorSetByUser, ArkUI_Bool isIndicatorColorSetByUser); }; struct ArkUIPatternLockControllerModifier { diff --git a/frameworks/core/interfaces/native/node/button_modifier.cpp b/frameworks/core/interfaces/native/node/button_modifier.cpp index 59b6f0d9979..cb8435c3f46 100644 --- a/frameworks/core/interfaces/native/node/button_modifier.cpp +++ b/frameworks/core/interfaces/native/node/button_modifier.cpp @@ -183,8 +183,7 @@ void ResetButtonFontColor(ArkUINodeHandle node) Color textColor = buttonTheme->GetTextStyle().GetTextColor(); ButtonModelNG::SetFontColor(frameNode, textColor); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - ButtonModelNG::CreateWithColorResourceObj(frameNode, resObj, ButtonColorType::FONT_COLOR); + ButtonModelNG::CreateWithColorResourceObj(frameNode, nullptr, ButtonColorType::FONT_COLOR); } } @@ -286,8 +285,7 @@ void ResetButtonFontFamily(ArkUINodeHandle node) std::vector fontFamilyResult = Framework::ConvertStrToFontFamilies(familiesStr); ButtonModelNG::SetFontFamily(frameNode, fontFamilyResult); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - ButtonModelNG::CreateWithFamiliesResourceObj(frameNode, resObj, ButtonStringType::FONT_FAMILY); + ButtonModelNG::CreateWithFamiliesResourceObj(frameNode, nullptr, ButtonStringType::FONT_FAMILY); } } @@ -447,18 +445,14 @@ void SetButtonLabelStylePtr(ArkUINodeHandle node, ArkUI_CharPtr* stringParameter if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - if (sizeResObj.minFontSize) { - auto* minFontSize = reinterpret_cast(sizeResObj.minFontSize); - auto minSizeResObj = AceType::Claim(minFontSize); - ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, minSizeResObj, - ButtonDimensionType::MIN_FONT_SIZE); - } - if (sizeResObj.maxFontSize) { - auto* maxFontSize = reinterpret_cast(sizeResObj.maxFontSize); - auto maxSizeResObj = AceType::Claim(maxFontSize); - ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, maxSizeResObj, - ButtonDimensionType::MAX_FONT_SIZE); - } + auto* minFontSize = reinterpret_cast(sizeResObj.minFontSize); + auto minSizeResObj = AceType::Claim(minFontSize); + ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, minSizeResObj, + ButtonDimensionType::MIN_FONT_SIZE); + auto* maxFontSize = reinterpret_cast(sizeResObj.maxFontSize); + auto maxSizeResObj = AceType::Claim(maxFontSize); + ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, maxSizeResObj, + ButtonDimensionType::MAX_FONT_SIZE); } } @@ -467,9 +461,8 @@ void ResetButtonLabelStyle(ArkUINodeHandle node) if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto resObj = AceType::MakeRefPtr(); - ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, resObj, ButtonDimensionType::MIN_FONT_SIZE); - ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, resObj, ButtonDimensionType::MAX_FONT_SIZE); + ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, nullptr, ButtonDimensionType::MIN_FONT_SIZE); + ButtonModelNG::CreateWithDimensionFpResourceObj(frameNode, nullptr, ButtonDimensionType::MAX_FONT_SIZE); } return; } @@ -520,8 +513,7 @@ void ResetButtonBackgroundColor(ArkUINodeHandle node) backgroundColor = buttonTheme->GetBgColor(); ButtonModelNG::BackgroundColor(frameNode, backgroundColor, false); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - ButtonModelNG::CreateWithColorResourceObj(frameNode, resObj, ButtonColorType::BACKGROUND_COLOR); + ButtonModelNG::CreateWithColorResourceObj(frameNode, nullptr, ButtonColorType::BACKGROUND_COLOR); } } @@ -764,8 +756,7 @@ void ResetButtonMinFontScale(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); ButtonModelNG::SetMinFontScale(frameNode, DEFAULT_MIN_FONT_SCALE); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - ButtonModelNG::CreateWithDoubleResourceObj(frameNode, resObj, ButtonDoubleType::MIN_FONT_SCALE); + ButtonModelNG::CreateWithDoubleResourceObj(frameNode, nullptr, ButtonDoubleType::MIN_FONT_SCALE); } } @@ -795,8 +786,7 @@ void ResetButtonMaxFontScale(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); ButtonModelNG::SetMaxFontScale(frameNode, DEFAULT_MAX_FONT_SCALE); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - ButtonModelNG::CreateWithDoubleResourceObj(frameNode, resObj, ButtonDoubleType::MAX_FONT_SCALE); + ButtonModelNG::CreateWithDoubleResourceObj(frameNode, nullptr, ButtonDoubleType::MAX_FONT_SCALE); } } diff --git a/frameworks/core/interfaces/native/node/checkboxgroup_modifier.cpp b/frameworks/core/interfaces/native/node/checkboxgroup_modifier.cpp index d30e5db5ac8..d8204601b58 100644 --- a/frameworks/core/interfaces/native/node/checkboxgroup_modifier.cpp +++ b/frameworks/core/interfaces/native/node/checkboxgroup_modifier.cpp @@ -55,8 +55,8 @@ void ResetCheckboxGroupSelectedColor(ArkUINodeHandle node) auto checkBoxTheme = themeManager->GetTheme(); CheckBoxGroupModelNG::SetSelectedColor(frameNode, checkBoxTheme->GetActiveColor()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - CheckBoxGroupModelNG::CreateWithResourceObj(frameNode, CheckBoxGroupColorType::SELECTED_COLOR, resObj); + CheckBoxGroupModelNG::SetSelectedColorByUser(frameNode, false); + CheckBoxGroupModelNG::CreateWithResourceObj(frameNode, CheckBoxGroupColorType::SELECTED_COLOR, nullptr); } } @@ -91,8 +91,8 @@ void ResetCheckboxGroupUnSelectedColor(ArkUINodeHandle node) auto checkBoxTheme = themeManager->GetTheme(); CheckBoxGroupModelNG::SetUnSelectedColor(frameNode, checkBoxTheme->GetInactiveColor()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - CheckBoxGroupModelNG::CreateWithResourceObj(frameNode, CheckBoxGroupColorType::UN_SELECTED_COLOR, resObj); + CheckBoxGroupModelNG::SetUnSelectedColorByUser(frameNode, false); + CheckBoxGroupModelNG::CreateWithResourceObj(frameNode, CheckBoxGroupColorType::UN_SELECTED_COLOR, nullptr); } } diff --git a/frameworks/core/interfaces/native/node/node_checkbox_modifier.cpp b/frameworks/core/interfaces/native/node/node_checkbox_modifier.cpp index 60de47d6493..8697fff0d38 100644 --- a/frameworks/core/interfaces/native/node/node_checkbox_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_checkbox_modifier.cpp @@ -197,8 +197,7 @@ void ResetSelectedColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); CheckBoxModelNG::ResetSelectedColor(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - CheckBoxModelNG::CreateWithResourceObj(frameNode, CheckBoxColorType::SELECTED_COLOR, resObj); + CheckBoxModelNG::CreateWithResourceObj(frameNode, CheckBoxColorType::SELECTED_COLOR, nullptr); } } @@ -208,8 +207,7 @@ void ResetUnSelectedColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); CheckBoxModelNG::ResetUnSelectedColor(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - CheckBoxModelNG::CreateWithResourceObj(frameNode, CheckBoxColorType::UN_SELECTED_COLOR, resObj); + CheckBoxModelNG::CreateWithResourceObj(frameNode, CheckBoxColorType::UN_SELECTED_COLOR, nullptr); } } diff --git a/frameworks/core/interfaces/native/node/node_slider_modifier.cpp b/frameworks/core/interfaces/native/node/node_slider_modifier.cpp index 378efb55d4a..bd6d172e22d 100644 --- a/frameworks/core/interfaces/native/node/node_slider_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_slider_modifier.cpp @@ -68,16 +68,20 @@ void SetShowTips(ArkUINodeHandle node, ArkUI_Bool isShow, const char *value) SliderModelNG::SetShowTips(frameNode, static_cast(isShow), content); } -void SetShowTipsPtr(ArkUINodeHandle node, ArkUI_Bool isShow, const char *value, void* strRawPtr) +void SetShowTipsPtr(ArkUINodeHandle node, ArkUI_Bool isShow, const char* value, void* strRawPtr) { CHECK_NULL_VOID(node); SetShowTips(node, isShow, value); if (SystemProperties::ConfigChangePerform()) { - auto *frameNode = reinterpret_cast(node); + auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* str = reinterpret_cast(strRawPtr); - auto strResObj = AceType::Claim(str); - SliderModelNG::CreateWithStringResourceObj(frameNode, strResObj, static_cast(isShow)); + if (strRawPtr) { + auto* str = reinterpret_cast(strRawPtr); + auto strResObj = AceType::Claim(str); + SliderModelNG::CreateWithStringResourceObj(frameNode, strResObj, static_cast(isShow)); + } else { + SliderModelNG::CreateWithStringResourceObj(frameNode, nullptr, static_cast(isShow)); + } } } @@ -88,8 +92,7 @@ void ResetShowTips(ArkUINodeHandle node) std::optional content; SliderModelNG::SetShowTips(frameNode, DEFAULT_SHOW_TIPS, content); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SliderModelNG::CreateWithStringResourceObj(frameNode, resObj, false); + SliderModelNG::CreateWithStringResourceObj(frameNode, nullptr, false); } } @@ -169,11 +172,15 @@ void SetStepColorPtr(ArkUINodeHandle node, uint32_t color, void* colorRawPtr) CHECK_NULL_VOID(node); SetStepColor(node, color); if (SystemProperties::ConfigChangePerform()) { - auto *frameNode = reinterpret_cast(node); + auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* color = reinterpret_cast(colorRawPtr); - auto colorResObj = AceType::Claim(color); - SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::STEP_COLOR); + if (colorRawPtr) { + auto* color = reinterpret_cast(colorRawPtr); + auto colorResObj = AceType::Claim(color); + SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::STEP_COLOR); + } else { + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::STEP_COLOR); + } } } @@ -183,8 +190,7 @@ void ResetStepColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); SliderModelNG::ResetStepColor(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SliderModelNG::CreateWithColorResourceObj(frameNode, resObj, SliderColorType::STEP_COLOR); + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::STEP_COLOR); } } @@ -200,11 +206,15 @@ void SetBlockBorderColorPtr(ArkUINodeHandle node, uint32_t color, void* colorRaw CHECK_NULL_VOID(node); SetBlockBorderColor(node, color); if (SystemProperties::ConfigChangePerform()) { - auto *frameNode = reinterpret_cast(node); + auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* color = reinterpret_cast(colorRawPtr); - auto colorResObj = AceType::Claim(color); - SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::BLOCK_BORDER_COLOR); + if (colorRawPtr) { + auto* color = reinterpret_cast(colorRawPtr); + auto colorResObj = AceType::Claim(color); + SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::BLOCK_BORDER_COLOR); + } else { + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::BLOCK_BORDER_COLOR); + } } } @@ -214,8 +224,7 @@ void ResetBlockBorderColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); SliderModelNG::ResetBlockBorderColor(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SliderModelNG::CreateWithColorResourceObj(frameNode, resObj, SliderColorType::BLOCK_BORDER_COLOR); + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::BLOCK_BORDER_COLOR); } } @@ -247,11 +256,15 @@ void SetBlockColorPtr(ArkUINodeHandle node, uint32_t color, void* colorRawPtr) CHECK_NULL_VOID(node); SetBlockColor(node, color); if (SystemProperties::ConfigChangePerform()) { - auto *frameNode = reinterpret_cast(node); + auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* color = reinterpret_cast(colorRawPtr); - auto colorResObj = AceType::Claim(color); - SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::BLOCK_COLOR); + if (colorRawPtr) { + auto* color = reinterpret_cast(colorRawPtr); + auto colorResObj = AceType::Claim(color); + SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::BLOCK_COLOR); + } else { + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::BLOCK_COLOR); + } } } @@ -261,8 +274,7 @@ void ResetBlockColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); SliderModelNG::ResetBlockColor(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SliderModelNG::CreateWithColorResourceObj(frameNode, resObj, SliderColorType::BLOCK_COLOR); + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::BLOCK_COLOR); } } @@ -278,11 +290,15 @@ void SetTrackBackgroundColorPtr(ArkUINodeHandle node, uint32_t color, void* colo CHECK_NULL_VOID(node); SetTrackBackgroundColor(node, color); if (SystemProperties::ConfigChangePerform()) { - auto *frameNode = reinterpret_cast(node); + auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* color = reinterpret_cast(colorRawPtr); - auto colorResObj = AceType::Claim(color); - SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::TRACK_COLOR); + if (colorRawPtr) { + auto* color = reinterpret_cast(colorRawPtr); + auto colorResObj = AceType::Claim(color); + SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::TRACK_COLOR); + } else { + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::TRACK_COLOR); + } } } @@ -309,8 +325,7 @@ void ResetTrackBackgroundColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); SliderModelNG::ResetTrackColor(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SliderModelNG::CreateWithColorResourceObj(frameNode, resObj, SliderColorType::TRACK_COLOR); + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::TRACK_COLOR); } } @@ -326,11 +341,15 @@ void SetSelectColorPtr(ArkUINodeHandle node, uint32_t color, void* colorRawPtr) CHECK_NULL_VOID(node); SetSelectColor(node, color); if (SystemProperties::ConfigChangePerform()) { - auto *frameNode = reinterpret_cast(node); + auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* color = reinterpret_cast(colorRawPtr); - auto colorResObj = AceType::Claim(color); - SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::SELECT_COLOR); + if (colorRawPtr) { + auto* color = reinterpret_cast(colorRawPtr); + auto colorResObj = AceType::Claim(color); + SliderModelNG::CreateWithColorResourceObj(frameNode, colorResObj, SliderColorType::SELECT_COLOR); + } else { + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::SELECT_COLOR); + } } } @@ -356,8 +375,7 @@ void ResetSelectColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); SliderModelNG::ResetSelectColor(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SliderModelNG::CreateWithColorResourceObj(frameNode, resObj, SliderColorType::SELECT_COLOR); + SliderModelNG::CreateWithColorResourceObj(frameNode, nullptr, SliderColorType::SELECT_COLOR); } } diff --git a/frameworks/core/interfaces/native/node/node_toggle_modifier.cpp b/frameworks/core/interfaces/native/node/node_toggle_modifier.cpp index 64c7c8723ab..5305a38ef00 100644 --- a/frameworks/core/interfaces/native/node/node_toggle_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_toggle_modifier.cpp @@ -82,8 +82,7 @@ void ResetToggleSelectedColor(ArkUINodeHandle node) std::optional selectedColor; ToggleModelNG::SetSelectedColor(frameNode, selectedColor); if (SystemProperties::ConfigChangePerform()) { - auto colorResObj = AceType::MakeRefPtr(); - ToggleModelNG::CreateWithResourceObj(frameNode, ToggleColorType::SELECTED_COLOR, colorResObj); + ToggleModelNG::CreateWithResourceObj(frameNode, ToggleColorType::SELECTED_COLOR, nullptr); } } @@ -92,6 +91,7 @@ void SetToggleSwitchPointColor(ArkUINodeHandle node, ArkUI_Uint32 switchPointCol auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); ToggleModelNG::SetSwitchPointColor(frameNode, Color(switchPointColor)); + ToggleModelNG::SetSwitchPointColorSetByUser(frameNode, true); } void SetToggleSwitchPointColorPtr(ArkUINodeHandle node, ArkUI_Uint32 switchPointColor, void* colorRawPtr) @@ -121,9 +121,9 @@ void ResetToggleSwitchPointColor(ArkUINodeHandle node) color = theme->GetPointColor(); } ToggleModelNG::SetSwitchPointColor(frameNode, Color(color)); + ToggleModelNG::SetSwitchPointColorSetByUser(frameNode, false); if (SystemProperties::ConfigChangePerform()) { - auto colorResObj = AceType::MakeRefPtr(); - ToggleModelNG::CreateWithResourceObj(frameNode, ToggleColorType::SWITCH_POINT_COLOR, colorResObj); + ToggleModelNG::CreateWithResourceObj(frameNode, ToggleColorType::SWITCH_POINT_COLOR, nullptr); } } @@ -307,14 +307,14 @@ void SetTogglePointRadius(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 ToggleModelNG::SetPointRadius(frameNode, switchPointRadius); } -void SetTogglePointRadiusPtr(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* radiuRawPtr) +void SetTogglePointRadiusPtr(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* radiusRawPtr) { CHECK_NULL_VOID(node); SetTogglePointRadius(node, value, unit); if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* pointRadius = reinterpret_cast(radiuRawPtr); + auto* pointRadius = reinterpret_cast(radiusRawPtr); auto resObj = AceType::Claim(pointRadius); ToggleModelNG::CreateWithResourceObj(frameNode, ToggleDimensionType::POINT_RADIUS, resObj); } @@ -326,8 +326,7 @@ void ResetTogglePointRadius(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); ToggleModelNG::ResetPointRadius(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - ToggleModelNG::CreateWithResourceObj(frameNode, ToggleDimensionType::POINT_RADIUS, resObj); + ToggleModelNG::CreateWithResourceObj(frameNode, ToggleDimensionType::POINT_RADIUS, nullptr); } } @@ -336,6 +335,7 @@ void SetToggleUnselectedColor(ArkUINodeHandle node, ArkUI_Uint32 unselectedColor auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); ToggleModelNG::SetUnselectedColor(frameNode, Color(unselectedColor)); + ToggleModelNG::SetUnselectedColorSetByUser(frameNode, true); } void SetToggleUnselectedColorPtr(ArkUINodeHandle node, ArkUI_Uint32 unselectedColor, void* colorRawPtr) @@ -366,9 +366,9 @@ void ResetToggleUnselectedColor(ArkUINodeHandle node) unselectedColor = switchTheme->GetInactiveColor(); } ToggleModelNG::SetUnselectedColor(frameNode, unselectedColor); + ToggleModelNG::SetUnselectedColorSetByUser(frameNode, false); if (SystemProperties::ConfigChangePerform()) { - auto colorResObj = AceType::MakeRefPtr(); - ToggleModelNG::CreateWithResourceObj(frameNode, ToggleColorType::UN_SELECTED_COLOR, colorResObj); + ToggleModelNG::CreateWithResourceObj(frameNode, ToggleColorType::UN_SELECTED_COLOR, nullptr); } } @@ -381,14 +381,14 @@ void SetToggleTrackBorderRadius(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI ToggleModelNG::SetTrackBorderRadius(frameNode, borderRadius); } -void SetToggleTrackBorderRadiusPtr(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* radiuRawPtr) +void SetToggleTrackBorderRadiusPtr(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* radiusRawPtr) { CHECK_NULL_VOID(node); SetToggleTrackBorderRadius(node, value, unit); if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* trackBorderRadius = reinterpret_cast(radiuRawPtr); + auto* trackBorderRadius = reinterpret_cast(radiusRawPtr); auto resObj = AceType::Claim(trackBorderRadius); ToggleModelNG::CreateWithResourceObj(frameNode, ToggleDimensionType::TRACK_BORDER_RADIUS, resObj); } @@ -400,8 +400,7 @@ void ResetToggleTrackBorderRadius(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); ToggleModelNG::ResetTrackBorderRadius(frameNode); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - ToggleModelNG::CreateWithResourceObj(frameNode, ToggleDimensionType::TRACK_BORDER_RADIUS, resObj); + ToggleModelNG::CreateWithResourceObj(frameNode, ToggleDimensionType::TRACK_BORDER_RADIUS, nullptr); } } diff --git a/frameworks/core/interfaces/native/node/radio_modifier.cpp b/frameworks/core/interfaces/native/node/radio_modifier.cpp index 885b9692b04..34f1bfdeeb8 100644 --- a/frameworks/core/interfaces/native/node/radio_modifier.cpp +++ b/frameworks/core/interfaces/native/node/radio_modifier.cpp @@ -39,6 +39,16 @@ void ResetRadioChecked(ArkUINodeHandle node) RadioModelNG::SetChecked(frameNode, DEFAULT_CHECKED); } +void SetRadioColorSetByUser(ArkUINodeHandle node, ArkUI_Bool isCheckedBackgroundColorSetByUser, + ArkUI_Bool isUncheckedBorderColorSetByUser, ArkUI_Bool isIndicatorColorSetByUser) +{ + auto* frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); + RadioModelNG::SetCheckedBackgroundColorSetByUser(frameNode, isCheckedBackgroundColorSetByUser); + RadioModelNG::SetUncheckedBorderColorSetByUser(frameNode, isUncheckedBorderColorSetByUser); + RadioModelNG::SetIndicatorColorSetByUser(frameNode, isIndicatorColorSetByUser); +} + void SetRadioStyle(ArkUINodeHandle node, ArkUI_Uint32 checkedBackgroundColor, ArkUI_Uint32 uncheckedBorderColor, ArkUI_Uint32 indicatorColor) { @@ -48,9 +58,6 @@ void SetRadioStyle(ArkUINodeHandle node, ArkUI_Uint32 checkedBackgroundColor, Ar RadioModelNG::SetCheckedBackgroundColor(frameNode, Color(checkedBackgroundColor)); RadioModelNG::SetUncheckedBorderColor(frameNode, Color(uncheckedBorderColor)); RadioModelNG::SetIndicatorColor(frameNode, Color(indicatorColor)); - RadioModelNG::SetCheckedBackgroundColorSetByUser(frameNode, true); - RadioModelNG::SetUncheckedBorderColorSetByUser(frameNode, true); - RadioModelNG::SetIndicatorColorSetByUser(frameNode, true); } void SetRadioStylePtr(ArkUINodeHandle node, ArkUI_Uint32 checkedBackgroundColor, ArkUI_Uint32 uncheckedBorderColor, @@ -100,10 +107,9 @@ void ResetRadioStyle(ArkUINodeHandle node) RadioModelNG::SetUncheckedBorderColorSetByUser(frameNode, false); RadioModelNG::SetIndicatorColorSetByUser(frameNode, false); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - RadioModelNG::CreateWithColorResourceObj(frameNode, resObj, RadioColorType::CHECKED_BACKGROUND_COLOR); - RadioModelNG::CreateWithColorResourceObj(frameNode, resObj, RadioColorType::UNCHECKED_BORDER_COLOR); - RadioModelNG::CreateWithColorResourceObj(frameNode, resObj, RadioColorType::INDICATOR_COLOR); + RadioModelNG::CreateWithColorResourceObj(frameNode, nullptr, RadioColorType::CHECKED_BACKGROUND_COLOR); + RadioModelNG::CreateWithColorResourceObj(frameNode, nullptr, RadioColorType::UNCHECKED_BORDER_COLOR); + RadioModelNG::CreateWithColorResourceObj(frameNode, nullptr, RadioColorType::INDICATOR_COLOR); } } @@ -423,6 +429,7 @@ const ArkUIRadioModifier* GetRadioModifier() static const ArkUIRadioModifier modifier = { .setRadioChecked = SetRadioChecked, .resetRadioChecked = ResetRadioChecked, + .setRadioColorSetByUser = SetRadioColorSetByUser, .setRadioStyle = SetRadioStyle, .setRadioStylePtr = SetRadioStylePtr, .resetRadioStyle = ResetRadioStyle, diff --git a/frameworks/core/interfaces/native/node/select_modifier.cpp b/frameworks/core/interfaces/native/node/select_modifier.cpp index db8eb5ff6fb..8d2ea4a6b14 100644 --- a/frameworks/core/interfaces/native/node/select_modifier.cpp +++ b/frameworks/core/interfaces/native/node/select_modifier.cpp @@ -55,9 +55,13 @@ void SetValuePtr(ArkUINodeHandle node, ArkUI_CharPtr value, void* valueRawPtr) if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* selectobj = reinterpret_cast(valueRawPtr); - auto valueResObj = AceType::Claim(selectobj); - SelectModelNG::CreateWithStringResourceObj(frameNode, valueResObj); + if (valueRawPtr) { + auto* selectobj = reinterpret_cast(valueRawPtr); + auto valueResObj = AceType::Claim(selectobj); + SelectModelNG::CreateWithStringResourceObj(frameNode, valueResObj); + } else { + SelectModelNG::CreateWithStringResourceObj(frameNode, nullptr); + } } } @@ -78,9 +82,13 @@ void SetSelectedPtr(ArkUINodeHandle node, ArkUI_Int32 idx, void* selectedRawPtr) if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* selectobj = reinterpret_cast(selectedRawPtr); - auto selectedResObj = AceType::Claim(selectobj); - SelectModelNG::CreateWithIntegerResourceObj(frameNode, selectedResObj); + if (selectedRawPtr) { + auto* selectobj = reinterpret_cast(selectedRawPtr); + auto selectedResObj = AceType::Claim(selectobj); + SelectModelNG::CreateWithIntegerResourceObj(frameNode, selectedResObj); + } else { + SelectModelNG::CreateWithIntegerResourceObj(frameNode, nullptr); + } } } @@ -98,10 +106,14 @@ void SetSelectFontColorPtr(ArkUINodeHandle node, ArkUI_Uint32 color, void* fontC if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* fontColor = reinterpret_cast(fontColorRawPtr); - auto fontColorResObj = AceType::Claim(fontColor); - SelectModelNG::CreateWithColorResourceObj( - frameNode, fontColorResObj, SelectColorType::FONT_COLOR); + SelectModelNG::SetFontColorByUser(frameNode, true); + if (fontColorRawPtr) { + auto* fontColor = reinterpret_cast(fontColorRawPtr); + auto fontColorResObj = AceType::Claim(fontColor); + SelectModelNG::CreateWithColorResourceObj(frameNode, fontColorResObj, SelectColorType::FONT_COLOR); + } else { + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::FONT_COLOR); + } } } @@ -119,9 +131,14 @@ void SetSelectedOptionBgColorPtr(ArkUINodeHandle node, ArkUI_Uint32 color, void* if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* bgColor = reinterpret_cast(optionBgColorRawPtr); - auto bgColorResObj = AceType::Claim(bgColor); - SelectModelNG::CreateWithColorResourceObj(frameNode, bgColorResObj, SelectColorType::SELECTED_OPTION_BG_COLOR); + if (optionBgColorRawPtr) { + auto* bgColor = reinterpret_cast(optionBgColorRawPtr); + auto bgColorResObj = AceType::Claim(bgColor); + SelectModelNG::CreateWithColorResourceObj( + frameNode, bgColorResObj, SelectColorType::SELECTED_OPTION_BG_COLOR); + } else { + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::SELECTED_OPTION_BG_COLOR); + } } } @@ -139,9 +156,13 @@ void SetOptionBgColorPtr(ArkUINodeHandle node, ArkUI_Uint32 color, void* optionB if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* bgColor = reinterpret_cast(optionBgColorRawPtr); - auto bgColorResObj = AceType::Claim(bgColor); - SelectModelNG::CreateWithColorResourceObj(frameNode, bgColorResObj, SelectColorType::OPTION_BG_COLOR); + if (optionBgColorRawPtr) { + auto* bgColor = reinterpret_cast(optionBgColorRawPtr); + auto bgColorResObj = AceType::Claim(bgColor); + SelectModelNG::CreateWithColorResourceObj(frameNode, bgColorResObj, SelectColorType::OPTION_BG_COLOR); + } else { + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::OPTION_BG_COLOR); + } } } @@ -159,9 +180,14 @@ void SetOptionFontColorPtr(ArkUINodeHandle node, ArkUI_Uint32 color, void* fontC if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* fontColor = reinterpret_cast(fontColorRawPtr); - auto fontColorResObj = AceType::Claim(fontColor); - SelectModelNG::CreateWithColorResourceObj(frameNode, fontColorResObj, SelectColorType::OPTION_FONT_COLOR); + SelectModelNG::SetOptionFontColorByUser(frameNode, true); + if (fontColorRawPtr) { + auto* fontColor = reinterpret_cast(fontColorRawPtr); + auto fontColorResObj = AceType::Claim(fontColor); + SelectModelNG::CreateWithColorResourceObj(frameNode, fontColorResObj, SelectColorType::OPTION_FONT_COLOR); + } else { + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::OPTION_FONT_COLOR); + } } } @@ -179,10 +205,14 @@ void SetSelectedOptionFontColorPtr(ArkUINodeHandle node, ArkUI_Uint32 color, voi if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* fontColor = reinterpret_cast(fontColorRawPtr); - auto fontColorResObj = AceType::Claim(fontColor); - SelectModelNG::CreateWithColorResourceObj( - frameNode, fontColorResObj, SelectColorType::SELECTED_OPTION_FONT_COLOR); + if (fontColorRawPtr) { + auto* fontColor = reinterpret_cast(fontColorRawPtr); + auto fontColorResObj = AceType::Claim(fontColor); + SelectModelNG::CreateWithColorResourceObj( + frameNode, fontColorResObj, SelectColorType::SELECTED_OPTION_FONT_COLOR); + } else { + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::SELECTED_OPTION_FONT_COLOR); + } } } @@ -345,8 +375,7 @@ void ResetValue(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); SelectModelNG::SetValue(frameNode, ""); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithStringResourceObj(frameNode, resObj); + SelectModelNG::CreateWithStringResourceObj(frameNode, nullptr); } } @@ -356,8 +385,7 @@ void ResetSelected(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); SelectModelNG::SetSelected(frameNode, DEFAULT_SELECT); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithIntegerResourceObj(frameNode, resObj); + SelectModelNG::CreateWithIntegerResourceObj(frameNode, nullptr); } } @@ -369,8 +397,8 @@ void ResetSelectFontColor(ArkUINodeHandle node) CHECK_NULL_VOID(selectTheme); SelectModelNG::SetFontColor(frameNode, selectTheme->GetFontColor()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithColorResourceObj(frameNode, resObj, SelectColorType::FONT_COLOR); + SelectModelNG::SetFontColorByUser(frameNode, false); + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::FONT_COLOR); } } @@ -382,8 +410,7 @@ void ResetSelectedOptionBgColor(ArkUINodeHandle node) CHECK_NULL_VOID(selectTheme); SelectModelNG::SetSelectedOptionBgColor(frameNode, selectTheme->GetSelectedColor()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithColorResourceObj(frameNode, resObj, SelectColorType::SELECTED_OPTION_BG_COLOR); + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::SELECTED_OPTION_BG_COLOR); } } @@ -393,10 +420,9 @@ void ResetOptionBgColor(ArkUINodeHandle node) CHECK_NULL_VOID(frameNode); auto selectTheme = GetTheme(); CHECK_NULL_VOID(selectTheme); - SelectModelNG::SetOptionBgColor(frameNode, selectTheme->GetBackgroundColor(), false); + SelectModelNG::SetOptionBgColor(frameNode, selectTheme->GetBackgroundColor()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithColorResourceObj(frameNode, resObj, SelectColorType::OPTION_BG_COLOR); + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::OPTION_BG_COLOR); } } @@ -408,8 +434,8 @@ void ResetOptionFontColor(ArkUINodeHandle node) CHECK_NULL_VOID(selectTheme); SelectModelNG::SetOptionFontColor(frameNode, selectTheme->GetMenuFontColor()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithColorResourceObj(frameNode, resObj, SelectColorType::OPTION_FONT_COLOR); + SelectModelNG::SetOptionFontColorByUser(frameNode, false); + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::OPTION_FONT_COLOR); } } @@ -421,8 +447,7 @@ void ResetSelectedOptionFontColor(ArkUINodeHandle node) CHECK_NULL_VOID(selectTheme); SelectModelNG::SetSelectedOptionFontColor(frameNode, selectTheme->GetSelectedColorText()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithColorResourceObj(frameNode, resObj, SelectColorType::SELECTED_OPTION_FONT_COLOR); + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::SELECTED_OPTION_FONT_COLOR); } } @@ -643,13 +668,18 @@ void SetMenuBgColorPtr(ArkUINodeHandle node, ArkUI_Uint32 color, void* menuBgCol { CHECK_NULL_VOID(node); SetMenuBgColor(node, color); - if (SystemProperties::ConfigChangePerform() && menuBgColorRawPtr) { + if (SystemProperties::ConfigChangePerform()) { auto* frameNode = reinterpret_cast(node); CHECK_NULL_VOID(frameNode); - auto* menuBgColor = reinterpret_cast(menuBgColorRawPtr); - auto menuBgColorResObj = AceType::Claim(menuBgColor); - SelectModelNG::CreateWithColorResourceObj(frameNode, menuBgColorResObj, - SelectColorType::MENU_BACKGROUND_COLOR); + SelectModelNG::SetMenuBackgroundColorByUser(frameNode, false); + if (menuBgColorRawPtr) { + auto* menuBgColor = reinterpret_cast(menuBgColorRawPtr); + auto menuBgColorResObj = AceType::Claim(menuBgColor); + SelectModelNG::CreateWithColorResourceObj( + frameNode, menuBgColorResObj, SelectColorType::MENU_BACKGROUND_COLOR); + } else { + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::MENU_BACKGROUND_COLOR); + } } } @@ -661,8 +691,8 @@ void ResetMenuBgColor(ArkUINodeHandle node) CHECK_NULL_VOID(selectTheme); SelectModelNG::SetMenuBackgroundColor(frameNode, selectTheme->GetBackgroundColor()); if (SystemProperties::ConfigChangePerform()) { - auto resObj = AceType::MakeRefPtr(); - SelectModelNG::CreateWithColorResourceObj(frameNode, resObj, SelectColorType::MENU_BACKGROUND_COLOR); + SelectModelNG::SetMenuBackgroundColorByUser(frameNode, false); + SelectModelNG::CreateWithColorResourceObj(frameNode, nullptr, SelectColorType::MENU_BACKGROUND_COLOR); } } diff --git a/test/unittest/core/pattern/button/toggle_button_test_ng.cpp b/test/unittest/core/pattern/button/toggle_button_test_ng.cpp index 612bb861615..772c6a72bfd 100644 --- a/test/unittest/core/pattern/button/toggle_button_test_ng.cpp +++ b/test/unittest/core/pattern/button/toggle_button_test_ng.cpp @@ -38,6 +38,7 @@ #include "core/event/touch_event.h" #include "core/pipeline/base/element_register.h" #include "core/pipeline_ng/ui_task_scheduler.h" +#include "test/mock/base/mock_system_properties.h" using namespace testing; using namespace testing::ext; @@ -889,4 +890,86 @@ HWTEST_F(ToggleButtonTestNg, ToggleButtonPatternTest019, TestSize.Level1) togglePattern->frameNode_ = std::move(buttonFrameNode); togglePattern->OnAfterModifyDone(); } + +/** + * @tc.name: UpdateComponentColor + * @tc.desc: test ToggleButtonPattern::UpdateComponentColor. + * @tc.type: FUNC + */ +HWTEST_F(ToggleButtonTestNg, UpdateComponentColor, TestSize.Level1) +{ + /** + * @tc.steps: step1. create bubble and get frameNode. + */ + TestProperty testProperty; + testProperty.isOn = std::make_optional(IS_ON); + RefPtr frameNode = CreateToggleButtonFrameNode(testProperty); + ASSERT_NE(frameNode, nullptr); + auto togglePattern = AceType::DynamicCast(frameNode->GetPattern()); + ASSERT_NE(togglePattern, nullptr); + auto pipelineContext = frameNode->GetContext(); + ASSERT_NE(pipelineContext, nullptr); + auto paintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + + /** + * @tc.steps: step2. pattern UpdateComponentColor. + * @tc.expected: step2. check whether the function is executed successfully. + */ + std::vector> vec { { true, true }, { true, false }, { false, true }, { false, false } }; + for (const auto& pair : vec) { + pipelineContext->SetIsSystemColorChange(pair.first); + frameNode->SetRerenderable(pair.second); + togglePattern->UpdateComponentColor(Color::RED, ToggleColorType::SWITCH_POINT_COLOR); + togglePattern->UpdateComponentColor(Color::RED, ToggleColorType::UN_SELECTED_COLOR); + if (pipelineContext->IsSystmColorChange() && pair.second) { + auto ret = paintProperty->GetSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::BLACK); + togglePattern->UpdateComponentColor(Color::RED, ToggleColorType::SELECTED_COLOR); + ret = paintProperty->GetSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + } + } +} + +/** + * @tc.name: OnColorConfigurationUpdate + * @tc.desc: test ToggleButtonPattern::OnColorConfigurationUpdate. + * @tc.type: FUNC + */ +HWTEST_F(ToggleButtonTestNg, OnColorConfigurationUpdate, TestSize.Level1) +{ + /** + * @tc.steps: step1. create bubble and get frameNode. + */ + TestProperty testProperty; + testProperty.isOn = std::make_optional(IS_ON); + RefPtr frameNode = CreateToggleButtonFrameNode(testProperty); + ASSERT_NE(frameNode, nullptr); + auto togglePattern = AceType::DynamicCast(frameNode->GetPattern()); + ASSERT_NE(togglePattern, nullptr); + auto pipeline = frameNode->GetContext(); + ASSERT_NE(pipeline, nullptr); + auto theme = pipeline->GetTheme(); + ASSERT_NE(theme, nullptr); + auto pops = frameNode->GetPaintProperty(); + ASSERT_NE(pops, nullptr); + + /** + * @tc.steps: step2. pattern OnColorConfigurationUpdate. + * @tc.expected: step2. check whether the function is executed successfully. + */ + Color color = theme->GetCheckedColor(); + std::vector> vec { { true, false }, { true, true }, { false, true }, { false, false } }; + for (const auto& pair : vec) { + g_isConfigChangePerform = pair.first; + pops->UpdateSelectedColorSetByUser(pair.second); + togglePattern->OnColorConfigurationUpdate(); + if (pair.first && !pair.second) { + auto ret = pops->GetSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), color); + } + } + g_isConfigChangePerform = false; +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/checkbox/checkbox_test_ng.cpp b/test/unittest/core/pattern/checkbox/checkbox_test_ng.cpp index d82c730e4a5..769578b8a2c 100644 --- a/test/unittest/core/pattern/checkbox/checkbox_test_ng.cpp +++ b/test/unittest/core/pattern/checkbox/checkbox_test_ng.cpp @@ -3003,4 +3003,145 @@ HWTEST_F(CheckBoxTestNG, CheckBoxPaintMethodTest0135, TestSize.Level1) checkBoxPaintMethod.checkboxModifier_->PaintCheckBox(canvas, CONTENT_OFFSET, CONTENT_SIZE); MockContainer::TearDown(); } + +/** + * @tc.name: CreateWithColorResourceObj + * @tc.desc: Test CheckBox CreateWithColorResourceObj. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxTestNG, CreateWithColorResourceObj, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create CheckBox frame node. + * @tc.expected: step1. Frame node is not null. + */ + CheckBoxModelNG checkBoxModelNG; + checkBoxModelNG.Create(NAME, GROUP_NAME, TAG); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + + /** + * @tc.steps: step2. Create color resource object and verify resource manager. + * @tc.expected: step2. Resource is added to manager. + */ + auto resObj = AceType::MakeRefPtr("", "", -1); + checkBoxModelNG.CreateWithColorResourceObj(resObj, CheckBoxColorType::SELECTED_COLOR); + + std::string key = "checkbox" + CheckBoxModelNG::ColorTypeToString(CheckBoxColorType::SELECTED_COLOR); + auto resMgr = pattern->resourceMgr_; + ASSERT_NE(resMgr, nullptr); + auto count = resMgr->resMap_.count(key); + EXPECT_EQ(count, 1); + pattern->OnColorModeChange(1); + + /** + * @tc.steps: step3. Create another color resource object with parameters. + * @tc.expected: step3. Resource is added to manager. + */ + ResourceObjectParams params { .value = "", .type = ResourceObjectParamType::NONE }; + RefPtr resObjWithParams = + AceType::MakeRefPtr(1, 10001, std::vector { params }, "", "", 100000); + checkBoxModelNG.CreateWithColorResourceObj(resObjWithParams, CheckBoxColorType::UN_SELECTED_COLOR); + key = "checkbox" + CheckBoxModelNG::ColorTypeToString(CheckBoxColorType::UN_SELECTED_COLOR); + count = resMgr->resMap_.count(key); + EXPECT_EQ(count, 1); + pattern->OnColorModeChange(1); +} + +/** + * @tc.name: ColorTypeToString + * @tc.desc: test ColorTypeToString. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxTestNG, ColorTypeToString, TestSize.Level1) +{ + /** + * @tc.steps: step1. Test color type to string conversion. + * @tc.expected: step1. Conversion returns correct string values. + */ + std::vector> types = { + { CheckBoxColorType::SELECTED_COLOR, "SelectedColor" }, + { CheckBoxColorType::UN_SELECTED_COLOR, "UnSelectedColor" }, + { static_cast(2), "Unknown" } }; + for (const auto& [type, val] : types) { + auto ret = CheckBoxModelNG::ColorTypeToString(type); + EXPECT_EQ(val, ret); + } +} + +/** + * @tc.name: UpdateComponentColor + * @tc.desc: Test CheckBox UpdateComponentColor. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxTestNG, UpdateComponentColor, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create CheckBox frame node and get necessary properties. + * @tc.expected: step1. Frame node and properties are not null. + */ + CheckBoxModelNG checkBoxModelNG; + checkBoxModelNG.Create(NAME, GROUP_NAME, TAG); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + auto paintProperty = pattern->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + + /** + * @tc.steps: step2. Update component color with different types. + * @tc.expected: step2. Color properties are updated correctly. + */ + checkBoxModelNG.UpdateComponentColor(frameNode, static_cast(2), Color::RED); + auto ret = paintProperty->GetCheckBoxSelectedColor(); + EXPECT_FALSE(ret.has_value()); + checkBoxModelNG.UpdateComponentColor(frameNode, CheckBoxColorType::SELECTED_COLOR, Color::RED); + ret = paintProperty->GetCheckBoxSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + checkBoxModelNG.UpdateComponentColor(frameNode, CheckBoxColorType::UN_SELECTED_COLOR, Color::RED); + ret = paintProperty->GetCheckBoxUnSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); +} + +/** + * @tc.name: ResetComponentColor + * @tc.desc: Test CheckBox ResetComponentColor. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxTestNG, ResetComponentColor, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create CheckBox frame node and get necessary properties. + * @tc.expected: step1. Frame node and properties are not null. + */ + CheckBoxModelNG checkBoxModelNG; + checkBoxModelNG.Create(NAME, GROUP_NAME, TAG); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + auto paintProperty = pattern->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto pipelineContext = frameNode->GetContext(); + ASSERT_NE(pipelineContext, nullptr); + auto theme = pipelineContext->GetTheme(); + ASSERT_NE(theme, nullptr); + + /** + * @tc.steps: step2. Reset component color with different types. + * @tc.expected: step2. Color properties are reset to theme values. + */ + checkBoxModelNG.ResetComponentColor(frameNode, static_cast(2)); + auto ret = paintProperty->GetCheckBoxSelectedColor(); + EXPECT_FALSE(ret.has_value()); + checkBoxModelNG.ResetComponentColor(frameNode, CheckBoxColorType::SELECTED_COLOR); + ret = paintProperty->GetCheckBoxSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), theme->GetActiveColor()); + checkBoxModelNG.ResetComponentColor(frameNode, CheckBoxColorType::UN_SELECTED_COLOR); + ret = paintProperty->GetCheckBoxUnSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), theme->GetInactiveColor()); +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/checkboxgroup/checkboxgroup_test_ng.cpp b/test/unittest/core/pattern/checkboxgroup/checkboxgroup_test_ng.cpp index cf09afe6674..30e5e43e8fa 100644 --- a/test/unittest/core/pattern/checkboxgroup/checkboxgroup_test_ng.cpp +++ b/test/unittest/core/pattern/checkboxgroup/checkboxgroup_test_ng.cpp @@ -49,6 +49,7 @@ #include "core/pipeline_ng/pipeline_context.h" #include "test/mock/core/pipeline/mock_pipeline_context.h" #include "test/mock/core/common/mock_container.h" +#include "test/mock/base/mock_system_properties.h" using namespace testing; using namespace testing::ext; @@ -2202,4 +2203,145 @@ HWTEST_F(CheckBoxGroupTestNG, CheckBoxGroupEventTest003, TestSize.Level1) eventHub->UpdateChangeEvent(&groupResult); EXPECT_EQ(isSelected, true); } + +/** + * @tc.name: ColorTypeToString + * @tc.desc: test ColorTypeToString. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxGroupTestNG, ColorTypeToString, TestSize.Level1) +{ + /** + * @tc.steps: step1. Test color type to string conversion. + * @tc.expected: step1. Conversion returns correct string values. + */ + std::vector> types = { + { CheckBoxGroupColorType::SELECTED_COLOR, "SelectedColor" }, + { CheckBoxGroupColorType::UN_SELECTED_COLOR, "UnSelectedColor" }, + { static_cast(2), "Unknown" } }; + for (const auto& [type, val] : types) { + auto ret = CheckBoxGroupModelNG::ColorTypeToString(type); + EXPECT_EQ(val, ret); + } +} + +/** + * @tc.name: CreateWithColorResourceObj + * @tc.desc: Test CreateWithColorResourceObj. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxGroupTestNG, CreateWithColorResourceObj, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create CheckBoxGroup frame node. + * @tc.expected: step1. Frame node is not null. + */ + CheckBoxGroupModelNG checkBoxGroupModelNG; + checkBoxGroupModelNG.Create(GROUP_NAME); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + + /** + * @tc.steps: step2. Create color resource object and verify resource manager. + * @tc.expected: step2. Resource is added to manager. + */ + auto resObj = AceType::MakeRefPtr("", "", -1); + checkBoxGroupModelNG.CreateWithColorResourceObj(resObj, CheckBoxGroupColorType::SELECTED_COLOR); + + std::string key = "checkboxgroup" + CheckBoxGroupModelNG::ColorTypeToString(CheckBoxGroupColorType::SELECTED_COLOR); + auto resMgr = pattern->resourceMgr_; + ASSERT_NE(resMgr, nullptr); + auto count = resMgr->resMap_.count(key); + EXPECT_EQ(count, 1); + pattern->OnColorModeChange(1); + + /** + * @tc.steps: step3. Create another color resource object with parameters. + * @tc.expected: step3. Resource is added to manager. + */ + ResourceObjectParams params { .value = "", .type = ResourceObjectParamType::NONE }; + RefPtr resObjWithParams = + AceType::MakeRefPtr(1, 10001, std::vector { params }, "", "", 100000); + checkBoxGroupModelNG.CreateWithColorResourceObj(resObjWithParams, CheckBoxGroupColorType::UN_SELECTED_COLOR); + key = "checkboxgroup" + CheckBoxGroupModelNG::ColorTypeToString(CheckBoxGroupColorType::UN_SELECTED_COLOR); + count = resMgr->resMap_.count(key); + EXPECT_EQ(count, 1); + pattern->OnColorModeChange(1); +} + +/** + * @tc.name: UpdateComponentColor + * @tc.desc: Test UpdateComponentColor. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxGroupTestNG, UpdateComponentColor, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create CheckBoxGroup frame node and get necessary properties. + * @tc.expected: step1. Frame node and properties are not null. + */ + CheckBoxGroupModelNG checkBoxGroupModelNG; + checkBoxGroupModelNG.Create(GROUP_NAME); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + auto paintProperty = pattern->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + + /** + * @tc.steps: step2. Update component color with different types. + * @tc.expected: step2. Color properties are updated correctly. + */ + checkBoxGroupModelNG.UpdateComponentColor(frameNode, static_cast(2), Color::RED); + auto ret = paintProperty->GetCheckBoxGroupSelectedColor(); + EXPECT_FALSE(ret.has_value()); + checkBoxGroupModelNG.UpdateComponentColor(frameNode, CheckBoxGroupColorType::SELECTED_COLOR, Color::RED); + ret = paintProperty->GetCheckBoxGroupSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + checkBoxGroupModelNG.UpdateComponentColor(frameNode, CheckBoxGroupColorType::UN_SELECTED_COLOR, Color::RED); + ret = paintProperty->GetCheckBoxGroupUnSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); +} + +/** + * @tc.name: ResetComponentColor + * @tc.desc: Test ResetComponentColor. + * @tc.type: FUNC + */ +HWTEST_F(CheckBoxGroupTestNG, ResetComponentColor, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create CheckBoxGroup frame node and get necessary properties. + * @tc.expected: step1. Frame node and properties are not null. + */ + CheckBoxGroupModelNG checkBoxGroupModelNG; + checkBoxGroupModelNG.Create(GROUP_NAME); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + auto paintProperty = pattern->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto pipelineContext = frameNode->GetContext(); + ASSERT_NE(pipelineContext, nullptr); + auto theme = pipelineContext->GetTheme(); + ASSERT_NE(theme, nullptr); + + /** + * @tc.steps: step2. Reset component color with different types. + * @tc.expected: step2. Color properties are reset to theme values. + */ + checkBoxGroupModelNG.ResetComponentColor(frameNode, static_cast(2)); + auto ret = paintProperty->GetCheckBoxGroupSelectedColor(); + EXPECT_FALSE(ret.has_value()); + checkBoxGroupModelNG.ResetComponentColor(frameNode, CheckBoxGroupColorType::SELECTED_COLOR); + ret = paintProperty->GetCheckBoxGroupSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), theme->GetActiveColor()); + checkBoxGroupModelNG.ResetComponentColor(frameNode, CheckBoxGroupColorType::UN_SELECTED_COLOR); + ret = paintProperty->GetCheckBoxGroupUnSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), theme->GetInactiveColor()); +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/menu/menu_pattern_test_ng.cpp b/test/unittest/core/pattern/menu/menu_pattern_test_ng.cpp index 693149d075d..5c2caa27c58 100644 --- a/test/unittest/core/pattern/menu/menu_pattern_test_ng.cpp +++ b/test/unittest/core/pattern/menu/menu_pattern_test_ng.cpp @@ -1312,6 +1312,8 @@ HWTEST_F(MenuPatternTestNg, MenuPatternTestNg078, TestSize.Level1) ASSERT_EQ(menuPattern->GetOptions().size(), 4); menuPattern->OnColorConfigurationUpdate(); EXPECT_EQ(menuNode->needCallChildrenUpdate_, false); + menuPattern->isDisableMenuBgColorByUser_ = true; + menuPattern->OnColorConfigurationUpdate(); } /** @@ -1804,4 +1806,95 @@ HWTEST_F(MenuPatternTestNg, RegisterAccessibilityChildActionNotify001, TestSize. auto reuslt = callback(menuItemNode, NotifyChildActionType::ACTION_CLICK); EXPECT_EQ(reuslt, AccessibilityActionResult::ACTION_RISE); } + +/** + * @tc.name: UpdateSelectOptionTextByIndex + * @tc.desc: Test UpdateSelectOptionTextByIndex function. + * @tc.type: FUNC + */ +HWTEST_F(MenuPatternTestNg, UpdateSelectOptionTextByIndex, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create parent and child frame nodes. + * @tc.expected: step1. Parent and child nodes are not null. + */ + auto parent = FrameNode::CreateFrameNode( + V2::MENU_ITEM_GROUP_ETS_TAG, 1, AceType::MakeRefPtr(1, V2::JS_IF_ELSE_ETS_TAG, MenuType::MENU)); + ASSERT_NE(parent, nullptr); + auto child = FrameNode::CreateFrameNode(V2::MENU_ITEM_ETS_TAG, 2, AceType::MakeRefPtr()); + ASSERT_NE(child, nullptr); + auto parentPattern = parent->GetPattern(); + ASSERT_NE(parentPattern, nullptr); + auto childPattern = child->GetPattern(); + ASSERT_NE(childPattern, nullptr); + + /** + * @tc.steps: step2. Test UpdateSelectOptionTextByIndex with non-select menu. + * @tc.expected: step2. No changes should occur. + */ + parentPattern->isSelectMenu_ = false; + std::string text = "Text"; + parentPattern->UpdateSelectOptionTextByIndex(2, text); + + /** + * @tc.steps: step3. Test UpdateSelectOptionTextByIndex with select menu. + * @tc.expected: step3. Text should be updated correctly. + */ + parentPattern->isSelectMenu_ = true; + parentPattern->AddOptionNode(child); + auto textNode = FrameNode::CreateFrameNode(V2::TEXT_ETS_TAG, 3, AceType::MakeRefPtr()); + ASSERT_NE(textNode, nullptr); + childPattern->SetTextNode(textNode); + auto textProp = textNode->GetLayoutProperty(); + ASSERT_NE(textProp, nullptr); + parentPattern->UpdateSelectOptionTextByIndex(2, text); + auto content = textProp->GetContent(); + EXPECT_FALSE(content.has_value()); + parentPattern->UpdateSelectOptionTextByIndex(0, text); + auto ret = childPattern->GetText(); + EXPECT_EQ(text, ret); +} + +/** + * @tc.name: UpdateSelectOptionIconByIndex + * @tc.desc: Test UpdateSelectOptionIconByIndex function. + * @tc.type: FUNC + */ +HWTEST_F(MenuPatternTestNg, UpdateSelectOptionIconByIndex, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create parent and child frame nodes. + * @tc.expected: step1. Parent and child nodes are not null. + */ + auto parent = FrameNode::CreateFrameNode( + V2::MENU_ITEM_GROUP_ETS_TAG, 1, AceType::MakeRefPtr(1, V2::JS_IF_ELSE_ETS_TAG, MenuType::MENU)); + ASSERT_NE(parent, nullptr); + auto child = FrameNode::CreateFrameNode(V2::MENU_ITEM_ETS_TAG, 2, AceType::MakeRefPtr()); + ASSERT_NE(child, nullptr); + auto parentPattern = parent->GetPattern(); + ASSERT_NE(parentPattern, nullptr); + auto childPattern = child->GetPattern(); + ASSERT_NE(childPattern, nullptr); + + /** + * @tc.steps: step2. Test UpdateSelectOptionIconByIndex with non-select menu. + * @tc.expected: step2. No changes should occur. + */ + parentPattern->isSelectMenu_ = false; + std::string icon = "TestChildIcon"; + parentPattern->UpdateSelectOptionIconByIndex(0, icon); + + /** + * @tc.steps: step3. Test UpdateSelectOptionIconByIndex with select menu. + * @tc.expected: step3. Icon should be updated correctly. + */ + parentPattern->isSelectMenu_ = true; + parentPattern->AddOptionNode(child); + parentPattern->UpdateSelectOptionIconByIndex(2, icon); + auto ret = childPattern->GetIcon(); + EXPECT_NE(icon, ret); + parentPattern->UpdateSelectOptionIconByIndex(0, icon); + ret = childPattern->GetIcon(); + EXPECT_EQ(icon, ret); +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/radio/radio_pattern_test_ng.cpp b/test/unittest/core/pattern/radio/radio_pattern_test_ng.cpp index a48c4fd7190..19ee6191471 100644 --- a/test/unittest/core/pattern/radio/radio_pattern_test_ng.cpp +++ b/test/unittest/core/pattern/radio/radio_pattern_test_ng.cpp @@ -17,6 +17,7 @@ #define private public #define protected public +#include "test/mock/base/mock_system_properties.h" #include "test/mock/core/common/mock_container.h" #include "test/mock/core/common/mock_theme_manager.h" #include "test/mock/core/pipeline/mock_pipeline_context.h" @@ -1903,4 +1904,121 @@ HWTEST_F(RadioPatternTestNg, InitDefaultMarginTest001, TestSize.Level1) pattern->InitDefaultMargin(); EXPECT_NE(layoutProperty->GetMarginProperty(), nullptr); } + +/** + * @tc.name: UpdateRadioComponentColor + * @tc.desc: Test UpdateRadioComponentColor for all RadioColorType. + * @tc.type: FUNC + */ +HWTEST_F(RadioPatternTestNg, UpdateRadioComponentColor, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create radio frame node and initialize components. + * @tc.expected: step1. Frame node and pattern are created successfully. + */ + RadioModelNG radioModelNG; + radioModelNG.Create(NAME, GROUP_NAME, INDICATOR_TYPE_TICK); + auto frameNode = AceType::DynamicCast(ViewStackProcessor::GetInstance()->Finish()); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + frameNode->MarkModifyDone(); + + auto paintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + + /** + * @tc.steps: step2. Update checked background color and verify. + * @tc.expected: step2. Checked background color is updated to RED. + */ + pattern->UpdateRadioComponentColor(Color::RED, RadioColorType::CHECKED_BACKGROUND_COLOR); + auto color1 = paintProperty->GetRadioCheckedBackgroundColor(); + ASSERT_TRUE(color1.has_value()); + EXPECT_EQ(color1.value(), Color::RED); + + /** + * @tc.steps: step3. Update unchecked border color and verify. + * @tc.expected: step3. Unchecked border color is updated to BLUE. + */ + pattern->UpdateRadioComponentColor(Color::BLUE, RadioColorType::UNCHECKED_BORDER_COLOR); + auto color2 = paintProperty->GetRadioUncheckedBorderColor(); + ASSERT_TRUE(color2.has_value()); + EXPECT_EQ(color2.value(), Color::BLUE); + + /** + * @tc.steps: step4. Update indicator color and verify. + * @tc.expected: step4. Indicator color is updated to GREEN. + */ + pattern->UpdateRadioComponentColor(Color::GREEN, RadioColorType::INDICATOR_COLOR); + auto color3 = paintProperty->GetRadioIndicatorColor(); + ASSERT_TRUE(color3.has_value()); + EXPECT_EQ(color3.value(), Color::GREEN); + + EXPECT_EQ(pattern->preTypeIsBuilder_, false); +} + +/** + * @tc.name: OnColorConfigurationUpdate + * @tc.desc: Test OnColorConfigurationUpdate updates paint properties correctly when user has not set colors. + * @tc.type: FUNC + */ +HWTEST_F(RadioPatternTestNg, OnColorConfigurationUpdate, TestSize.Level1) +{ + /** + * @tc.steps: step1. Set API version and create radio frame node. + * @tc.expected: step1. API version is set and frame node is created. + */ + int32_t settingApiVersion = 12; + MockContainer::Current()->SetApiTargetVersion(settingApiVersion); + + RadioModelNG radioModelNG; + radioModelNG.Create(NAME, GROUP_NAME, INDICATOR_TYPE_TICK); + auto frameNode = AceType::DynamicCast(ViewStackProcessor::GetInstance()->Finish()); + ASSERT_NE(frameNode, nullptr); + + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + auto paintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto pipeline = PipelineBase::GetCurrentContext(); + ASSERT_NE(pipeline, nullptr); + auto radioTheme = pipeline->GetTheme(); + ASSERT_NE(radioTheme, nullptr); + pattern->OnColorConfigurationUpdate(); + + /** + * @tc.steps: step2. Set theme colors and update with user color flags. + * @tc.expected: step2. Checked background color is updated to theme's active color (BLACK). + */ + g_isConfigChangePerform = true; + radioTheme->activeColor_ = Color::BLACK; + radioTheme->inactiveColor_ = Color::BLACK; + radioTheme->pointColor_ = Color::BLACK; + paintProperty->UpdateRadioCheckedBackgroundColorSetByUser(false); + paintProperty->UpdateRadioUncheckedBorderColorSetByUser(true); + paintProperty->UpdateRadioIndicatorColorSetByUser(true); + pattern->OnColorConfigurationUpdate(); + EXPECT_EQ(paintProperty->GetRadioCheckedBackgroundColorValue(), Color::BLACK); + + /** + * @tc.steps: step3. Reverse user color flags and verify unchecked border color. + * @tc.expected: step3. Unchecked border color is updated to theme's inactive color (BLACK). + */ + paintProperty->UpdateRadioCheckedBackgroundColorSetByUser(true); + paintProperty->UpdateRadioUncheckedBorderColorSetByUser(false); + paintProperty->UpdateRadioIndicatorColorSetByUser(true); + pattern->OnColorConfigurationUpdate(); + EXPECT_EQ(paintProperty->GetRadioUncheckedBorderColorValue(), Color::BLACK); + + /** + * @tc.steps: step4. Reverse user color flags again and verify indicator color. + * @tc.expected: step4. Indicator color is updated to theme's point color (BLACK). + */ + paintProperty->UpdateRadioCheckedBackgroundColorSetByUser(true); + paintProperty->UpdateRadioUncheckedBorderColorSetByUser(true); + paintProperty->UpdateRadioIndicatorColorSetByUser(false); + pattern->OnColorConfigurationUpdate(); + EXPECT_EQ(paintProperty->GetRadioIndicatorColorValue(), Color::BLACK); + g_isConfigChangePerform = false; +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/radio/radio_test_ng.cpp b/test/unittest/core/pattern/radio/radio_test_ng.cpp index d51d9547cf2..271e15fa40f 100644 --- a/test/unittest/core/pattern/radio/radio_test_ng.cpp +++ b/test/unittest/core/pattern/radio/radio_test_ng.cpp @@ -21,6 +21,7 @@ #include "test/mock/core/common/mock_theme_manager.h" #include "test/mock/core/pipeline/mock_pipeline_context.h" #include "test/mock/core/rosen/mock_canvas.h" +#include "ui/resource/resource_info.h" #include "core/components/checkable/checkable_theme.h" #include "core/components_ng/base/frame_node.h" @@ -2364,4 +2365,162 @@ HWTEST_F(RadioTestNg, RadioPatternTest052, TestSize.Level1) EXPECT_FALSE(radioPaintProperty->GetRadioCheckValue()); MockContainer::TearDown(); } + +/** + * @tc.name: RadioCreateResetSetByUserTest001 + * @tc.desc: Test RadioModelNG::Create resets *_SetByUser flags in RadioPaintProperty. + * @tc.type: FUNC + */ +HWTEST_F(RadioTestNg, RadioCreateResetSetByUserTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create a radio button and retrieve its paint property. + * @tc.expected: step1. Frame node and paint property are created successfully. + */ + RadioModelNG radioModelNG; + radioModelNG.Create(NAME, GROUP_NAME, INDICATOR_TYPE_TICK); + auto frameNode = AceType::DynamicCast(ViewStackProcessor::GetInstance()->Finish()); + ASSERT_NE(frameNode, nullptr); + + auto radioPaintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(radioPaintProperty, nullptr); + + /** + * @tc.steps: step2. Set all *_SetByUser flags to true. + * @tc.expected: step2. Flags are successfully set to true. + */ + radioPaintProperty->UpdateRadioCheckedBackgroundColorSetByUser(true); + radioPaintProperty->UpdateRadioUncheckedBorderColorSetByUser(true); + radioPaintProperty->UpdateRadioIndicatorColorSetByUser(true); + + /** + * @tc.steps: step3. Create another radio button and check its paint property. + * @tc.expected: step3. All *_SetByUser flags are reset to false by Create(). + */ + ViewStackProcessor::GetInstance()->Push(frameNode); + radioModelNG.Create(NAME1, GROUP_NAME1, INDICATOR_TYPE_TICK); + auto frameNode2 = AceType::DynamicCast(ViewStackProcessor::GetInstance()->Finish()); + ASSERT_NE(frameNode2, nullptr); + + auto radioPaintProperty2 = frameNode2->GetPaintProperty(); + ASSERT_NE(radioPaintProperty2, nullptr); + + EXPECT_FALSE(radioPaintProperty2->HasRadioCheckedBackgroundColorSetByUser()); + EXPECT_FALSE(radioPaintProperty2->HasRadioUncheckedBorderColorSetByUser()); + EXPECT_FALSE(radioPaintProperty2->HasRadioIndicatorColorSetByUser()); +} + +/** + * @tc.name: CreateWithColorResourceObj001 + * @tc.desc: Test RadioModelNG CreateWithColorResourceObj with different resource objects. + * @tc.type: FUNC + */ +HWTEST_F(RadioTestNg, CreateWithColorResourceObj001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create a radio button and retrieve its pattern. + * @tc.expected: step1. Frame node and pattern are created successfully. + */ + RadioModelNG radioModelNG; + radioModelNG.Create(NAME, GROUP_NAME, INDICATOR_TYPE_TICK); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + + /** + * @tc.steps: step2. Set checked background color with null resource object. + * @tc.expected: step2. Color value is not set (nullopt). + */ + radioModelNG.CreateWithColorResourceObj(nullptr, RadioColorType::CHECKED_BACKGROUND_COLOR); + + auto paintProperty = pattern->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto colorRet = paintProperty->GetRadioCheckedBackgroundColor(); + EXPECT_FALSE(colorRet.has_value()); + + /** + * @tc.steps: step3. Create valid color resource object and set checked background color. + * @tc.expected: step3. Color value is set to red (#FFFF0000). + */ + ResourceObjectParams param; + param.type = ResourceObjectParamType::STRING; + param.value = "#FFFF0000"; + int32_t resourceType = static_cast(Kit::ResourceType::COLOR); + auto resObj = AceType::MakeRefPtr( + 1001, resourceType, std::vector { param }, "testBundle", "testModule", 0); + + radioModelNG.CreateWithColorResourceObj(resObj, RadioColorType::CHECKED_BACKGROUND_COLOR); + + colorRet = paintProperty->GetRadioCheckedBackgroundColor(); + EXPECT_TRUE(colorRet.has_value()); + + /** + * @tc.steps: step4. Add resource to cache and reload resources. + * @tc.expected: step4. Resource manager reloads without errors. + */ + std::string key = "radio" + RadioModelNG::ColorTypeToString(RadioColorType::CHECKED_BACKGROUND_COLOR); + pattern->AddResCache(key, param.value.value()); + auto resMgr = pattern->resourceMgr_; + ASSERT_NE(resMgr, nullptr); + resMgr->ReloadResources(); +} + +/** + * @tc.name: CreateWithColorResourceObj002 + * @tc.desc: Test RadioModelNG CreateWithColorResourceObj when resource object is not provided. + * @tc.type: FUNC + */ +HWTEST_F(RadioTestNg, CreateWithColorResourceObj002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create a radio button and retrieve its pattern. + * @tc.expected: step1. Frame node and pattern are created successfully. + */ + RadioModelNG radioModelNG; + radioModelNG.Create(NAME, GROUP_NAME, INDICATOR_TYPE_TICK); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + + /** + * @tc.steps: step2. Set indicator color with null resource object. + * @tc.expected: step2. Indicator color value is not set (nullopt). + */ + radioModelNG.CreateWithColorResourceObj(nullptr, RadioColorType::INDICATOR_COLOR); + + auto paintProperty = pattern->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto colorRet = paintProperty->GetRadioIndicatorColor(); + EXPECT_FALSE(colorRet.has_value()); +} + +/** + * @tc.name: ColorTypeToString + * @tc.desc: Test RadioModelNG ColorTypeToString function. + * @tc.type: FUNC + */ +HWTEST_F(RadioTestNg, ColorTypeToString, TestSize.Level1) +{ + /** + * @tc.steps: step1. Define test cases for all RadioColorType values and an unknown value. + * @tc.expected: step1. Test cases cover all possible enum values and edge case. + */ + std::vector> types = { + { RadioColorType::CHECKED_BACKGROUND_COLOR, "CheckedBackgroundColor" }, + { RadioColorType::UNCHECKED_BORDER_COLOR, "UncheckedBorderColor" }, + { RadioColorType::INDICATOR_COLOR, "IndicatorColor" }, + { static_cast(999), "Unknown" } + }; + + /** + * @tc.steps: step2. Iterate through test cases and verify string conversion. + * @tc.expected: step2. All enum values are converted to their correct string representations. + */ + for (const auto& [type, expected] : types) { + auto result = RadioModelNG::ColorTypeToString(type); + EXPECT_EQ(result, expected); + } +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/slider/slider_pattern_test_ng.cpp b/test/unittest/core/pattern/slider/slider_pattern_test_ng.cpp index ce18ed11fc1..8cda99fa5e3 100644 --- a/test/unittest/core/pattern/slider/slider_pattern_test_ng.cpp +++ b/test/unittest/core/pattern/slider/slider_pattern_test_ng.cpp @@ -19,6 +19,7 @@ #define private public #define protected public +#include "test/mock/base/mock_system_properties.h" #include "test/mock/base/mock_task_executor.h" #include "test/mock/core/render/mock_paragraph.h" #include "test/mock/core/common/mock_container.h" @@ -2398,4 +2399,154 @@ HWTEST_F(SliderPatternTestNg, SliderPatternTest035, TestSize.Level1) */ EXPECT_NO_FATAL_FAILURE(sliderPattern->UpdateEndsIsShowStepsPosition(testPosition, block, endsSize, 0, side)); } + +/** + * @tc.name: OnColorConfigurationUpdate001 + * @tc.desc: test OnColorConfigurationUpdate. + * @tc.type: FUNC + */ +HWTEST_F(SliderPatternTestNg, OnColorConfigurationUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create slider frame node and initialize components. + * @tc.expected: step1. Frame node and related components are created successfully. + */ + SliderModelNG sliderModelNG; + sliderModelNG.Create(VALUE, STEP, MIN, MAX); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pipelineContext = frameNode->GetContext(); + ASSERT_NE(pipelineContext, nullptr); + auto paintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + auto sliderTheme = pipelineContext->GetTheme(); + ASSERT_NE(sliderTheme, nullptr); + + /** + * @tc.steps: step2. Set all theme colors to RED and trigger color configuration update. + * @tc.expected: step2. Theme colors are updated to RED. + */ + sliderTheme->blockColor_ = Color::RED; + sliderTheme->trackBgColor_ = Color::RED; + sliderTheme->trackSelectedColor_ = Color::RED; + pattern->OnColorConfigurationUpdate(); + + /** + * @tc.steps: step3. Simulate system color change and set user color flags. + * @tc.expected: step3. Block color is updated to theme color (RED) due to user flag. + */ + g_isConfigChangePerform = true; + paintProperty->UpdateBlockColorSetByUser(false); + paintProperty->UpdateTrackBackgroundColorSetByUser(true); + paintProperty->UpdateSelectColorSetByUser(true); + pattern->OnColorConfigurationUpdate(); + auto ret = paintProperty->GetBlockColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + + /** + * @tc.steps: step4. Reverse user color flags and trigger update again. + * @tc.expected: step4. Track background is set to resource color and select color is RED. + */ + paintProperty->UpdateBlockColorSetByUser(true); + paintProperty->UpdateTrackBackgroundColorSetByUser(false); + paintProperty->UpdateSelectColorSetByUser(false); + pattern->OnColorConfigurationUpdate(); + + EXPECT_TRUE(paintProperty->GetTrackBackgroundIsResourceColor()); + EXPECT_EQ(paintProperty->GetSelectColor(), Color::RED); + g_isConfigChangePerform = false; +} + +/** + * @tc.name: UpdateSliderComponentColor001 + * @tc.desc: test UpdateSliderComponentColor. + * @tc.type: FUNC + */ +HWTEST_F(SliderPatternTestNg, UpdateSliderComponentColor001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create slider frame node and initialize components. + * @tc.expected: step1. Frame node and related components are created successfully. + */ + SliderModelNG sliderModelNG; + sliderModelNG.Create(VALUE, STEP, MIN, MAX); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pipelineContext = frameNode->GetContext(); + ASSERT_NE(pipelineContext, nullptr); + auto paintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + + /** + * @tc.steps: step2. Test UpdateSliderComponentColor under different system color change and rerenderable states. + * @tc.expected: step2. All slider component colors are updated to RED when system color changes and node is + * rerenderable. + */ + std::vector> vec { { true, true }, { true, false }, { false, true }, { false, false } }; + for (const auto& pair : vec) { + pipelineContext->SetIsSystemColorChange(pair.first); + frameNode->SetRerenderable(pair.second); + if (pipelineContext->IsSystmColorChange() && pair.second) { + Gradient gradientRes; + gradientRes.AddColor(GradientColor(Color::RED)); + pattern->UpdateSliderComponentColor(Color::RED, SliderColorType::BLOCK_COLOR, gradientRes); + auto ret = paintProperty->GetBlockColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + pattern->UpdateSliderComponentColor(Color::RED, SliderColorType::SELECT_COLOR, gradientRes); + ret = paintProperty->GetSelectColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + pattern->UpdateSliderComponentColor(Color::RED, SliderColorType::BLOCK_BORDER_COLOR, gradientRes); + ret = paintProperty->GetBlockBorderColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + pattern->UpdateSliderComponentColor(Color::RED, SliderColorType::STEP_COLOR, gradientRes); + ret = paintProperty->GetStepColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + pattern->UpdateSliderComponentColor(Color::RED, SliderColorType::TRACK_COLOR, gradientRes); + auto gradientRet = paintProperty->GetTrackBackgroundColor(); + EXPECT_EQ(gradientRet, gradientRes); + } + } +} + +/** + * @tc.name: UpdateSliderComponentString001 + * @tc.desc: test UpdateSliderComponentString. + * @tc.type: FUNC + */ +HWTEST_F(SliderPatternTestNg, UpdateSliderComponentString001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create slider frame node and initialize components. + * @tc.expected: step1. Frame node and related components are created successfully. + */ + SliderModelNG sliderModelNG; + sliderModelNG.Create(VALUE, STEP, MIN, MAX); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto pipelineContext = frameNode->GetContext(); + ASSERT_NE(pipelineContext, nullptr); + auto paintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + + /** + * @tc.steps: step2. Test UpdateSliderComponentString under different system color change and rerenderable states. + * @tc.expected: step2. Slider shows tips when system color changes and node is rerenderable. + */ + std::vector> vec { { true, true }, { true, false }, { false, true }, { false, false } }; + for (const auto& pair : vec) { + pipelineContext->SetIsSystemColorChange(pair.first); + frameNode->SetRerenderable(pair.second); + if (pipelineContext->IsSystmColorChange() && pair.second) { + pattern->UpdateSliderComponentMedia(); + pattern->UpdateSliderComponentString(true, "test"); + EXPECT_TRUE(paintProperty->GetShowTips()); + } + } +} } // namespace OHOS::Ace::NG diff --git a/test/unittest/core/pattern/toggle/toggle_switch_test_ng.cpp b/test/unittest/core/pattern/toggle/toggle_switch_test_ng.cpp index 4db39bf308b..64b9b8beb17 100644 --- a/test/unittest/core/pattern/toggle/toggle_switch_test_ng.cpp +++ b/test/unittest/core/pattern/toggle/toggle_switch_test_ng.cpp @@ -16,6 +16,7 @@ #include "gtest/gtest.h" #define protected public #define private public +#include "test/mock/base/mock_system_properties.h" #include "test/mock/core/common/mock_container.h" #include "test/mock/core/common/mock_theme_manager.h" #include "test/mock/core/pipeline/mock_pipeline_context.h" @@ -27,6 +28,7 @@ #include "core/components/toggle/toggle_theme.h" #include "core/components_ng/base/view_stack_processor.h" #include "core/components_ng/pattern/toggle/switch_event_hub.h" +#include "core/components_ng/pattern/toggle/switch_modifier.h" #include "core/components_ng/pattern/toggle/switch_paint_method.h" #include "core/components_ng/pattern/toggle/switch_paint_property.h" #include "core/components_ng/pattern/toggle/switch_pattern.h" @@ -1679,4 +1681,72 @@ HWTEST_F(ToggleSwitchTestNg, ToggleSwitchPatternTest013, TestSize.Level1) paintProperty->UpdateSwitchPointColor(Color::BLUE); EXPECT_FALSE(switchPattern.OnThemeScopeUpdate(THEME_SCOPEID)); } + +/** + * @tc.name: OnColorConfigurationUpdate001 + * @tc.desc: test OnColorConfigurationUpdate. + * @tc.type: FUNC + */ +HWTEST_F(ToggleSwitchTestNg, OnColorConfigurationUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Initialize toggle model and validate dependencies. + * @tc.expected: step1. Frame node, paint property, pipeline context, pattern, and theme are created and valid. + */ + ToggleModelNG toggleModelNG; + toggleModelNG.Create(ToggleType::SWITCH, true); + auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode(); + ASSERT_NE(frameNode, nullptr); + auto paintProperty = frameNode->GetPaintProperty(); + ASSERT_NE(paintProperty, nullptr); + auto pipelineContext = PipelineBase::GetCurrentContextSafely(); + ASSERT_NE(pipelineContext, nullptr); + auto pattern = frameNode->GetPattern(); + ASSERT_NE(pattern, nullptr); + auto switchTheme = pipelineContext->GetTheme(); + ASSERT_NE(switchTheme, nullptr); + + /** + * @tc.steps: step2. Configure theme colors and initialize paint method and modifier. + * @tc.expected: step2. Theme colors are set to RED, paint method and modifier are created. + */ + switchTheme->activeColor_ = Color::RED; + switchTheme->pointColor_ = Color::RED; + switchTheme->inactiveColor_ = Color::RED; + pattern->paintMethod_ = AceType::MakeRefPtr(); + ASSERT_NE(pattern->paintMethod_, nullptr); + OptionalSize size(1.0f, 2.0f); + pattern->paintMethod_->switchModifier_ = + AceType::MakeRefPtr(SizeF(), OffsetF(), 0.0, false, Color::RED, Color::RED, 0.0f); + + /** + * @tc.steps: step3. First call to OnColorConfigurationUpdate with default state. + * @tc.expected: step3. No user-set colors, all properties should update to theme defaults. + */ + pattern->OnColorConfigurationUpdate(); + + /** + * @tc.steps: step4. Simulate config change and set user preferences. + * @tc.expected: step4. Selected color updates to theme's RED when not set by user. + */ + g_isConfigChangePerform = true; + paintProperty->UpdateSelectedColorSetByUser(false); + paintProperty->UpdateSwitchPointColorSetByUser(true); + paintProperty->UpdateUnselectedColorSetByUser(true); + pattern->OnColorConfigurationUpdate(); + auto ret = paintProperty->GetSelectedColor(); + EXPECT_EQ(ret.value_or(Color::BLACK), Color::RED); + + /** + * @tc.steps: step5. Reverse user preferences and re-run update. + * @tc.expected: step5. Switch point and unselected colors update to theme's RED when not set by user. + */ + paintProperty->UpdateSelectedColorSetByUser(true); + paintProperty->UpdateSwitchPointColorSetByUser(false); + paintProperty->UpdateUnselectedColorSetByUser(false); + pattern->OnColorConfigurationUpdate(); + EXPECT_EQ(paintProperty->GetSwitchPointColor(), Color::RED); + EXPECT_EQ(paintProperty->GetUnselectedColor(), Color::RED); + g_isConfigChangePerform = false; +} } // namespace OHOS::Ace::NG -- Gitee