From f3bef1ace5fdb9b1c215a3c4446de89db60afbfe Mon Sep 17 00:00:00 2001 From: zenix_zxy Date: Sat, 13 Sep 2025 16:25:51 +0800 Subject: [PATCH] fixOverlayProblem Signed-off-by: zenix_zxy Change-Id: Iaa499ffada8a5cccfa76f85de3fe49a84edf7056 --- frameworks/core/components_ng/base/view_abstract.cpp | 5 +++++ frameworks/core/components_ng/layout/layout_property.cpp | 2 +- interfaces/native/node/style_modifier.cpp | 2 +- test/unittest/interfaces/native_node_test.cpp | 2 -- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index 5853f4bf443..9dba30ef6bb 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -6426,6 +6426,11 @@ void ViewAbstract::SetOverlayNode(FrameNode* frameNode, FrameNode* node, const N auto overlayNode = AceType::WeakClaim(node).Upgrade(); if (overlayNode == nullptr) { frameNode->SetOverlayNode(nullptr); + auto layoutProperty = frameNode->GetLayoutProperty(); + CHECK_NULL_VOID(layoutProperty); + layoutProperty->UpdatePropertyChangeFlag(PROPERTY_UPDATE_MEASURE); + frameNode->MarkNeedSyncRenderTree(); + frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); return; } frameNode->SetOverlayNode(overlayNode); diff --git a/frameworks/core/components_ng/layout/layout_property.cpp b/frameworks/core/components_ng/layout/layout_property.cpp index 4e05211b336..067bff30edf 100644 --- a/frameworks/core/components_ng/layout/layout_property.cpp +++ b/frameworks/core/components_ng/layout/layout_property.cpp @@ -1721,7 +1721,7 @@ void LayoutProperty::SetOverlayOffset( const std::optional& overlayOffsetX, const std::optional& overlayOffsetY) { bool xChanged = true; - bool yChanged = false; + bool yChanged = true; if ((!overlayOffsetX.has_value() && overlayOffsetX_.Value() == 0) || (overlayOffsetX.has_value() && overlayOffsetX.value() == overlayOffsetX_)) { xChanged = false; diff --git a/interfaces/native/node/style_modifier.cpp b/interfaces/native/node/style_modifier.cpp index 0e6563f8bc4..84f9228e8b0 100644 --- a/interfaces/native/node/style_modifier.cpp +++ b/interfaces/native/node/style_modifier.cpp @@ -2752,7 +2752,7 @@ void ResetResponseRegion(ArkUI_NodeHandle node) int32_t SetOverlay(ArkUI_NodeHandle node, const ArkUI_AttributeItem* item) { - if (item->string == nullptr) { + if (item->string == nullptr && item->object == nullptr) { return ERROR_CODE_PARAM_INVALID; } auto* fullImpl = GetFullImpl(); diff --git a/test/unittest/interfaces/native_node_test.cpp b/test/unittest/interfaces/native_node_test.cpp index 67b9c1b38c2..759297e8b5f 100644 --- a/test/unittest/interfaces/native_node_test.cpp +++ b/test/unittest/interfaces/native_node_test.cpp @@ -8639,8 +8639,6 @@ HWTEST_F(NativeNodeTest, NativeNodeOverlayTest001, TestSize.Level1) item4.string = ""; item4.object = overlayNode; - item4.size = 0; - nodeAPI->setAttribute(rootNode, NODE_OVERLAY, &item4); item4.size = 4; nodeAPI->setAttribute(rootNode, NODE_OVERLAY, &item4); auto overlayVal = nodeAPI->getAttribute(rootNode, NODE_OVERLAY); -- Gitee