diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 6562a95643365f9209b3a85c3f0be2e2a520f057..f5cf63e98c349bc3d61f4fbe506bcc63c054c71a 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -273,6 +273,9 @@ void RosenRenderContext::DetachModifiers() } auto pipeline = PipelineContext::GetCurrentContextPtrSafelyWithCheck(); if (pipeline) { + if (densityChangedCallbackId_ != -1) { + pipeline->UnregisterDensityChangedCallback(densityChangedCallbackId_); + } pipeline->RequestFrame(); } } @@ -588,10 +591,10 @@ void RosenRenderContext::SyncGeometryProperties(const RectF& paintRect) if (!isSynced_) { isSynced_ = true; - } - auto borderRadius = GetBorderRadius(); - if (borderRadius.has_value()) { - OnBorderRadiusUpdate(borderRadius.value()); + auto borderRadius = GetBorderRadius(); + if (borderRadius.has_value()) { + OnBorderRadiusUpdate(borderRadius.value()); + } } if (firstTransitionIn_) { @@ -2377,6 +2380,20 @@ void RosenRenderContext::SetBorderRadius(const BorderRadiusProperty& value) void RosenRenderContext::OnBorderRadiusUpdate(const BorderRadiusProperty& value) { + if (densityChangedCallbackId_ == -1) { + auto context = GetPipelineContext(); + CHECK_NULL_VOID(context); + densityChangedCallbackId_ = context->RegisterDensityChangedCallback( + [self = WeakClaim(this)](double density) { + auto renderContext = self.Upgrade(); + CHECK_NULL_VOID(renderContext); + auto borderRadius = renderContext->GetBorderRadius(); + if (borderRadius.has_value()) { + renderContext->SetBorderRadius(borderRadius.value()); + } + }); + } + CHECK_NULL_VOID(isSynced_); SetBorderRadius(value); } diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.h b/frameworks/core/components_ng/render/adapter/rosen_render_context.h index 1c2ea9f6e27031f8fe02442b9342e64531c283d3..43777172cea440eff7b847489f9efec73e67d9d5 100755 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.h +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.h @@ -661,6 +661,7 @@ protected: int appearingTransitionCount_ = 0; int disappearingTransitionCount_ = 0; int sandBoxCount_ = 0; + int32_t densityChangedCallbackId_ = -1; static constexpr int32_t INVALID_PARENT_ID = -2100000; static constexpr uint32_t DRAW_REGION_RECT_COUNT = 7; std::map> particleImageContextMap_;