From 2585cdadb6500e156905197fd3db22c41368effe Mon Sep 17 00:00:00 2001 From: hw_ljz Date: Mon, 18 Aug 2025 10:11:33 +0800 Subject: [PATCH] =?UTF-8?q?position=E5=B1=9E=E6=80=A7=E5=83=8F=E7=B4=A0?= =?UTF-8?q?=E5=8F=96=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hw_ljz --- .../render/adapter/rosen_render_context.cpp | 9 ++++++ .../rosen/rosen_render_context_test_new.cpp | 29 +++++++++++++++++++ 2 files changed, 38 insertions(+) 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 106112fe3bd..bd3a357c4e0 100755 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -3936,6 +3936,15 @@ void RosenRenderContext::SetPositionToRSNode() if (!rect.GetSize().IsPositive()) { return; } + auto layoutProperty = frameNode->GetLayoutProperty(); + if (layoutProperty) { + auto flag = SystemProperties::GetPixelRoundEnabled() ? layoutProperty->GetPixelRound() : NO_FORCE_ROUND; + OnePixelRounding(flag); + } + const auto &geometryNode = frameNode->GetGeometryNode(); + if (geometryNode) { + rect = RectF(geometryNode->GetPixelGridRoundOffset(), geometryNode->GetPixelGridRoundSize()); + } paintRect_ = rect; if (frameNode->ParentExpansive() && !frameNode->SelfExpansive()) { // Dynamically modify position, need consider parent expand diff --git a/test/unittest/core/rosen/rosen_render_context_test_new.cpp b/test/unittest/core/rosen/rosen_render_context_test_new.cpp index 383bfcb06cb..95c915ab02a 100644 --- a/test/unittest/core/rosen/rosen_render_context_test_new.cpp +++ b/test/unittest/core/rosen/rosen_render_context_test_new.cpp @@ -1204,4 +1204,33 @@ HWTEST_F(RosenRenderContextTest, RosenRenderContextTestNew044, TestSize.Level1) std::string blurStyleStr = pattern->GetResCacheMapByKey("foregroundBlurStyle.blurStyle"); EXPECT_EQ(blurStyleStr, ""); } + +/** + * @tc.name: SetPositionToRSNodeTest01 + * @tc.desc: SetPositionToRSNode(). + * @tc.type: FUNC + */ +HWTEST_F(RosenRenderContextTest, SetPositionToRSNodeTest01, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create FrameNode and RosenRenderContext + */ + auto frameNode = FrameNode::GetOrCreateFrameNode("frame", -1, []() { return AceType::MakeRefPtr(); }); + RefPtr rosenRenderContext = InitRosenRenderContext(frameNode); + auto geometryNode = frameNode->GetGeometryNode(); + ASSERT_NE(geometryNode, nullptr); + /** + * @tc.steps: step2. Set FrameRect with decimals. + */ + geometryNode->SetFrameSize(SizeF(10.3f, 10.6f)); + geometryNode->SetMarginFrameOffset(OffsetF(10.3f, 10.6f)); + SystemProperties::pixelRoundEnable_ = true; + frameNode->GetLayoutProperty()->UpdatePixelRound(static_cast(PixelRoundPolicy::ALL_FORCE_ROUND)); + rosenRenderContext->SetPositionToRSNode(); + /** + * @tc.expected: The result is pixel-rounded. + */ + EXPECT_EQ(rosenRenderContext->paintRect_, RectF(10.00, 11.00, 11.00, 11.00)) + << rosenRenderContext->paintRect_.ToString(); +} } // namespace OHOS::Ace::NG \ No newline at end of file -- Gitee