diff --git a/frameworks/core/components_ng/pattern/image/image_pattern.cpp b/frameworks/core/components_ng/pattern/image/image_pattern.cpp index f216b1b666d0c04db48f3278e4019cad198b319a..bf0a70c926b43420a79f45909c5d99e165c6ee92 100644 --- a/frameworks/core/components_ng/pattern/image/image_pattern.cpp +++ b/frameworks/core/components_ng/pattern/image/image_pattern.cpp @@ -626,11 +626,27 @@ void ImagePattern::StartDecoding(const SizeF& dstSize) } } +float ImagePattern::GetSmootEdgeValueFromTheme() +{ + auto host = GetHost(); + CHECK_NULL_RETURN(host, 0.0f); + auto renderCtx = host->GetRenderContext(); + CHECK_NULL_RETURN(renderCtx, 0.0f); + auto pipeline = host->GetContext(); + CHECK_NULL_RETURN(pipeline, 0.0f); + auto imageTheme = pipeline->GetTheme(); + CHECK_NULL_RETURN(imageTheme, 0.0f); + return imageTheme->GetMinEdgeAntialiasing(); +} + void ImagePattern::UpdateSvgSmoothEdgeValue() { auto renderProp = GetPaintProperty(); CHECK_NULL_VOID(renderProp); - renderProp->UpdateSmoothEdge(std::max(smoothEdge_, renderProp->GetSmoothEdge().value_or(0.0f))); + if (!smoothEdge_.has_value()) { + smoothEdge_ = GetSmootEdgeValueFromTheme(); + } + renderProp->UpdateSmoothEdge(std::max(smoothEdge_.value(), renderProp->GetSmoothEdge().value_or(0.0f))); } void ImagePattern::SetImagePaintConfig(const RefPtr& canvasImage, const RectF& srcRect, @@ -697,13 +713,29 @@ RefPtr ImagePattern::CreateNodePaintMethod() return imagePaintMethod_; } +Color ImagePattern::GetSelectedColorFromTheme() +{ + auto host = GetHost(); + CHECK_NULL_RETURN(host, Color()); + auto renderCtx = host->GetRenderContext(); + CHECK_NULL_RETURN(renderCtx, Color()); + auto pipeline = host->GetContext(); + CHECK_NULL_RETURN(pipeline, Color()); + auto textTheme = pipeline->GetTheme(); + CHECK_NULL_RETURN(textTheme, Color()); + return textTheme->GetSelectedColor(); +} + void ImagePattern::CreateModifier() { if (!contentMod_) { contentMod_ = MakeRefPtr(WeakClaim(this)); } if (!overlayMod_) { - overlayMod_ = MakeRefPtr(selectedColor_); + if (!selectedColor_.has_value()) { + selectedColor_ = GetSelectedColorFromTheme(); + } + overlayMod_ = MakeRefPtr(selectedColor_.value()); } if (!imagePaintMethod_) { imagePaintMethod_ = MakeRefPtr(nullptr); @@ -1457,13 +1489,6 @@ void ImagePattern::OnAttachToFrameNode() pipeline->AddNodesToNotifyMemoryLevel(host->GetId()); pipeline->AddWindowStateChangedCallback(host->GetId()); } - auto textTheme = pipeline->GetTheme(); - CHECK_NULL_VOID(textTheme); - selectedColor_ = textTheme->GetSelectedColor(); - overlayMod_ = MakeRefPtr(selectedColor_); - auto imageTheme = pipeline->GetTheme(); - CHECK_NULL_VOID(imageTheme); - smoothEdge_ = imageTheme->GetMinEdgeAntialiasing(); } void ImagePattern::OnDetachFromFrameNode(FrameNode* frameNode) diff --git a/frameworks/core/components_ng/pattern/image/image_pattern.h b/frameworks/core/components_ng/pattern/image/image_pattern.h index e4efb9a6d73d4b820de364a9a514e741a98aa069..26827d9c3a72f18102cbc35b160895821af2778a 100644 --- a/frameworks/core/components_ng/pattern/image/image_pattern.h +++ b/frameworks/core/components_ng/pattern/image/image_pattern.h @@ -107,6 +107,7 @@ public: return GetHost(); } + Color GetSelectedColorFromTheme(); void CreateModifier(); void CreateObscuredImage(); void LoadImageDataIfNeed(); @@ -495,6 +496,7 @@ private: bool IsSupportImageAnalyzerFeature(); void InitDefaultValue(); void ClearAltData(); + float GetSmootEdgeValueFromTheme(); void UpdateSvgSmoothEdgeValue(); // animation @@ -563,8 +565,8 @@ private: ImageRotateOrientation userOrientation_ = ImageRotateOrientation::UP; ImageRotateOrientation selfOrientation_ = ImageRotateOrientation::UP; ImageRotateOrientation joinOrientation_ = ImageRotateOrientation::UP; - Color selectedColor_; - float smoothEdge_ = 0.0f; + std::optional selectedColor_; + std::optional smoothEdge_; OffsetF parentGlobalOffset_; bool isSelected_ = false;