From 3477f998e3f0ba249d7a85bce10cf3cb4caf4410 Mon Sep 17 00:00:00 2001 From: yeyinglong Date: Tue, 18 Jul 2023 14:32:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E6=9D=A1=E6=89=8B=E5=8A=BF?= =?UTF-8?q?=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yeyinglong --- .../core/components/scroll/scrollable.cpp | 6 +- .../core/components/scroll/scrollable.h | 30 ----- .../core/components_ng/base/frame_node.cpp | 2 +- .../components_ng/event/gesture_event_hub.cpp | 4 +- .../components_ng/event/gesture_event_hub.h | 2 +- .../components_ng/event/scrollable_event.cpp | 16 ++- .../components_ng/event/scrollable_event.h | 47 +++----- .../components_ng/pattern/list/list_model.h | 2 +- .../pattern/list/list_model_ng.h | 2 +- .../pattern/list/list_pattern.cpp | 14 +-- .../pattern/scroll/inner/scroll_bar.cpp | 109 +++++++++++++++++- .../pattern/scroll/inner/scroll_bar.h | 49 ++++++-- .../pattern/scroll/scroll_pattern.cpp | 15 +-- .../pattern/scrollable/scrollable_pattern.cpp | 27 ++--- .../pattern/scrollable/scrollable_pattern.h | 14 --- .../scrollable/scrollable_properties.h | 18 +++ .../text_field/text_field_model_ng.cpp | 2 +- .../pattern/text_field/text_field_pattern.cpp | 5 - .../gesture_event_hub_test_ng.cpp | 14 ++- .../test/event/mock/mock_scrollable_event.cpp | 2 +- .../mock/event/mock_gesture_event_hub.cpp | 2 +- .../components_ng/test/pattern/list/BUILD.gn | 4 +- .../test/pattern/list/list_test_ng.cpp | 6 +- .../test/pattern/scroll/scroll_test_ng.cpp | 1 - .../pattern/textfield/textfield_test_ng.cpp | 2 - 25 files changed, 233 insertions(+), 162 deletions(-) diff --git a/frameworks/core/components/scroll/scrollable.cpp b/frameworks/core/components/scroll/scrollable.cpp index e4aa830988b..cc38cb39dcb 100644 --- a/frameworks/core/components/scroll/scrollable.cpp +++ b/frameworks/core/components/scroll/scrollable.cpp @@ -124,7 +124,7 @@ void Scrollable::Initialize(const WeakPtr& context) auto actionStart = [weakScroll = AceType::WeakClaim(this)](const GestureEvent& info) { auto scroll = weakScroll.Upgrade(); if (scroll) { - if (info.GetInputEventType() == InputEventType::MOUSE_BUTTON && !scroll->NeedMouseLeftButtonScroll()) { + if (info.GetInputEventType() == InputEventType::MOUSE_BUTTON) { return; } // Send event to accessibility when scroll start. @@ -142,7 +142,7 @@ void Scrollable::Initialize(const WeakPtr& context) auto actionUpdate = [weakScroll = AceType::WeakClaim(this)](const GestureEvent& info) { auto scroll = weakScroll.Upgrade(); if (scroll) { - if (info.GetInputEventType() == InputEventType::MOUSE_BUTTON && !scroll->NeedMouseLeftButtonScroll()) { + if (info.GetInputEventType() == InputEventType::MOUSE_BUTTON) { return; } scroll->HandleDragUpdate(info); @@ -152,7 +152,7 @@ void Scrollable::Initialize(const WeakPtr& context) auto actionEnd = [weakScroll = AceType::WeakClaim(this)](const GestureEvent& info) { auto scroll = weakScroll.Upgrade(); if (scroll) { - if (info.GetInputEventType() == InputEventType::MOUSE_BUTTON && !scroll->NeedMouseLeftButtonScroll()) { + if (info.GetInputEventType() == InputEventType::MOUSE_BUTTON) { return; } scroll->HandleDragEnd(info); diff --git a/frameworks/core/components/scroll/scrollable.h b/frameworks/core/components/scroll/scrollable.h index aad3bfd9ec1..f6cb0841bb9 100644 --- a/frameworks/core/components/scroll/scrollable.h +++ b/frameworks/core/components/scroll/scrollable.h @@ -33,21 +33,6 @@ #include "core/pipeline/base/render_node.h" namespace OHOS::Ace { - -constexpr int32_t SCROLL_FROM_NONE = 0; -constexpr int32_t SCROLL_FROM_UPDATE = 1; -constexpr int32_t SCROLL_FROM_ANIMATION = 2; -constexpr int32_t SCROLL_FROM_JUMP = 3; -constexpr int32_t SCROLL_FROM_ANIMATION_SPRING = 4; -constexpr int32_t SCROLL_FROM_CHILD = 5; -constexpr int32_t SCROLL_FROM_BAR = 6; -constexpr int32_t SCROLL_FROM_FOCUS_JUMP = 7; -constexpr int32_t SCROLL_FROM_ROTATE = 8; -constexpr int32_t SCROLL_FROM_INDEXER = 9; -constexpr int32_t SCROLL_FROM_START = 10; // from drag start -constexpr int32_t SCROLL_FROM_AXIS = 11; -constexpr int32_t SCROLL_FROM_ANIMATION_CONTROLLER = 12; - enum class NestedState { GESTURE = 0, CHILD_SCROLL, @@ -64,7 +49,6 @@ struct ScrollResult { bool reachEdge; }; -using ScrollPositionCallback = std::function; using ScrollEventCallback = std::function; using OutBoundaryCallback = std::function; using ScrollOverCallback = std::function; @@ -263,19 +247,6 @@ public: return dragCancelCallback_; } - void SetMouseLeftButtonScroll(const MouseLeftButtonScroll& mouseLeftButtonScroll) - { - mouseLeftButtonScroll_ = mouseLeftButtonScroll; - } - - bool NeedMouseLeftButtonScroll() const - { - if (mouseLeftButtonScroll_) { - return mouseLeftButtonScroll_(); - } - return true; - } - void SetWatchFixCallback(const WatchFixCallback& watchFixCallback) { watchFixCallback_ = watchFixCallback; @@ -473,7 +444,6 @@ private: DragEndForRefreshCallback dragEndCallback_; DragCancelRefreshCallback dragCancelCallback_; ContinuousSlidingCallback continuousSlidingCallback_; - MouseLeftButtonScroll mouseLeftButtonScroll_; Axis axis_; RefPtr panRecognizer_; diff --git a/frameworks/core/components_ng/base/frame_node.cpp b/frameworks/core/components_ng/base/frame_node.cpp index b96791972e2..e6a178f082b 100644 --- a/frameworks/core/components_ng/base/frame_node.cpp +++ b/frameworks/core/components_ng/base/frame_node.cpp @@ -1534,7 +1534,7 @@ HitTestResult FrameNode::TouchTest(const PointF& globalPoint, const PointF& pare TouchTestResult finalResult; const auto coordinateOffset = globalPoint - localPoint; preventBubbling = gestureHub->ProcessTouchTestHit( - coordinateOffset, touchRestrict, newComingTargets, finalResult, touchId); + coordinateOffset, touchRestrict, newComingTargets, finalResult, touchId, localPoint); newComingTargets.swap(finalResult); } } else if (touchRestrict.hitTestType == SourceType::MOUSE) { diff --git a/frameworks/core/components_ng/event/gesture_event_hub.cpp b/frameworks/core/components_ng/event/gesture_event_hub.cpp index cec40b2c393..8a7dffd75c3 100644 --- a/frameworks/core/components_ng/event/gesture_event_hub.cpp +++ b/frameworks/core/components_ng/event/gesture_event_hub.cpp @@ -63,12 +63,12 @@ RefPtr GestureEventHub::GetFrameNode() const } bool GestureEventHub::ProcessTouchTestHit(const OffsetF& coordinateOffset, const TouchRestrict& touchRestrict, - TouchTestResult& innerTargets, TouchTestResult& finalResult, int32_t touchId) + TouchTestResult& innerTargets, TouchTestResult& finalResult, int32_t touchId, const PointF& localPoint) { auto eventHub = eventHub_.Upgrade(); auto getEventTargetImpl = eventHub ? eventHub->CreateGetEventTargetImpl() : nullptr; if (scrollableActuator_) { - scrollableActuator_->OnCollectTouchTarget(coordinateOffset, touchRestrict, getEventTargetImpl, innerTargets); + scrollableActuator_->CollectTouchTarget(coordinateOffset, localPoint, getEventTargetImpl, innerTargets); } if (touchEventActuator_) { touchEventActuator_->OnCollectTouchTarget(coordinateOffset, touchRestrict, getEventTargetImpl, innerTargets); diff --git a/frameworks/core/components_ng/event/gesture_event_hub.h b/frameworks/core/components_ng/event/gesture_event_hub.h index ab4ddf64211..97d4be795fb 100644 --- a/frameworks/core/components_ng/event/gesture_event_hub.h +++ b/frameworks/core/components_ng/event/gesture_event_hub.h @@ -277,7 +277,7 @@ public: // the return value means prevents event bubbling. bool ProcessTouchTestHit(const OffsetF& coordinateOffset, const TouchRestrict& touchRestrict, - TouchTestResult& innerTargets, TouchTestResult& finalResult, int32_t touchId); + TouchTestResult& innerTargets, TouchTestResult& finalResult, int32_t touchId, const PointF& localPoint); RefPtr GetFrameNode() const; diff --git a/frameworks/core/components_ng/event/scrollable_event.cpp b/frameworks/core/components_ng/event/scrollable_event.cpp index ec6af4c50c4..f544cd73561 100644 --- a/frameworks/core/components_ng/event/scrollable_event.cpp +++ b/frameworks/core/components_ng/event/scrollable_event.cpp @@ -27,17 +27,22 @@ ScrollableActuator::ScrollableActuator(const WeakPtr& gestureEv : gestureEventHub_(gestureEventHub) {} -void ScrollableActuator::OnCollectTouchTarget(const OffsetF& coordinateOffset, const TouchRestrict& /*touchRestrict*/, +void ScrollableActuator::CollectTouchTarget(const OffsetF& coordinateOffset, const PointF& localPoint, const GetEventTargetImpl& getEventTargetImpl, TouchTestResult& result) { for (const auto& [axis, event] : scrollableEvents_) { if (!event || !event->GetEnable()) { continue; } - const auto& scrollable = event->GetScrollable(); - scrollable->SetGetEventTargetImpl(getEventTargetImpl); - scrollable->SetCoordinateOffset(Offset(coordinateOffset.GetX(), coordinateOffset.GetY())); - scrollable->OnCollectTouchTarget(result); + auto scrollBar = event->GetScrollBar(); + if (scrollBar && scrollBar->InBarTouchRegion(Point(localPoint.GetX(), localPoint.GetY()))) { + scrollBar->OnCollectTouchTarget(coordinateOffset, getEventTargetImpl, result); + } else { + const auto& scrollable = event->GetScrollable(); + scrollable->SetGetEventTargetImpl(getEventTargetImpl); + scrollable->SetCoordinateOffset(Offset(coordinateOffset.GetX(), coordinateOffset.GetY())); + scrollable->OnCollectTouchTarget(result); + } } } @@ -52,7 +57,6 @@ void ScrollableActuator::InitializeScrollable(RefPtr event) scrollable->SetOnScrollFrameBegin(event->GetScrollFrameBeginCallback()); scrollable->SetScrollEndCallback(event->GetScrollEndCallback()); scrollable->Initialize(host->GetContext()); - scrollable->SetMouseLeftButtonScroll(event->GetMouseLeftButtonScroll()); scrollable->SetUnstaticFriction(event->GetFriction()); event->SetScrollable(scrollable); } diff --git a/frameworks/core/components_ng/event/scrollable_event.h b/frameworks/core/components_ng/event/scrollable_event.h index 5235a877962..32ec68b2b93 100644 --- a/frameworks/core/components_ng/event/scrollable_event.h +++ b/frameworks/core/components_ng/event/scrollable_event.h @@ -24,12 +24,10 @@ #include "core/components/scroll/scrollable.h" #include "core/components_ng/event/gesture_event_actuator.h" #include "core/components_ng/pattern/scroll/scroll_edge_effect.h" +#include "core/components_ng/pattern/scroll/inner/scroll_bar.h" namespace OHOS::Ace::NG { -using OnScrollCallback = std::function; -using ScrollEndCallback = std::function; - class GestureEventHub; class ScrollableEvent : public AceType { @@ -77,19 +75,6 @@ public: return scrollFrameBeginCallback_; } - void SetOnScrollCallback(OnScrollCallback&& onScrollCallback) - { - if (!onScrollCallback) { - return; - } - onScrollCallback_ = std::move(onScrollCallback); - } - - const OnScrollCallback& GetOnScrollCallback() const - { - return onScrollCallback_; - } - void SetScrollEndCallback(ScrollEndCallback&& scrollEndCallback) { if (!scrollEndCallback) { @@ -116,19 +101,6 @@ public: return outBoundaryCallback_; } - void SetMouseLeftButtonScroll(MouseLeftButtonScroll&& mouseLeftButtonScroll) - { - mouseLeftButtonScroll_ = std::move(mouseLeftButtonScroll); - if (scrollable_) { - scrollable_->SetMouseLeftButtonScroll(mouseLeftButtonScroll_); - } - } - - const MouseLeftButtonScroll& GetMouseLeftButtonScroll() const - { - return mouseLeftButtonScroll_; - } - Axis GetAxis() const { return axis_; @@ -183,18 +155,27 @@ public: return friction_; } + RefPtr GetScrollBar(void) const + { + return scrollBar_.Upgrade(); + } + + void SetScrollBar(const RefPtr& scrollBar) + { + scrollBar_ = AceType::WeakClaim(AceType::RawPtr(scrollBar)); + } + private: ScrollPositionCallback callback_; - OnScrollCallback onScrollCallback_; ScrollBeginCallback scrollBeginCallback_; ScrollFrameBeginCallback scrollFrameBeginCallback_; ScrollEndCallback scrollEndCallback_; OutBoundaryCallback outBoundaryCallback_; - MouseLeftButtonScroll mouseLeftButtonScroll_; Axis axis_ = Axis::VERTICAL; bool enable_ = true; RefPtr scrollable_; + WeakPtr scrollBar_; double friction_ = -1.0; }; @@ -218,8 +199,8 @@ public: void AddScrollEdgeEffect(const Axis& axis, RefPtr& effect); bool RemoveScrollEdgeEffect(const RefPtr& effect); - void OnCollectTouchTarget(const OffsetF& coordinateOffset, const TouchRestrict& touchRestrict, - const GetEventTargetImpl& getEventTargetImpl, TouchTestResult& result) override; + void CollectTouchTarget(const OffsetF& coordinateOffset, const PointF& localPoint, + const GetEventTargetImpl& getEventTargetImpl, TouchTestResult& result); private: void InitializeScrollable(RefPtr event); diff --git a/frameworks/core/components_ng/pattern/list/list_model.h b/frameworks/core/components_ng/pattern/list/list_model.h index 305b0854369..ea86a27196d 100644 --- a/frameworks/core/components_ng/pattern/list/list_model.h +++ b/frameworks/core/components_ng/pattern/list/list_model.h @@ -38,7 +38,7 @@ public: virtual RefPtr CreateScrollController() = 0; virtual void SetScroller(RefPtr scroller, RefPtr proxy) = 0; virtual void SetListDirection(Axis axis) = 0; - virtual void SetScrollBar(DisplayMode scrollBar) = 0; + virtual void SetScrollBar(Ace::DisplayMode scrollBar) = 0; virtual void SetEdgeEffect(EdgeEffect edgeEffect) = 0; virtual void SetEditMode(bool editMode) = 0; virtual void SetDivider(const V2::ItemDivider& divider) = 0; diff --git a/frameworks/core/components_ng/pattern/list/list_model_ng.h b/frameworks/core/components_ng/pattern/list/list_model_ng.h index 0c55a884837..fa44d194c16 100644 --- a/frameworks/core/components_ng/pattern/list/list_model_ng.h +++ b/frameworks/core/components_ng/pattern/list/list_model_ng.h @@ -28,7 +28,7 @@ public: RefPtr CreateScrollController() override; void SetScroller(RefPtr scroller, RefPtr proxy) override; void SetListDirection(Axis axis) override; - void SetScrollBar(DisplayMode scrollBar) override; + void SetScrollBar(Ace::DisplayMode scrollBar) override; void SetEdgeEffect(EdgeEffect edgeEffect) override; void SetEditMode(bool editMode) override; void SetDivider(const V2::ItemDivider& divider) override; diff --git a/frameworks/core/components_ng/pattern/list/list_pattern.cpp b/frameworks/core/components_ng/pattern/list/list_pattern.cpp index e731233f682..7937f67d038 100644 --- a/frameworks/core/components_ng/pattern/list/list_pattern.cpp +++ b/frameworks/core/components_ng/pattern/list/list_pattern.cpp @@ -276,7 +276,7 @@ void ListPattern::ProcessEvent( onScroll(offsetVP, ScrollState::SCROLL); onScroll(0.0_vp, ScrollState::IDLE); } else if (source == SCROLL_FROM_ANIMATION || source == SCROLL_FROM_ANIMATION_SPRING || - source == SCROLL_FROM_ANIMATION_CONTROLLER) { + source == SCROLL_FROM_ANIMATION_CONTROLLER || source == SCROLL_FROM_BAR_FLING) { onScroll(offsetVP, ScrollState::FLING); onScroll(0.0_vp, ScrollState::IDLE); } else { @@ -294,7 +294,7 @@ void ListPattern::ProcessEvent( if (source == SCROLL_FROM_UPDATE || source == SCROLL_FROM_AXIS || source == SCROLL_FROM_BAR) { onScroll(offsetVP, ScrollState::SCROLL); } else if (source == SCROLL_FROM_ANIMATION || source == SCROLL_FROM_ANIMATION_SPRING || - source == SCROLL_FROM_ANIMATION_CONTROLLER) { + source == SCROLL_FROM_ANIMATION_CONTROLLER || source == SCROLL_FROM_BAR_FLING) { onScroll(offsetVP, ScrollState::FLING); } else { onScroll(offsetVP, ScrollState::IDLE); @@ -731,15 +731,7 @@ bool ListPattern::OnScrollCallback(float offset, int32_t source) FireOnScrollStart(); return true; } - auto scrollBar = GetScrollBar(); - if (scrollBar && scrollBar->IsDriving()) { - offset = scrollBar->CalcPatternOffset(offset); - if (source == SCROLL_FROM_UPDATE) { - source = SCROLL_FROM_BAR; - } - } else { - ProcessDragUpdate(offset, source); - } + ProcessDragUpdate(offset, source); return UpdateCurrentOffset(offset, source); } diff --git a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.cpp b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.cpp index afcbef98970..644247bf31c 100644 --- a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.cpp +++ b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.cpp @@ -326,7 +326,6 @@ void ScrollBar::SetGestureEvent() inRegion = scrollBar->InBarActiveRegion(point); } scrollBar->SetPressed(inRegion); - scrollBar->SetDriving(inRegion); if (inRegion && !scrollBar->IsHover()) { scrollBar->PlayGrowAnimation(); } @@ -351,6 +350,9 @@ void ScrollBar::SetGestureEvent() if (!touchAnimator_) { touchAnimator_ = CREATE_ANIMATOR(PipelineContext::GetCurrentContext()); } + if (!panRecognizer_) { + InitPanRecognizer(); + } } void ScrollBar::SetMouseEvent() @@ -480,12 +482,15 @@ void ScrollBar::PlayShrinkAnimation() void ScrollBar::PlayBarEndAnimation() { + if (opacity_ == 0) { + return; + } if (scrollEndAnimator_) { if (!scrollEndAnimator_->IsStopped()) { scrollEndAnimator_->Stop(); } if (IsHover() || IsPressed()) { - return ; + return; } scrollEndAnimator_->Play(); return; @@ -564,4 +569,104 @@ void ScrollBar::CalcReservedHeight() startReservedHeight_.Value(), endReservedHeight_.Value()); SetReservedHeightUpdate(true); } + +void ScrollBar::InitPanRecognizer() +{ + PanDirection panDirection; + panDirection.type = positionMode_ == PositionMode::BOTTOM ? PanDirection::HORIZONTAL : PanDirection::VERTICAL; + panRecognizer_ = MakeRefPtr(1, panDirection, DEFAULT_PAN_DISTANCE); + panRecognizer_->SetOnActionUpdate([weakBar = AceType::WeakClaim(this)](const GestureEvent& info) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleDragUpdate(info); + } + }); + panRecognizer_->SetOnActionEnd([weakBar = AceType::WeakClaim(this)](const GestureEvent& info) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleDragEnd(info); + } + }); + panRecognizer_->SetOnActionStart([weakBar = AceType::WeakClaim(this)](const GestureEvent& info) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleDragStart(info); + } + }); +} + +void ScrollBar::HandleDragStart(const GestureEvent& info) +{ + if (scrollPositionCallback_) { + scrollPositionCallback_(0, SCROLL_FROM_START); + } + isDriving_ = true; +} + +void ScrollBar::HandleDragUpdate(const GestureEvent& info) +{ + if (scrollPositionCallback_) { + auto offset = CalcPatternOffset(info.GetMainDelta()); + scrollPositionCallback_(offset, SCROLL_FROM_BAR); + } +} + +void ScrollBar::HandleDragEnd(const GestureEvent& info) +{ + auto velocity = info.GetMainVelocity(); + if (NearZero(velocity)) { + if (scrollEndCallback_) { + scrollEndCallback_(); + } + isDriving_ = false; + return; + } + frictionPosition_ = 0.0; + if (frictionMotion_) { + frictionMotion_->Reset(friction_, 0, velocity); + } else { + frictionMotion_ = AceType::MakeRefPtr(friction_, 0, velocity); + frictionMotion_->AddListener([weakBar = AceType::WeakClaim(this)](double value) { + auto scrollBar = weakBar.Upgrade(); + CHECK_NULL_VOID_NOLOG(scrollBar); + scrollBar->ProcessFrictionMotion(value); + }); + } + if (!frictionController_) { + frictionController_ = CREATE_ANIMATOR(PipelineContext::GetCurrentContext()); + frictionController_->AddStopListener([weakBar = AceType::WeakClaim(this)]() { + auto scrollBar = weakBar.Upgrade(); + CHECK_NULL_VOID_NOLOG(scrollBar); + scrollBar->ProcessFrictionMotionStop(); + }); + } + frictionController_->PlayMotion(frictionMotion_); +} + +void ScrollBar::ProcessFrictionMotion(double value) +{ + if (scrollPositionCallback_) { + auto offset = CalcPatternOffset(value - frictionPosition_); + scrollPositionCallback_(offset, SCROLL_FROM_BAR_FLING); + } + frictionPosition_ = value; +} + +void ScrollBar::ProcessFrictionMotionStop() +{ + if (scrollEndCallback_) { + scrollEndCallback_(); + } + isDriving_ = false; +} + +void ScrollBar::OnCollectTouchTarget(const OffsetF& coordinateOffset, + const GetEventTargetImpl& getEventTargetImpl, TouchTestResult& result) +{ + if (panRecognizer_) { + panRecognizer_->SetCoordinateOffset(Offset(coordinateOffset.GetX(), coordinateOffset.GetY())); + panRecognizer_->SetGetEventTargetImpl(getEventTargetImpl); + result.emplace_front(panRecognizer_); + } +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.h b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.h index 12a46e77cb8..5be18dca133 100644 --- a/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.h +++ b/frameworks/core/components_ng/pattern/scroll/inner/scroll_bar.h @@ -22,11 +22,14 @@ #include "base/geometry/offset.h" #include "base/geometry/rect.h" #include "base/utils/utils.h" +#include "core/animation/friction_motion.h" #include "core/components/common/properties/color.h" #include "core/components/common/properties/edge.h" #include "core/components_ng/event/input_event.h" #include "core/components_ng/event/touch_event.h" #include "core/components_ng/property/border_property.h" +#include "core/components_ng/gestures/recognizers/pan_recognizer.h" +#include "core/components_ng/pattern/scrollable/scrollable_properties.h" namespace OHOS::Ace::NG { @@ -35,6 +38,7 @@ constexpr double DEFAULT_TOPANGLE = 60.0; constexpr double DEFAULT_BOTTOMANGLE = 120.0; constexpr double DEFAULT_MINANGLE = 10.0; constexpr double STRAIGHT_ANGLE = 180.0; +constexpr double BAR_FRICTION = 0.9; constexpr Color PRESSED_BLEND_COLOR = Color(0x19000000); enum class ShapeMode { @@ -303,16 +307,6 @@ public: return isHover_; } - void SetDriving(bool isDriving) - { - isDriving_ = isDriving; - } - - bool IsDriving() const - { - return isDriving_; - } - uint8_t GetOpacity() const { return opacity_; @@ -396,6 +390,26 @@ public: { return hostBorderRadius_; } + + void SetScrollPositionCallback(ScrollPositionCallback&& callback) + { + scrollPositionCallback_ = std::move(callback); + } + + const ScrollPositionCallback& GetScrollPositionCallback() const + { + return scrollPositionCallback_; + } + + void SetScrollEndCallback(ScrollEndCallback&& scrollEndCallback) + { + scrollEndCallback_ = std::move(scrollEndCallback); + } + + const ScrollEndCallback& GetScrollEndCallback() const + { + return scrollEndCallback_; + } void SetGestureEvent(); void SetMouseEvent(); @@ -405,6 +419,8 @@ public: void PlayShrinkAnimation(); void PlayBarEndAnimation(); void CalcReservedHeight(); + void OnCollectTouchTarget(const OffsetF& coordinateOffset, const GetEventTargetImpl& getEventTargetImpl, + TouchTestResult& result); protected: void InitTheme(); @@ -416,6 +432,12 @@ private: void UpdateActiveRectSize(double activeSize); void UpdateActiveRectOffset(double activeMainOffset); double NormalizeToPx(const Dimension& dimension) const; + void InitPanRecognizer(); + void HandleDragStart(const GestureEvent& info); + void HandleDragUpdate(const GestureEvent& info); + void HandleDragEnd(const GestureEvent& info); + void ProcessFrictionMotion(double value); + void ProcessFrictionMotionStop(); DisplayMode displayMode_ = DisplayMode::AUTO; ShapeMode shapeMode_ = ShapeMode::RECT; @@ -447,6 +469,8 @@ private: double offsetScale_ = 1.0f; double scrollableOffset_ = 0.0; double barRegionSize_ = 0.0; + double friction_ = BAR_FRICTION; + double frictionPosition_ = 0.0; bool isScrollable_ = false; @@ -466,10 +490,15 @@ private: uint8_t opacity_ = UINT8_MAX; RefPtr touchEvent_; RefPtr mouseEvent_; + RefPtr panRecognizer_; RefPtr touchAnimator_; RefPtr scrollEndAnimator_; RefPtr adaptAnimator_; + RefPtr frictionController_; + RefPtr frictionMotion_; std::function markNeedRenderFunc_; + ScrollPositionCallback scrollPositionCallback_; + ScrollEndCallback scrollEndCallback_; }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/scroll/scroll_pattern.cpp b/frameworks/core/components_ng/pattern/scroll/scroll_pattern.cpp index 9618b61e03e..abc577f9754 100644 --- a/frameworks/core/components_ng/pattern/scroll/scroll_pattern.cpp +++ b/frameworks/core/components_ng/pattern/scroll/scroll_pattern.cpp @@ -98,10 +98,6 @@ void ScrollPattern::RegisterScrollEventTask() CHECK_NULL_VOID(scrollableEvent); auto eventHub = GetHost()->GetEventHub(); CHECK_NULL_VOID(eventHub); - auto onScrollEvent = eventHub->GetOnScrollEvent(); - if (onScrollEvent) { - scrollableEvent->SetOnScrollCallback(std::move(onScrollEvent)); - } auto scrollBeginEvent = eventHub->GetScrollBeginEvent(); if (scrollBeginEvent) { scrollableEvent->SetScrollBeginCallback(std::move(scrollBeginEvent)); @@ -210,11 +206,6 @@ bool ScrollPattern::OnScrollCallback(float offset, int32_t source) return false; } auto adjustOffset = static_cast(offset); - auto scrollBar = GetScrollBar(); - if (scrollBar && scrollBar->IsDriving()) { - adjustOffset = scrollBar->CalcPatternOffset(adjustOffset); - source = SCROLL_FROM_BAR; - } AdjustOffset(adjustOffset, source); return UpdateCurrentOffset(adjustOffset, source); } else { @@ -364,9 +355,9 @@ void ScrollPattern::ValidateOffset(int32_t source) void ScrollPattern::HandleScrollPosition(float scroll, int32_t scrollState) { - auto scrollableEvent = GetScrollableEvent(); - CHECK_NULL_VOID_NOLOG(scrollableEvent); - const auto& onScroll = scrollableEvent->GetOnScrollCallback(); + auto eventHub = GetEventHub(); + CHECK_NULL_VOID(eventHub); + auto onScroll = eventHub->GetOnScrollEvent(); CHECK_NULL_VOID_NOLOG(onScroll); // not consider async call Dimension scrollX(0, DimensionUnit::VP); diff --git a/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp b/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp index b28c30f096b..6fa707b2a17 100644 --- a/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp +++ b/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.cpp @@ -75,12 +75,6 @@ bool ScrollablePattern::OnScrollCallback(float offset, int32_t source) if (source == SCROLL_FROM_START) { return true; } - if (scrollBar_ && scrollBar_->IsDriving()) { - offset = scrollBar_->CalcPatternOffset(offset); - if (source == SCROLL_FROM_UPDATE) { - source = SCROLL_FROM_BAR; - } - } return UpdateCurrentOffset(offset, source); } @@ -152,7 +146,6 @@ void ScrollablePattern::OnScrollEnd() } } if (scrollBar_) { - scrollBar_->SetDriving(false); scrollBar_->OnScrollEnd(); } StartScrollBarAnimatorByProxy(); @@ -182,12 +175,6 @@ void ScrollablePattern::AddScrollEvent() pattern->OnScrollEndCallback(); }; scrollableEvent_->SetScrollEndCallback(std::move(scrollEnd)); - auto mouseLeftButtonScroll = [weak = WeakClaim(this)]() { - auto pattern = weak.Upgrade(); - CHECK_NULL_RETURN(pattern, false); - return pattern->IsScrollBarPressed(); - }; - scrollableEvent_->SetMouseLeftButtonScroll(std::move(mouseLeftButtonScroll)); scrollableEvent_->SetFriction(friction_); gestureHub->AddScrollableEvent(scrollableEvent_); @@ -304,8 +291,22 @@ void ScrollablePattern::RegisterScrollBarEventTask() CHECK_NULL_VOID(host); host->MarkNeedRenderOnly(); }); + auto scrollCallback = [weak = WeakClaim(this)](double offset, int32_t source) { + auto pattern = weak.Upgrade(); + CHECK_NULL_RETURN(pattern, false); + return pattern->OnScrollCallback(static_cast(offset), source); + }; + scrollBar_->SetScrollPositionCallback(std::move(scrollCallback)); + auto scrollEnd = [weak = WeakClaim(this)]() { + auto pattern = weak.Upgrade(); + CHECK_NULL_VOID(pattern); + pattern->OnScrollEndCallback(); + }; + scrollBar_->SetScrollEndCallback(std::move(scrollEnd)); gestureHub->AddTouchEvent(scrollBar_->GetTouchEvent()); inputHub->AddOnMouseEvent(scrollBar_->GetMouseEvent()); + CHECK_NULL_VOID(scrollableEvent_); + scrollableEvent_->SetScrollBar(scrollBar_); } void ScrollablePattern::SetScrollBar(DisplayMode displayMode) diff --git a/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.h b/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.h index 56cf5c7abb1..e1791831d64 100644 --- a/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.h +++ b/frameworks/core/components_ng/pattern/scrollable/scrollable_pattern.h @@ -151,14 +151,6 @@ public: scrollable->ProcessScrollSnapSpringMotion(scrollSnapDelta, scrollSnapVelocity); } - bool IsScrollBarPressed() const - { - if (scrollBar_) { - return scrollBar_->IsPressed(); - } - return false; - } - bool IsScrollableSpringEffect() const { CHECK_NULL_RETURN_NOLOG(scrollEffect_, false); @@ -274,12 +266,6 @@ protected: { return scrollBarProxy_; } - void SetScrollBarDriving(bool Driving) - { - if (scrollBar_) { - scrollBar_->SetDriving(Driving); - } - } void UpdateScrollBarRegion(float offset, float estimatedHeight, Size viewPort, Offset viewOffset); // select with mouse diff --git a/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h b/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h index 730f853ad34..0848bee63a4 100644 --- a/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h +++ b/frameworks/core/components_ng/pattern/scrollable/scrollable_properties.h @@ -84,6 +84,21 @@ struct NestedScrollOptions { } }; +constexpr int32_t SCROLL_FROM_NONE = 0; +constexpr int32_t SCROLL_FROM_UPDATE = 1; +constexpr int32_t SCROLL_FROM_ANIMATION = 2; +constexpr int32_t SCROLL_FROM_JUMP = 3; +constexpr int32_t SCROLL_FROM_ANIMATION_SPRING = 4; +constexpr int32_t SCROLL_FROM_CHILD = 5; +constexpr int32_t SCROLL_FROM_BAR = 6; +constexpr int32_t SCROLL_FROM_FOCUS_JUMP = 7; +constexpr int32_t SCROLL_FROM_ROTATE = 8; +constexpr int32_t SCROLL_FROM_INDEXER = 9; +constexpr int32_t SCROLL_FROM_START = 10; // from drag start +constexpr int32_t SCROLL_FROM_AXIS = 11; +constexpr int32_t SCROLL_FROM_ANIMATION_CONTROLLER = 12; +constexpr int32_t SCROLL_FROM_BAR_FLING = 13; + using OnScrollEvent = std::function; using OnScrollBeginEvent = std::function; using OnScrollFrameBeginEvent = std::function; @@ -91,6 +106,9 @@ using OnScrollStartEvent = std::function; using OnScrollStopEvent = std::function; using OnReachEvent = std::function; using OnScrollIndexEvent = std::function; + +using ScrollPositionCallback = std::function; +using ScrollEndCallback = std::function; } // namespace OHOS::Ace #endif diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_model_ng.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_model_ng.cpp index 3bf625863ad..b8f77ab58aa 100644 --- a/frameworks/core/components_ng/pattern/text_field/text_field_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_model_ng.cpp @@ -469,7 +469,7 @@ void TextFieldModelNG::SetShowCounter(bool value) void TextFieldModelNG::SetBarState(OHOS::Ace::DisplayMode value) { - ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, DisplayMode, value); + ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, DisplayMode, static_cast(value)); } void TextFieldModelNG::SetMaxViewLines(uint32_t value) diff --git a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp index 328912a0721..819ec6fc786 100755 --- a/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp +++ b/frameworks/core/components_ng/pattern/text_field/text_field_pattern.cpp @@ -4853,11 +4853,6 @@ bool TextFieldPattern::OnScrollCallback(float offset, int32_t source) if (source == SCROLL_FROM_START) { return true; } - auto scrollBar = GetScrollBar(); - if (scrollBar && scrollBar->IsDriving()) { - offset = scrollBar->CalcPatternOffset(offset); - source = SCROLL_FROM_BAR; - } OnTextInputScroll(offset); OnTextAreaScroll(offset); auto selectOverlayProxy = GetSelectOverlay(); diff --git a/frameworks/core/components_ng/test/event/gesture_event_hub/gesture_event_hub_test_ng.cpp b/frameworks/core/components_ng/test/event/gesture_event_hub/gesture_event_hub_test_ng.cpp index 202d0beacf7..4205d4c6bf5 100644 --- a/frameworks/core/components_ng/test/event/gesture_event_hub/gesture_event_hub_test_ng.cpp +++ b/frameworks/core/components_ng/test/event/gesture_event_hub/gesture_event_hub_test_ng.cpp @@ -148,8 +148,8 @@ HWTEST_F(GestureEventHubTestNg, GestureEventHubTest002, TestSize.Level1) TouchRestrict touchRestrict; TouchTestResult innerTargets; TouchTestResult finalResult; - auto flag = - gestureEventHub->ProcessTouchTestHit(COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID); + auto flag = gestureEventHub->ProcessTouchTestHit( + COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID, PointF()); EXPECT_FALSE(flag); auto sizeOfInnerTargets = static_cast(innerTargets.size()); auto sizeOfFinalResult = static_cast(finalResult.size()); @@ -175,7 +175,8 @@ HWTEST_F(GestureEventHubTestNg, GestureEventHubTest002, TestSize.Level1) * case: eventHub is not null && touchEventActuator_ is not null * @tc.expected: ProcessTouchTestHit return false, innerTargets & finalResult have one element */ - flag = gestureEventHub->ProcessTouchTestHit(COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID); + flag = gestureEventHub->ProcessTouchTestHit( + COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID, PointF()); EXPECT_FALSE(flag); sizeOfInnerTargets = static_cast(innerTargets.size()); sizeOfFinalResult = static_cast(finalResult.size()); @@ -253,8 +254,8 @@ HWTEST_F(GestureEventHubTestNg, GestureEventHubTest003, TestSize.Level1) TouchRestrict touchRestrict; TouchTestResult innerTargets; TouchTestResult finalResult; - auto flag = - gestureEventHub->ProcessTouchTestHit(COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID); + auto flag = gestureEventHub->ProcessTouchTestHit( + COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID, PointF()); EXPECT_FALSE(flag); auto sizeOfInnerTargets = static_cast(innerTargets.size()); auto sizeOfFinalResult = static_cast(finalResult.size()); @@ -268,7 +269,8 @@ HWTEST_F(GestureEventHubTestNg, GestureEventHubTest003, TestSize.Level1) */ auto frameNode = AceType::MakeRefPtr(NODE_TAG, -1, AceType::MakeRefPtr()); eventHub->AttachHost(frameNode); - flag = gestureEventHub->ProcessTouchTestHit(COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID); + flag = gestureEventHub->ProcessTouchTestHit( + COORDINATE_OFFSET, touchRestrict, innerTargets, finalResult, TOUCH_ID, PointF()); EXPECT_FALSE(flag); sizeOfInnerTargets = static_cast(innerTargets.size()); sizeOfFinalResult = static_cast(finalResult.size()); diff --git a/frameworks/core/components_ng/test/event/mock/mock_scrollable_event.cpp b/frameworks/core/components_ng/test/event/mock/mock_scrollable_event.cpp index 9699a2ab9fc..34032c18ca5 100644 --- a/frameworks/core/components_ng/test/event/mock/mock_scrollable_event.cpp +++ b/frameworks/core/components_ng/test/event/mock/mock_scrollable_event.cpp @@ -20,7 +20,7 @@ ScrollableActuator::ScrollableActuator(const WeakPtr& gestureEv : gestureEventHub_(gestureEventHub) {} -void ScrollableActuator::OnCollectTouchTarget(const OffsetF& coordinateOffset, const TouchRestrict& touchRestrict, +void ScrollableActuator::CollectTouchTarget(const OffsetF& coordinateOffset, const PointF& localPoint, const GetEventTargetImpl& getEventTargetImpl, TouchTestResult& result) {} diff --git a/frameworks/core/components_ng/test/mock/event/mock_gesture_event_hub.cpp b/frameworks/core/components_ng/test/mock/event/mock_gesture_event_hub.cpp index 8c275f39590..a0c8295503e 100644 --- a/frameworks/core/components_ng/test/mock/event/mock_gesture_event_hub.cpp +++ b/frameworks/core/components_ng/test/mock/event/mock_gesture_event_hub.cpp @@ -19,7 +19,7 @@ namespace OHOS::Ace::NG { GestureEventHub::GestureEventHub(const WeakPtr& eventHub) : eventHub_(eventHub) {} bool GestureEventHub::ProcessTouchTestHit(const OffsetF& coordinateOffset, const TouchRestrict& touchRestrict, - TouchTestResult& innerTargets, TouchTestResult& finalResult, int32_t touchId) + TouchTestResult& innerTargets, TouchTestResult& finalResult, int32_t touchId, const PointF& localPoint) { return false; } diff --git a/frameworks/core/components_ng/test/pattern/list/BUILD.gn b/frameworks/core/components_ng/test/pattern/list/BUILD.gn index 18cc93c63db..515919ed97b 100644 --- a/frameworks/core/components_ng/test/pattern/list/BUILD.gn +++ b/frameworks/core/components_ng/test/pattern/list/BUILD.gn @@ -30,6 +30,7 @@ common_sources = [ "$ace_root/frameworks/core/animation/chain_animation.cpp", "$ace_root/frameworks/core/animation/cubic_curve.cpp", "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", "$ace_root/frameworks/core/animation/spring_curve.cpp", "$ace_root/frameworks/core/animation/spring_model.cpp", "$ace_root/frameworks/core/animation/spring_motion.cpp", @@ -90,7 +91,7 @@ common_sources = [ "$ace_root/frameworks/core/components_ng/gestures/gesture_referee.cpp", "$ace_root/frameworks/core/components_ng/gestures/recognizers/exclusive_recognizer.cpp", "$ace_root/frameworks/core/components_ng/gestures/recognizers/gesture_recognizer.cpp", - "$ace_root/frameworks/core/components_ng/gestures/recognizers/pan_recognizer.cpp", + "$ace_root/frameworks/core/components_ng/gestures/recognizers/multi_fingers_recognizer.cpp", "$ace_root/frameworks/core/components_ng/gestures/recognizers/parallel_recognizer.cpp", "$ace_root/frameworks/core/components_ng/gestures/recognizers/recognizer_group.cpp", @@ -107,6 +108,7 @@ common_sources = [ "$ace_root/frameworks/core/components_ng/test/event/mock/mock_touch_event.cpp", "$ace_root/frameworks/core/components_ng/test/event/scrollable_event/mock_scrollable.cpp", "$ace_root/frameworks/core/components_ng/test/mock/animation/mock_geometry_transition.cpp", + "$ace_root/frameworks/core/components_ng/test/mock/gesture/recognizers/mock_pan_recognizer.cpp", "$ace_root/frameworks/core/components_ng/test/mock/image_provider/mock_image_source_info.cpp", "$ace_root/frameworks/core/components_ng/test/mock/manager/drag_drop/mock_drag_drop_proxy.cpp", "$ace_root/frameworks/core/components_ng/test/mock/pattern/grid/mock_grid_accessibility_property.cpp", diff --git a/frameworks/core/components_ng/test/pattern/list/list_test_ng.cpp b/frameworks/core/components_ng/test/pattern/list/list_test_ng.cpp index 65045ca30c0..9018498f8e5 100644 --- a/frameworks/core/components_ng/test/pattern/list/list_test_ng.cpp +++ b/frameworks/core/components_ng/test/pattern/list/list_test_ng.cpp @@ -23,6 +23,8 @@ #include "base/memory/ace_type.h" #include "base/memory/referenced.h" #include "base/utils/utils.h" +#define private public +#define protected public #include "core/components/scroll/scrollable.h" #include "core/components_ng/base/ui_node.h" #include "core/components_ng/base/view_abstract_model.h" @@ -30,8 +32,6 @@ #include "core/components_ng/base/view_stack_processor.h" #include "core/components_ng/layout/layout_property.h" #include "core/components_ng/pattern/linear_layout/row_model_ng.h" -#define private public -#define protected public #include "core/components_ng/pattern/button/button_layout_property.h" #include "core/components_ng/pattern/button/button_model_ng.h" #include "core/components_ng/pattern/button/button_pattern.h" @@ -3902,7 +3902,6 @@ HWTEST_F(ListTestNg, Pattern005, TestSize.Level1) * @tc.expected: */ ASSERT_NE(pattern_->GetScrollBar(), nullptr); - pattern_->GetScrollBar()->SetDriving(true); pattern_->OnScrollCallback(100.f, SCROLL_FROM_UPDATE); const Offset expectOffset2 = Offset(0, 100.f); IsEqualCurrentOffset(expectOffset2); @@ -3911,7 +3910,6 @@ HWTEST_F(ListTestNg, Pattern005, TestSize.Level1) * @tc.steps: step3. Offset is 0, ProcessDragUpdate do nothing. * @tc.expected: CurrentOffset unchange. */ - pattern_->GetScrollBar()->SetDriving(false); pattern_->OnScrollCallback(0, SCROLL_FROM_UPDATE); const Offset expectOffset3 = Offset(0, 100.f); IsEqualCurrentOffset(expectOffset3); diff --git a/frameworks/core/components_ng/test/pattern/scroll/scroll_test_ng.cpp b/frameworks/core/components_ng/test/pattern/scroll/scroll_test_ng.cpp index 4f8504c30aa..7168a8e3a59 100644 --- a/frameworks/core/components_ng/test/pattern/scroll/scroll_test_ng.cpp +++ b/frameworks/core/components_ng/test/pattern/scroll/scroll_test_ng.cpp @@ -1690,7 +1690,6 @@ HWTEST_F(ScrollTestNg, OnScrollCallback001, TestSize.Level1) * @tc.expected: Trigger UpdateCurrentOffset() */ CreateScroll(); - pattern_->GetScrollBar()->SetDriving(true); EXPECT_TRUE(pattern_->OnScrollCallback(100.f, SCROLL_FROM_UPDATE)); EXPECT_TRUE(IsEqualCurrentOffset(Offset(0, -100.f / pattern_->GetScrollBar()->offsetScale_))); diff --git a/frameworks/core/components_ng/test/pattern/textfield/textfield_test_ng.cpp b/frameworks/core/components_ng/test/pattern/textfield/textfield_test_ng.cpp index 6b5f001e111..bd82af6e5a2 100644 --- a/frameworks/core/components_ng/test/pattern/textfield/textfield_test_ng.cpp +++ b/frameworks/core/components_ng/test/pattern/textfield/textfield_test_ng.cpp @@ -2332,7 +2332,6 @@ HWTEST_F(TextFieldPatternTestNg, OnScrollCallback002, TestSize.Level1) const int32_t source = 0; bool ret = false; textFieldPattern->scrollBar_ = AccessibilityManager::MakeRefPtr(); - textFieldPattern->scrollBar_->SetDriving(true); /** * @tc.steps: step2. call OnScrollCallback function. @@ -2358,7 +2357,6 @@ HWTEST_F(TextFieldPatternTestNg, OnScrollCallback003, TestSize.Level1) const int32_t source = 0; bool ret = false; textFieldPattern->scrollBar_ = AccessibilityManager::MakeRefPtr(); - textFieldPattern->scrollBar_->SetDriving(false); /** * @tc.steps: step2. call OnScrollCallback function. -- Gitee