From f070924de677fa10c14b05bedaaec89816c30050 Mon Sep 17 00:00:00 2001 From: hongzexuan Date: Mon, 13 May 2024 19:36:13 +0800 Subject: [PATCH] fix inner scrollbar opacity Signed-off-by: hongzexuan Change-Id: Ic4a934ee00391ae8eff8f8b7accf29beb9a4e66f --- .../pattern/scroll/inner/scroll_bar_overlay_modifier.cpp | 2 +- .../pattern/scroll/inner/scroll_bar_overlay_modifier.h | 7 +++++++ .../pattern/scrollable/scrollable_pattern.cpp | 1 + test/unittest/core/pattern/scroll/scroll_bar_test_ng.cpp | 3 ++- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.cpp b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.cpp index 9c0d7fed9a3..05329ecd4d8 100644 --- a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.cpp +++ b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.cpp @@ -158,7 +158,7 @@ void ScrollBarOverlayModifier::StartBarAnimation(HoverAnimationType hoverAnimati StartHoverAnimation(fgRect, hoverAnimationType); StartAdaptAnimation(fgRect, needAdaptAnimation); } - if (opacityAnimationType != OpacityAnimationType::NONE) { + if (opacityAnimationType != OpacityAnimationType::NONE && isScrollable_) { StartOpacityAnimation(opacityAnimationType); } } diff --git a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.h b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.h index 317185032ea..a4f984072e5 100644 --- a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.h +++ b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar_overlay_modifier.h @@ -129,6 +129,11 @@ public: positionMode_ = positionMode; } + void SetScrollable(bool isScrollable) + { + isScrollable_ = isScrollable; + } + private: Offset GetHoverOffset(const Size& size) const; // Animatable @@ -148,6 +153,8 @@ private: HoverAnimationType hoverAnimatingType_ = HoverAnimationType::NONE; OpacityAnimationType opacityAnimatingType_ = OpacityAnimationType::NONE; PositionMode positionMode_ = PositionMode::RIGHT; + + bool isScrollable_ = false; }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp b/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp index d274d3f2cae..8fe11db9907 100644 --- a/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp +++ b/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp @@ -810,6 +810,7 @@ void ScrollablePattern::UpdateScrollBarRegion(float offset, float estimatedHeigh scrollBar_->SetScrollable(scrollable); if (scrollBarOverlayModifier_) { scrollBarOverlayModifier_->SetOpacity(scrollable ? UINT8_MAX : 0); + scrollBarOverlayModifier_->SetScrollable(scrollable); } if (scrollable) { scrollBar_->ScheduleDisappearDelayTask(); diff --git a/test/unittest/core/pattern/scroll/scroll_bar_test_ng.cpp b/test/unittest/core/pattern/scroll/scroll_bar_test_ng.cpp index fe320707e9b..b4ef4c9214d 100644 --- a/test/unittest/core/pattern/scroll/scroll_bar_test_ng.cpp +++ b/test/unittest/core/pattern/scroll/scroll_bar_test_ng.cpp @@ -256,11 +256,11 @@ HWTEST_F(ScrolleBarTestNg, ScrollBarAnimation002, TestSize.Level1) auto modifier = scrollPaint->GetOverlayModifier(&paintWrapper); auto scrollBarOverlayModifier = AceType::DynamicCast(modifier); pattern_->SetScrollBar(DisplayMode::ON); + scrollBarOverlayModifier->SetScrollable(true); EXPECT_EQ(scrollBar->displayMode_, DisplayMode::ON); EXPECT_TRUE(scrollBar->NeedPaint()); ASSERT_NE(scrollBarOverlayModifier, nullptr); EXPECT_EQ(scrollBarOverlayModifier->GetOpacity(), UINT8_MAX); - EXPECT_NE(scrollBarOverlayModifier->opacityAnimation_, nullptr); EXPECT_EQ(scrollBarOverlayModifier->opacityAnimatingType_, OpacityAnimationType::NONE); /** @@ -280,6 +280,7 @@ HWTEST_F(ScrolleBarTestNg, ScrollBarAnimation002, TestSize.Level1) */ scrollBar->PlayScrollBarAppearAnimation(); scrollPaint->UpdateOverlayModifier(&paintWrapper); + EXPECT_NE(scrollBarOverlayModifier->opacityAnimation_, nullptr); EXPECT_EQ(scrollBarOverlayModifier->opacityAnimatingType_, OpacityAnimationType::NONE); /**