From 8ebba7e42f9699f6f5f03592947f91e8e27d2cfc Mon Sep 17 00:00:00 2001 From: zhanghang Date: Mon, 26 May 2025 19:10:13 +0800 Subject: [PATCH 1/2] add badge resource fun Signed-off-by: zhanghang --- .../declarative_frontend/jsview/js_badge.cpp | 27 ++++- .../components_ng/pattern/badge/badge_data.h | 9 ++ .../pattern/badge/badge_layout_property.h | 10 ++ .../pattern/badge/badge_model_ng.cpp | 113 ++++++++---------- .../pattern/badge/badge_model_ng.h | 1 + .../pattern/badge/badge_pattern.cpp | 34 ++++++ .../pattern/badge/badge_pattern.h | 1 + 7 files changed, 129 insertions(+), 66 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp b/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp index 601e199f382..7841351458b 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp @@ -109,6 +109,8 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) bool yState = ParseJsDimensionVp(yVal, dimenY, resObjY); badgeParameters.resourceBadgePositionXObject = resObjX; badgeParameters.resourceBadgePositionYObject = resObjY; + badgeParameters.badgePositionXByUser = true; + badgeParameters.badgePositionYByUser = true; bool hasX = resObjX || xState; bool hasY = resObjY || yState; if (!(hasX || hasY)) { @@ -116,6 +118,8 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) badgeParameters.badgePositionY = badgeTheme->GetBadgePositionY(); badgeParameters.resourceBadgePositionXObject = nullptr; badgeParameters.resourceBadgePositionYObject = nullptr; + badgeParameters.badgePositionXByUser = false; + badgeParameters.badgePositionYByUser = false; } } else { bool xResult = ParseJsDimensionVp(xVal, dimenX); @@ -147,6 +151,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) Color colorVal; if (SystemProperties::ConfigChangePerform()) { RefPtr resObj; + badgeParameters.badgeTextColorByUser = true; bool state = ParseJsColor(colorValue, colorVal, resObj); if (resObj) { badgeParameters.resourceColorObject = resObj; @@ -154,6 +159,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) badgeParameters.badgeTextColor = colorVal; } else if (themeColors) { badgeParameters.badgeTextColor = themeColors->FontOnPrimary(); + badgeParameters.badgeTextColorByUser = false; } } else { if (ParseJsColor(colorValue, colorVal)) { @@ -166,6 +172,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) CalcDimension fontSize; if (SystemProperties::ConfigChangePerform()) { RefPtr resObj; + badgeParameters.badgeFontSizeByUser = true; bool state = ParseJsDimensionNG(fontSizeValue, fontSize, DimensionUnit::FP, resObj); if (resObj) { badgeParameters.resourceFontSizeObject = resObj; @@ -173,6 +180,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) badgeParameters.badgeFontSize = fontSize; isDefaultFontSize = false; } else { + badgeParameters.badgeFontSizeByUser = false; badgeParameters.badgeFontSize = !fontSizeValue->IsUndefined() ? badgeTheme->GetBadgeFontSize() : UNDEFINED_DIMENSION; } @@ -191,6 +199,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) CalcDimension badgeSize; if (SystemProperties::ConfigChangePerform()) { RefPtr resObj; + badgeParameters.badgeCircleSizeByUser = true; bool state = ParseJsDimensionNG(badgeSizeValue, badgeSize, DimensionUnit::FP, resObj); if (resObj) { badgeParameters.resourceBadgeSizeObject = resObj; @@ -199,10 +208,11 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) isDefaultBadgeSize = false; } else { badgeParameters.badgeCircleSize = badgeTheme->GetBadgeCircleSize(); + badgeParameters.badgeCircleSizeByUser = false; } } else { - if (ParseJsDimensionNG(badgeSizeValue, badgeSize, DimensionUnit::FP) && - badgeSize.IsNonNegative() && badgeSize.Unit() != DimensionUnit::PERCENT) { + if (ParseJsDimensionNG(badgeSizeValue, badgeSize, DimensionUnit::FP) && badgeSize.IsNonNegative() && + badgeSize.Unit() != DimensionUnit::PERCENT) { badgeParameters.badgeCircleSize = badgeSize; isDefaultBadgeSize = false; } else { @@ -214,6 +224,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) Color color; if (SystemProperties::ConfigChangePerform()) { RefPtr badgeColorResObj; + badgeParameters.badgeColorByUser = true; bool state = ParseJsColor(badgeColorValue, color, badgeColorResObj); if (badgeColorResObj) { badgeParameters.resourceBadgeColorObject = badgeColorResObj; @@ -221,6 +232,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) badgeParameters.badgeColor = color; } else if (themeColors) { badgeParameters.badgeColor = themeColors->Warning(); + badgeParameters.badgeColorByUser = false; } } else { if (ParseJsColor(badgeColorValue, color)) { @@ -233,14 +245,15 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) if (SystemProperties::ConfigChangePerform()) { RefPtr resObj; + badgeParameters.badgeBorderWidthByUser = true; bool state = ParseJsDimensionVp(borderWidthValue, borderWidth, resObj); if (resObj) { badgeParameters.resourceBorderWidthObject = resObj; + } else if (state && borderWidth.IsNonNegative() && borderWidth.Unit() != DimensionUnit::PERCENT) { + badgeParameters.badgeBorderWidth = borderWidth; } else { - badgeParameters.badgeBorderWidth = - (state && borderWidth.IsNonNegative() && borderWidth.Unit() != DimensionUnit::PERCENT) - ? borderWidth - : badgeTheme->GetBadgeBorderWidth(); + badgeParameters.badgeBorderWidth = badgeTheme->GetBadgeBorderWidth(); + badgeParameters.badgeBorderWidthByUser = false; } } else { if (ParseJsDimensionVp(borderWidthValue, borderWidth) && borderWidth.IsNonNegative() && @@ -253,6 +266,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) Color borderColor; if (SystemProperties::ConfigChangePerform()) { RefPtr borderColorResObj; + badgeParameters.badgeBorderColorByUser = true; bool state = ParseJsColor(borderColorValue, borderColor, borderColorResObj); if (borderColorResObj) { badgeParameters.resourceBorderColorObject = borderColorResObj; @@ -261,6 +275,7 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) } else { badgeParameters.badgeBorderColor = themeColors ? themeColors->Warning() : badgeTheme->GetBadgeBorderColor(); + badgeParameters.badgeBorderColorByUser = false; } } else { if (ParseJsColor(borderColorValue, borderColor)) { diff --git a/frameworks/core/components_ng/pattern/badge/badge_data.h b/frameworks/core/components_ng/pattern/badge/badge_data.h index 76bba15669a..e4e33eb1836 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_data.h +++ b/frameworks/core/components_ng/pattern/badge/badge_data.h @@ -53,6 +53,15 @@ struct BadgeParameters { RefPtr resourceBadgePositionXObject; RefPtr resourceBadgePositionYObject; RefPtr resourceBorderWidthObject; + + bool badgePositionXByUser = false; + bool badgePositionYByUser = false; + bool badgeTextColorByUser = false; + bool badgeFontSizeByUser = false; + bool badgeCircleSizeByUser = false; + bool badgeColorByUser = false; + bool badgeBorderWidthByUser = false; + bool badgeBorderColorByUser = false; }; } // namespace OHOS::Ace diff --git a/frameworks/core/components_ng/pattern/badge/badge_layout_property.h b/frameworks/core/components_ng/pattern/badge/badge_layout_property.h index de4e9a97cf1..4d582d69226 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_layout_property.h +++ b/frameworks/core/components_ng/pattern/badge/badge_layout_property.h @@ -132,6 +132,16 @@ public: ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeFontWeight, FontWeight, PROPERTY_UPDATE_MEASURE); ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeBorderWidth, Dimension, PROPERTY_UPDATE_MEASURE); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgePositionXByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgePositionYByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeColorByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeTextColorByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeCircleSizeByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeFontSizeByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeBorderColorByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeBorderWidthByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeFontWeightByuser, bool, PROPERTY_UPDATE_MEASURE_SELF); + private: double badgeCircleRadius_; bool isDefaultFontSize_; diff --git a/frameworks/core/components_ng/pattern/badge/badge_model_ng.cpp b/frameworks/core/components_ng/pattern/badge/badge_model_ng.cpp index 4d4b969e5a8..c77562d1a44 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/badge/badge_model_ng.cpp @@ -73,6 +73,7 @@ void BadgeModelNG::Create(BadgeParameters& badgeParameters) UpdateBadgeStyle(badgeParameters, frameNode); if (SystemProperties::ConfigChangePerform()) { CreateWithResourceObj(frameNode, badgeParameters); + CreateWithResourceObjFlag(frameNode, badgeParameters); } } @@ -188,49 +189,55 @@ void BadgeModelNG::CreateWithResourceObj(const RefPtr& frameNode, Bad ProcessBorderWidth(badgePattern, badgeParameters.resourceBorderWidthObject); } +void BadgeModelNG::CreateWithResourceObjFlag(const RefPtr& frameNode, BadgeParameters& badgeParameters) +{ + auto layoutProperty = frameNode->GetLayoutProperty(); + CHECK_NULL_VOID(layoutProperty); + layoutProperty->UpdateBadgePositionXByuser(badgeParameters.badgePositionXByUser); + layoutProperty->UpdateBadgePositionYByuser(badgeParameters.badgePositionYByUser); + layoutProperty->UpdateBadgeTextColorByuser(badgeParameters.badgeTextColorByUser); + layoutProperty->UpdateBadgeFontSizeByuser(badgeParameters.badgeFontSizeByUser); + layoutProperty->UpdateBadgeCircleSizeByuser(badgeParameters.badgeCircleSizeByUser); + layoutProperty->UpdateBadgeColorByuser(badgeParameters.badgeColorByUser); + layoutProperty->UpdateBadgeBorderWidthByuser(badgeParameters.badgeBorderWidthByUser); + layoutProperty->UpdateBadgeBorderColorByuser(badgeParameters.badgeBorderColorByUser); +} + void BadgeModelNG::ProcessBadgeValue( const RefPtr& badgePattern, const RefPtr& resourceObject) { + const std::string key = "badge.badgeValue"; + badgePattern->RemoveResObj(key); if (!resourceObject) { return; } auto updateFunc = [badgePattern](const RefPtr& resObj, bool isFirstLoad = false) { - std::string key = "badge.badgeValue"; - std::string badgeValue = badgePattern->GetResCacheMapByKey(key); - if (badgeValue.empty()) { - ResourceParseUtils::ParseResString(resObj, badgeValue); - badgePattern->AddResCache(key, badgeValue); - } + std::string badgeValue; + ResourceParseUtils::ParseResString(resObj, badgeValue); if (!badgeValue.empty()) { badgePattern->UpdateBadgeValue(badgeValue, isFirstLoad); } }; updateFunc(resourceObject, true); - badgePattern->AddResObj("badge.badgeValue", resourceObject, std::move(updateFunc)); + badgePattern->AddResObj(key, resourceObject, std::move(updateFunc)); } void BadgeModelNG::ProcessBadgeTextColor( const RefPtr& badgePattern, const RefPtr& resourceObject) { + const std::string key = "badge.textColor"; + badgePattern->RemoveResObj(key); if (!resourceObject) { return; } auto updateFunc = [badgePattern](const RefPtr& resObj, bool isFirstLoad = false) { - std::string key = "badge.textColor"; - std::string cachedColor = badgePattern->GetResCacheMapByKey(key); Color result; - if (cachedColor.empty()) { - bool state = ResourceParseUtils::ParseResColor(resObj, result); - if (state) { - badgePattern->AddResCache(key, result.ColorToString()); - } else { - auto pipeline = PipelineBase::GetCurrentContext(); - CHECK_NULL_VOID(pipeline); - auto badgeTheme = pipeline->GetTheme(); - result = badgeTheme->GetBadgeTextColor(); - } - } else { - result = Color::ColorFromString(cachedColor); + bool state = ResourceParseUtils::ParseResColor(resObj, result); + if (!state) { + auto pipeline = PipelineBase::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + auto badgeTheme = pipeline->GetTheme(); + result = badgeTheme->GetBadgeTextColor(); } badgePattern->UpdateColor(result, isFirstLoad); }; @@ -241,25 +248,19 @@ void BadgeModelNG::ProcessBadgeTextColor( void BadgeModelNG::ProcessBadgeColor( const RefPtr& badgePattern, const RefPtr& resourceObject) { + const std::string key = "badge.Color"; + badgePattern->RemoveResObj(key); if (!resourceObject) { return; } auto updateFunc = [badgePattern](const RefPtr& resObj, bool isFirstLoad = false) { - std::string key = "badge.Color"; - std::string cachedColor = badgePattern->GetResCacheMapByKey(key); Color result; - if (cachedColor.empty()) { - bool state = ResourceParseUtils::ParseResColor(resObj, result); - if (state) { - badgePattern->AddResCache(key, result.ColorToString()); - } else { - auto pipeline = PipelineBase::GetCurrentContext(); - CHECK_NULL_VOID(pipeline); - auto badgeTheme = pipeline->GetTheme(); - result = badgeTheme->GetBadgeColor(); - } - } else { - result = Color::ColorFromString(cachedColor); + bool state = ResourceParseUtils::ParseResColor(resObj, result); + if (!state) { + auto pipeline = PipelineBase::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + auto badgeTheme = pipeline->GetTheme(); + result = badgeTheme->GetBadgeColor(); } badgePattern->UpdateBadgeColor(result, isFirstLoad); }; @@ -270,25 +271,19 @@ void BadgeModelNG::ProcessBadgeColor( void BadgeModelNG::ProcessBorderColor( const RefPtr& badgePattern, const RefPtr& resourceObject) { + const std::string key = "badge.BorderColor"; + badgePattern->RemoveResObj(key); if (!resourceObject) { return; } auto updateFunc = [badgePattern](const RefPtr& resObj, bool isFirstLoad = false) { - std::string key = "badge.BorderColor"; - std::string cachedBorderColor = badgePattern->GetResCacheMapByKey(key); Color result; - if (cachedBorderColor.empty()) { - bool state = ResourceParseUtils::ParseResColor(resObj, result); - if (state) { - badgePattern->AddResCache(key, result.ColorToString()); - } else { - auto pipeline = PipelineBase::GetCurrentContext(); - CHECK_NULL_VOID(pipeline); - auto badgeTheme = pipeline->GetTheme(); - result = badgeTheme->GetBadgeBorderColor(); - } - } else { - result = Color::ColorFromString(cachedBorderColor); + bool state = ResourceParseUtils::ParseResColor(resObj, result); + if (!state) { + auto pipeline = PipelineBase::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + auto badgeTheme = pipeline->GetTheme(); + result = badgeTheme->GetBadgeBorderColor(); } badgePattern->UpdateBorderColor(result, isFirstLoad); }; @@ -299,23 +294,16 @@ void BadgeModelNG::ProcessBorderColor( void BadgeModelNG::ProcessFontWeight( const RefPtr& badgePattern, const RefPtr& resourceObject) { + const std::string key = "badge.FontWeight"; + badgePattern->RemoveResObj(key); if (!resourceObject) { return; } auto updateFunc = [badgePattern](const RefPtr& resObj, bool isFirstLoad = false) { - std::string key = "badge.FontWeight"; std::optional badgeFontWeight; - std::string cachedFontWeight = badgePattern->GetResCacheMapByKey(key); std::string result; - if (cachedFontWeight.empty()) { - bool state = ResourceParseUtils::ParseResString(resObj, result); - if (state) { - badgePattern->AddResCache(key, result); - } - } else { - badgeFontWeight = ConvertStrToFontWeight(cachedFontWeight); - } - + ResourceParseUtils::ParseResString(resObj, result); + badgeFontWeight = ConvertStrToFontWeight(result); badgePattern->UpdateFontWeight( badgeFontWeight.has_value() ? badgeFontWeight.value() : FontWeight::NORMAL, isFirstLoad); }; @@ -326,6 +314,7 @@ void BadgeModelNG::ProcessFontWeight( void BadgeModelNG::ProcessFontSize( const RefPtr& badgePattern, const RefPtr& resourceObject) { + badgePattern->RemoveResObj("badge.FontSize"); if (!resourceObject) { return; } @@ -352,6 +341,7 @@ void BadgeModelNG::ProcessFontSize( void BadgeModelNG::ProcessBadgeSize( const RefPtr& badgePattern, const RefPtr& resourceObject) { + badgePattern->RemoveResObj("badge.CircleSize"); if (!resourceObject) { return; } @@ -378,6 +368,7 @@ void BadgeModelNG::ProcessBadgeSize( void BadgeModelNG::ProcessBadgePositionX( const RefPtr& badgePattern, const RefPtr& resourceObject) { + badgePattern->RemoveResObj("badge.positionX"); if (!resourceObject) { return; } @@ -398,6 +389,7 @@ void BadgeModelNG::ProcessBadgePositionX( void BadgeModelNG::ProcessBadgePositionY( const RefPtr& badgePattern, const RefPtr& resourceObject) { + badgePattern->RemoveResObj("badge.positionY"); if (!resourceObject) { return; } @@ -417,6 +409,7 @@ void BadgeModelNG::ProcessBadgePositionY( void BadgeModelNG::ProcessBorderWidth(const RefPtr& pattern, const RefPtr& resourceObject) { + pattern->RemoveResObj("badge.borderWidth"); if (!resourceObject) { return; } diff --git a/frameworks/core/components_ng/pattern/badge/badge_model_ng.h b/frameworks/core/components_ng/pattern/badge/badge_model_ng.h index 0e47ba797b6..3057b6cecc0 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_model_ng.h +++ b/frameworks/core/components_ng/pattern/badge/badge_model_ng.h @@ -29,6 +29,7 @@ public: isDefaultBadgeSize_ = isDefaultBadgeSize; }; void CreateWithResourceObj(const RefPtr& frameNode, BadgeParameters& badgeParameters); + void CreateWithResourceObjFlag(const RefPtr& frameNode, BadgeParameters& badgeParameters); void ProcessBadgeValue(const RefPtr& badgePattern, const RefPtr& resourceObject); void ProcessBadgeTextColor(const RefPtr& badgePattern, const RefPtr& resourceObject); void ProcessBadgeColor(const RefPtr& badgePattern, const RefPtr& resourceObject); diff --git a/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp b/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp index 92987537c65..f43f1f8de5e 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp +++ b/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp @@ -375,4 +375,38 @@ void BadgePattern::UpdateBorderWidth(const CalcDimension& borderWidth, bool isFi layoutProperty->UpdateBadgeBorderWidth(borderWidth); } } + +void BadgePattern::OnColorConfigurationUpdate() +{ + if (!SystemProperties::ConfigChangePerform()) { + return; + } + auto host = GetHost(); + CHECK_NULL_VOID(host); + auto pipeline = host->GetContext(); + CHECK_NULL_VOID(pipeline); + auto badgeTheme = pipeline->GetTheme(); + CHECK_NULL_VOID(badgeTheme); + auto layoutProperty = GetLayoutProperty(); + CHECK_NULL_VOID(layoutProperty); + if (!layoutProperty->GetBadgePositionXByuser().value_or(false)) { + UpdateBadgePositionX(badgeTheme->GetBadgePositionX()); + } + if (!layoutProperty->GetBadgePositionYByuser().value_or(false)) { + UpdateBadgePositionY(badgeTheme->GetBadgePositionY()); + } + if (!layoutProperty->GetBadgeFontSizeByuser().value_or(false)) { + UpdateFontSize(badgeTheme->GetBadgeFontSize(), true); + } + + if (!layoutProperty->GetBadgeCircleSizeByuser().value_or(false)) { + UpdateBadgeCircleSize(badgeTheme->GetBadgeCircleSize(), true); + } + if (!layoutProperty->GetBadgeBorderColorByuser().value_or(false)) { + UpdateBorderColor(badgeTheme->GetBadgeBorderColor()); + } + if (!layoutProperty->GetBadgeBorderWidthByuser().value_or(false)) { + UpdateBorderWidth(badgeTheme->GetBadgeBorderWidth()); + } +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/badge/badge_pattern.h b/frameworks/core/components_ng/pattern/badge/badge_pattern.h index e29b278adf3..98298ccd7dc 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_pattern.h +++ b/frameworks/core/components_ng/pattern/badge/badge_pattern.h @@ -61,6 +61,7 @@ public: void UpdateBadgePositionX(const CalcDimension& positionX, bool isFirstLoad = false); void UpdateBadgePositionY(const CalcDimension& positionY, bool isFirstLoad = false); void UpdateBorderWidth(const CalcDimension& borderWidth, bool isFirstLoad = false); + void OnColorConfigurationUpdate() override; private: void OnModifyDone() override; -- Gitee From 255446b262896632ff87db83f26744f29591dabb Mon Sep 17 00:00:00 2001 From: zhanghang Date: Tue, 27 May 2025 15:51:31 +0800 Subject: [PATCH 2/2] add badge resource func fix2 Signed-off-by: zhanghang --- .../bridge/declarative_frontend/jsview/js_badge.cpp | 10 ++++++---- .../core/components_ng/pattern/badge/badge_pattern.cpp | 6 ++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp b/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp index 7841351458b..0833130a278 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_badge.cpp @@ -224,15 +224,16 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) Color color; if (SystemProperties::ConfigChangePerform()) { RefPtr badgeColorResObj; - badgeParameters.badgeColorByUser = true; + badgeParameters.badgeColorByUser = false; bool state = ParseJsColor(badgeColorValue, color, badgeColorResObj); if (badgeColorResObj) { badgeParameters.resourceBadgeColorObject = badgeColorResObj; + badgeParameters.badgeColorByUser = true; } else if (state) { badgeParameters.badgeColor = color; + badgeParameters.badgeColorByUser = true; } else if (themeColors) { badgeParameters.badgeColor = themeColors->Warning(); - badgeParameters.badgeColorByUser = false; } } else { if (ParseJsColor(badgeColorValue, color)) { @@ -266,16 +267,17 @@ BadgeParameters JSBadge::CreateBadgeParameters(const JSCallbackInfo& info) Color borderColor; if (SystemProperties::ConfigChangePerform()) { RefPtr borderColorResObj; - badgeParameters.badgeBorderColorByUser = true; + badgeParameters.badgeBorderColorByUser = false; bool state = ParseJsColor(borderColorValue, borderColor, borderColorResObj); if (borderColorResObj) { badgeParameters.resourceBorderColorObject = borderColorResObj; + badgeParameters.badgeBorderColorByUser = true; } else if (state) { badgeParameters.badgeBorderColor = borderColor; + badgeParameters.badgeBorderColorByUser = true; } else { badgeParameters.badgeBorderColor = themeColors ? themeColors->Warning() : badgeTheme->GetBadgeBorderColor(); - badgeParameters.badgeBorderColorByUser = false; } } else { if (ParseJsColor(borderColorValue, borderColor)) { diff --git a/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp b/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp index f43f1f8de5e..5236160543b 100644 --- a/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp +++ b/frameworks/core/components_ng/pattern/badge/badge_pattern.cpp @@ -408,5 +408,11 @@ void BadgePattern::OnColorConfigurationUpdate() if (!layoutProperty->GetBadgeBorderWidthByuser().value_or(false)) { UpdateBorderWidth(badgeTheme->GetBadgeBorderWidth()); } + if (!layoutProperty->GetBadgeTextColorByuser().value_or(false)) { + UpdateColor(badgeTheme->GetBadgeTextColor()); + } + if (!layoutProperty->GetBadgeColorByuser().value_or(false)) { + UpdateBadgeColor(badgeTheme->GetBadgeColor()); + } } } // namespace OHOS::Ace::NG -- Gitee