From 1933c142ee4bd9aa1745f7ae7d263a93c0b9d263 Mon Sep 17 00:00:00 2001 From: jingbotao Date: Fri, 12 Sep 2025 15:22:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=AA=97=E5=8F=A3=E9=BB=98?= =?UTF-8?q?=E8=AE=A4limits=E4=B8=8B=E9=99=90=E5=80=BC=E4=B8=BA1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jingbotao --- wm/src/window_scene_session_impl.cpp | 7 ++- .../window_scene_session_impl_test5.cpp | 62 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/wm/src/window_scene_session_impl.cpp b/wm/src/window_scene_session_impl.cpp index 4fbfe05c91..20691c2575 100644 --- a/wm/src/window_scene_session_impl.cpp +++ b/wm/src/window_scene_session_impl.cpp @@ -1412,8 +1412,11 @@ void WindowSceneSessionImpl::CalculateNewLimitsByLimits( customizedLimits = property_->GetConfigWindowLimitsVP(); customizedLimits.maxWidth_ = static_cast(customizedLimits.maxWidth_ * virtualPixelRatio); customizedLimits.maxHeight_ = static_cast(customizedLimits.maxHeight_ * virtualPixelRatio); - customizedLimits.minWidth_ = static_cast(customizedLimits.minWidth_ * virtualPixelRatio); - customizedLimits.minHeight_ = static_cast(customizedLimits.minHeight_ * virtualPixelRatio); + // system window maintains default limits + customizedLimits.minWidth_ = WindowHelper::IsSystemWindow(GetType()) ? customizedLimits.minWidth_ : + static_cast(customizedLimits.minWidth_ * virtualPixelRatio); + customizedLimits.minHeight_ = WindowHelper::IsSystemWindow(GetType()) ? customizedLimits.minHeight_ : + static_cast(customizedLimits.minHeight_ * virtualPixelRatio); } newLimits = systemLimits; uint32_t limitMinWidth = systemLimits.minWidth_; diff --git a/wm/test/unittest/window_scene_session_impl_test5.cpp b/wm/test/unittest/window_scene_session_impl_test5.cpp index 2316ea7300..c4d0128fc2 100644 --- a/wm/test/unittest/window_scene_session_impl_test5.cpp +++ b/wm/test/unittest/window_scene_session_impl_test5.cpp @@ -2385,6 +2385,68 @@ HWTEST_F(WindowSceneSessionImplTest5, TestSetContentAspectRatio, TestSize.Level1 ret = window->SetContentAspectRatio(ratio, isPersistent, needUpdateRect); EXPECT_EQ(ret, WMError::WM_OK); } + +/** + * @tc.name: CalculateNewLimitsByLimits + * @tc.desc: test function: CalculateNewLimitsByLimits + * @tc.type: FUNC + */ +HWTEST_F(WindowSceneSessionImplTest5, CalculateNewLimitsByLimits, TestSize.Level1) +{ + sptr option = sptr::MakeSptr(); + sptr testImpl = sptr::MakeSptr(option); + WindowLimits customizedLimits = {200, 200, 10, 10, 0.0f, 0.0f, 1.0f}; + WindowLimits expectLimits; + WindowLimits newLimits; + auto display = SingletonContainer::Get().GetDisplayById(0); + ASSERT_NE(nullptr, display); + auto displayInfo = display->GetDisplayInfo(); + ASSERT_NE(nullptr, displayInfo); + float virtualPixelRatio = testImpl->GetVirtualPixelRatio(displayInfo); + testImpl->property_->SetDisplayId(0); + testImpl->property_->SetConfigWindowLimitsVP(customizedLimits); + + // set system limits + testImpl->windowSystemConfig_.maxFloatingWindowSize_ = 6240; + testImpl->windowSystemConfig_.miniWidthOfMainWindow_ = 1; + testImpl->windowSystemConfig_.miniHeightOfMainWindow_ = 1; + testImpl->windowSystemConfig_.miniWidthOfSubWindow_ = 1; + testImpl->windowSystemConfig_.miniHeightOfSubWindow_ = 1; + testImpl->windowSystemConfig_.miniWidthOfDialogWindow_ = 1; + testImpl->windowSystemConfig_.miniHeightOfDialogWindow_ = 1; + + // user set flag is false, window type is mian window + testImpl->userLimitsSet_ = false; + customizedLimits = {200, 200, 10, 10, 0.0f, 0.0f, 1.0f}; + expectLimits ={200, 200, 10, 10, 0.0f, 0.0f, 1.0f}; + testImpl->property_->SetWindowType(WindowType::APP_MAIN_WINDOW_BASE); + testImpl->CalculateNewLimitsByLimits(newLimits, customizedLimits, virtualPixelRatio); + EXPECT_EQ(customizedLimits.maxWidth_, static_cast(expectLimits.maxWidth_ * virtualPixelRatio)); + EXPECT_EQ(customizedLimits.maxHeight_, static_cast(expectLimits.maxHeight_ * virtualPixelRatio)); + EXPECT_EQ(customizedLimits.minWidth_, static_cast(expectLimits.minWidth_ * virtualPixelRatio)); + EXPECT_EQ(customizedLimits.minHeight_, static_cast(expectLimits.minHeight_ * virtualPixelRatio)); + + // user set flag is false, window type is sys window + testImpl->property_->SetWindowType(WindowType::WINDOW_TYPE_GLOBAL_SEARCH); + customizedLimits = {200, 200, 10, 10, 0.0f, 0.0f, 1.0f}; + expectLimits ={200, 200, 10, 10, 0.0f, 0.0f, 1.0f}; + testImpl->CalculateNewLimitsByLimits(newLimits, customizedLimits, virtualPixelRatio); + testImpl->CalculateNewLimitsByLimits(newLimits, customizedLimits, virtualPixelRatio); + EXPECT_EQ(customizedLimits.maxWidth_, static_cast(expectLimits.maxWidth_ * virtualPixelRatio)); + EXPECT_EQ(customizedLimits.maxHeight_, static_cast(expectLimits.maxHeight_ * virtualPixelRatio)); + EXPECT_EQ(customizedLimits.minWidth_, expectLimits.minWidth_); + EXPECT_EQ(customizedLimits.minHeight_, expectLimits.minHeight_); + // user set flag is true + testImpl->userLimitsSet_ = true; + customizedLimits = {200, 200, 10, 10, 0.0f, 0.0f, 1.0f}; + WindowLimits userLimits = {900, 900, 100, 100, 0.0f, 0.0f, 1.0f}; + testImpl->property_->SetUserWindowLimits(userLimits); + testImpl->CalculateNewLimitsByLimits(newLimits, customizedLimits, virtualPixelRatio); + EXPECT_EQ(customizedLimits.maxWidth_, userLimits.maxWidth_); + EXPECT_EQ(customizedLimits.maxHeight_, userLimits.maxHeight_); + EXPECT_EQ(customizedLimits.minWidth_, userLimits.minWidth_); + EXPECT_EQ(customizedLimits.minHeight_, userLimits.minHeight_); +} } } // namespace Rosen } // namespace OHOS \ No newline at end of file -- Gitee