From 4d1e715c897d0fd313ba15541e45a1bc728edb75 Mon Sep 17 00:00:00 2001 From: benb365 Date: Thu, 3 Nov 2022 11:48:21 +0800 Subject: [PATCH] Add grid component scroller. Signed-off-by: benb365 --- .../declarative_frontend/jsview/js_grid.cpp | 6 +- .../jsview/models/grid_model_impl.cpp | 13 ++- .../jsview/models/grid_model_impl.h | 5 +- .../core/components_ng/pattern/BUILD.gn | 1 + .../pattern/grid/grid_event_hub.h | 3 +- .../components_ng/pattern/grid/grid_model.h | 3 +- .../pattern/grid/grid_model_ng.cpp | 14 +++- .../pattern/grid/grid_model_ng.h | 5 +- .../pattern/grid/grid_pattern.cpp | 40 +++++---- .../components_ng/pattern/grid/grid_pattern.h | 10 ++- .../pattern/grid/grid_position_controller.cpp | 84 +++++++++++++++++++ .../pattern/grid/grid_position_controller.h | 41 +++++++++ .../grid_scroll_layout_algorithm.cpp | 11 ++- .../grid_scroll_layout_algorithm.h | 1 + .../pattern/scroll/scroll_controller.h | 1 + 15 files changed, 208 insertions(+), 30 deletions(-) create mode 100644 frameworks/core/components_ng/pattern/grid/grid_position_controller.cpp create mode 100644 frameworks/core/components_ng/pattern/grid/grid_position_controller.h diff --git a/frameworks/bridge/declarative_frontend/jsview/js_grid.cpp b/frameworks/bridge/declarative_frontend/jsview/js_grid.cpp index 8f00ada4a06..6ebe6482766 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_grid.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_grid.cpp @@ -61,12 +61,12 @@ const std::vector LAYOUT_DIRECTION = { FlexDirection::ROW, FlexDi void JSGrid::Create(const JSCallbackInfo& info) { - RefPtr positionController; + RefPtr positionController; RefPtr scrollBarProxy; if (info.Length() > 0 && info[0]->IsObject()) { JSScroller* jsScroller = JSRef::Cast(info[0])->Unwrap(); if (jsScroller) { - positionController = AceType::MakeRefPtr(); + positionController = GridModel::GetInstance()->CreatePositionController(); jsScroller->SetController(positionController); // Init scroll bar proxy. @@ -158,7 +158,7 @@ void JSGrid::JsGridHeight(const JSCallbackInfo& info) void JSGrid::JsOnScrollIndex(const JSCallbackInfo& info) { - if (info[0]->IsFunction()) { + if (!info[0]->IsFunction()) { LOGE("param not valid, need function"); return; } diff --git a/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.cpp index 539ede526de..b7db1d90161 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.cpp @@ -15,6 +15,7 @@ #include "bridge/declarative_frontend/jsview/models/grid_model_impl.h" +#include "base/memory/ace_type.h" #include "base/utils/utils.h" #include "bridge/declarative_frontend/jsview/js_container_base.h" #include "bridge/declarative_frontend/jsview/js_interactable_view.h" @@ -26,15 +27,16 @@ namespace OHOS::Ace::Framework { void GridModelImpl::Create( - const RefPtr& positionController, const RefPtr& scrollBarProxy) + const RefPtr& positionController, const RefPtr& scrollBarProxy) { + auto controller = AceType::DynamicCast(positionController); std::list> componentChildren; RefPtr gridComponent = AceType::MakeRefPtr(componentChildren); ViewStackProcessor::GetInstance()->ClaimElementId(gridComponent); gridComponent->SetDeclarative(); gridComponent->SetNeedShrink(true); - if (positionController) { - gridComponent->SetController(positionController); + if (controller) { + gridComponent->SetController(controller); } if (scrollBarProxy) { gridComponent->SetScrollBarProxy(scrollBarProxy); @@ -255,4 +257,9 @@ void GridModelImpl::SetOnItemDrop(std::functionSetOnGridDropId(value); } +RefPtr GridModelImpl::CreatePositionController() +{ + return AceType::MakeRefPtr(); +} + } // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.h index 0a8b9edca38..1e625cd1b49 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/grid_model_impl.h @@ -23,8 +23,8 @@ namespace OHOS::Ace::Framework { class GridModelImpl : public OHOS::Ace::GridModel { public: - void Create(const RefPtr& positionController, - const RefPtr& scrollBarProxy) override; + void Create( + const RefPtr& positionController, const RefPtr& scrollBarProxy) override; void Pop() override; void SetColumnsTemplate(const std::string& value) override; void SetRowsTemplate(const std::string& value) override; @@ -51,6 +51,7 @@ public: void SetOnItemDragMove(std::function&& value) override; void SetOnItemDragLeave(std::function&& value) override; void SetOnItemDrop(std::function&& value) override; + RefPtr CreatePositionController() override; }; } // namespace OHOS::Ace::Framework diff --git a/frameworks/core/components_ng/pattern/BUILD.gn b/frameworks/core/components_ng/pattern/BUILD.gn index 4227a733e25..a2b2e79c05e 100644 --- a/frameworks/core/components_ng/pattern/BUILD.gn +++ b/frameworks/core/components_ng/pattern/BUILD.gn @@ -90,6 +90,7 @@ build_component_ng("pattern_ng") { "grid/grid_layout_property.cpp", "grid/grid_model_ng.cpp", "grid/grid_pattern.cpp", + "grid/grid_position_controller.cpp", "grid/grid_scroll/grid_scroll_layout_algorithm.cpp", "grid/grid_utils.cpp", "grid_col/grid_col_layout_algorithm.cpp", diff --git a/frameworks/core/components_ng/pattern/grid/grid_event_hub.h b/frameworks/core/components_ng/pattern/grid/grid_event_hub.h index 38a8db21f3f..06d40479444 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_event_hub.h +++ b/frameworks/core/components_ng/pattern/grid/grid_event_hub.h @@ -72,7 +72,8 @@ public: void FireOnScrollToIndex(int32_t param) const { if (onScrollToIndex_) { - onScrollToIndex_(std::make_shared(param).get()); + V2::GridEventInfo info(param); + onScrollToIndex_(&info); } } diff --git a/frameworks/core/components_ng/pattern/grid/grid_model.h b/frameworks/core/components_ng/pattern/grid/grid_model.h index 79b801f851b..ec74f9669e0 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_model.h +++ b/frameworks/core/components_ng/pattern/grid/grid_model.h @@ -34,7 +34,7 @@ public: virtual ~GridModel() = default; virtual void Create( - const RefPtr& positionController, const RefPtr& scrollBarProxy) = 0; + const RefPtr& positionController, const RefPtr& scrollBarProxy) = 0; virtual void Pop() = 0; virtual void SetColumnsTemplate(const std::string& value) = 0; virtual void SetRowsTemplate(const std::string& value) = 0; @@ -61,6 +61,7 @@ public: virtual void SetOnItemDragMove(std::function&& value) = 0; virtual void SetOnItemDragLeave(std::function&& value) = 0; virtual void SetOnItemDrop(std::function&& value) = 0; + virtual RefPtr CreatePositionController(); private: static std::unique_ptr instance_; diff --git a/frameworks/core/components_ng/pattern/grid/grid_model_ng.cpp b/frameworks/core/components_ng/pattern/grid/grid_model_ng.cpp index 28f9a6b527b..7bfa803df43 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/grid/grid_model_ng.cpp @@ -25,19 +25,26 @@ #include "core/components_ng/pattern/grid/grid_event_hub.h" #include "core/components_ng/pattern/grid/grid_layout_property.h" #include "core/components_ng/pattern/grid/grid_pattern.h" +#include "core/components_ng/pattern/grid/grid_position_controller.h" #include "core/components_v2/inspector/inspector_constants.h" #include "core/pipeline_ng/pipeline_context.h" namespace OHOS::Ace::NG { void GridModelNG::Create( - const RefPtr& /*positionController*/, const RefPtr& /*scrollBarProxy*/) + const RefPtr& positionController, const RefPtr& scrollBarProxy) { auto* stack = ViewStackProcessor::GetInstance(); auto nodeId = stack->ClaimNodeId(); auto frameNode = FrameNode::GetOrCreateFrameNode(V2::GRID_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); stack->Push(frameNode); + if (positionController) { + auto pattern = frameNode->GetPattern(); + CHECK_NULL_VOID(pattern); + auto controller = AceType::DynamicCast(positionController); + pattern->SetPositionController(controller); + } } void GridModelNG::Pop() @@ -250,4 +257,9 @@ bool GridModelNG::CheckTemplate(const std::string& value) return std::all_of(strs.begin(), strs.end(), [reg](const std::string& str) { return std::regex_match(str, reg); }); } +RefPtr GridModelNG::CreatePositionController() +{ + return AceType::MakeRefPtr(); +} + } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/grid/grid_model_ng.h b/frameworks/core/components_ng/pattern/grid/grid_model_ng.h index efc99da7282..38e44b36a59 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_model_ng.h +++ b/frameworks/core/components_ng/pattern/grid/grid_model_ng.h @@ -29,8 +29,8 @@ namespace OHOS::Ace::NG { class ACE_EXPORT GridModelNG : public OHOS::Ace::GridModel { public: - void Create(const RefPtr& positionController, - const RefPtr& scrollBarProxy) override; + void Create( + const RefPtr& positionController, const RefPtr& scrollBarProxy) override; void Pop() override; void SetColumnsTemplate(const std::string& value) override; void SetRowsTemplate(const std::string& value) override; @@ -57,6 +57,7 @@ public: void SetOnItemDragMove(ItemDragMoveFunc&& value) override; void SetOnItemDragLeave(ItemDragLeaveFunc&& value) override; void SetOnItemDrop(ItemDropFunc&& value) override; + RefPtr CreatePositionController() override; private: void AddDragFrameNodeToManager() const; diff --git a/frameworks/core/components_ng/pattern/grid/grid_pattern.cpp b/frameworks/core/components_ng/pattern/grid/grid_pattern.cpp index 02d0e75de32..73494e4744c 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_pattern.cpp +++ b/frameworks/core/components_ng/pattern/grid/grid_pattern.cpp @@ -15,6 +15,7 @@ #include "core/components_ng/pattern/grid/grid_pattern.h" +#include "base/geometry/axis.h" #include "core/components_ng/pattern/grid/grid_adaptive/grid_adaptive_layout_algorithm.h" #include "core/components_ng/pattern/grid/grid_item_pattern.h" #include "core/components_ng/pattern/grid/grid_layout/grid_layout_algorithm.h" @@ -402,21 +403,8 @@ bool GridPattern::OnKeyEvent(const KeyEvent& event) if (event.action != KeyAction::DOWN) { return false; } - if (event.code == KeyCode::KEY_PAGE_DOWN) { - if (!isConfigScrollable_) { - return false; - } - LOGD("Keycode is PgDn. Scroll offset is %{public}f", -GetMainContentSize()); - UpdateScrollPosition(-GetMainContentSize(), SCROLL_FROM_UPDATE); - return true; - } - if (event.code == KeyCode::KEY_PAGE_UP) { - if (!isConfigScrollable_) { - return false; - } - LOGD("Keycode is PgUp. Scroll offset is %{public}f", GetMainContentSize()); - UpdateScrollPosition(GetMainContentSize(), SCROLL_FROM_UPDATE); - return true; + if ((event.code == KeyCode::KEY_PAGE_DOWN) || (event.code == KeyCode::KEY_PAGE_UP)) { + ScrollPage(event.code == KeyCode::KEY_PAGE_UP); } if (event.code == KeyCode::KEY_DPAD_UP || event.code == KeyCode::KEY_DPAD_DOWN) { HandleDirectionKey(event.code); @@ -438,4 +426,26 @@ bool GridPattern::HandleDirectionKey(KeyCode code) return false; } +void GridPattern::SetPositionController(const RefPtr& controller) +{ + positionController_ = DynamicCast(controller); + if (controller) { + controller->SetScrollPattern(AceType::WeakClaim(this)); + } +} + +void GridPattern::ScrollPage(bool reverse) +{ + if (!isConfigScrollable_) { + return; + } + if (!reverse) { + LOGD("PgDn. Scroll offset is %{public}f", -GetMainContentSize()); + UpdateScrollPosition(-GetMainContentSize(), SCROLL_FROM_UPDATE); + } else { + LOGD("PgUp. Scroll offset is %{public}f", GetMainContentSize()); + UpdateScrollPosition(GetMainContentSize(), SCROLL_FROM_UPDATE); + } +} + } // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/grid/grid_pattern.h b/frameworks/core/components_ng/pattern/grid/grid_pattern.h index 8c5d33eb209..7e4f05762c6 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_pattern.h +++ b/frameworks/core/components_ng/pattern/grid/grid_pattern.h @@ -16,10 +16,12 @@ #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_GRID_GRID_PATTERN_H #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_GRID_GRID_PATTERN_H +#include "base/geometry/axis.h" #include "base/memory/referenced.h" #include "core/components_ng/pattern/grid/grid_event_hub.h" #include "core/components_ng/pattern/grid/grid_layout_info.h" #include "core/components_ng/pattern/grid/grid_layout_property.h" +#include "core/components_ng/pattern/grid/grid_position_controller.h" #include "core/components_ng/pattern/pattern.h" namespace OHOS::Ace::NG { @@ -103,12 +105,17 @@ public: void OnMouseSelectAll(); + bool UpdateScrollPosition(float offset, int32_t source); + + void SetPositionController(const RefPtr& controller); + + void ScrollPage(bool reverse); + private: void OnAttachToFrameNode() override; void OnModifyDone() override; float GetMainContentSize() const; void AddScrollEvent(); - bool UpdateScrollPosition(float offset, int32_t source); bool OnDirtyLayoutWrapperSwap(const RefPtr& dirty, const DirtySwapConfig& config) override; WeakPtr GetNextFocusNode(FocusStep step, const WeakPtr& currentFocusNode); void InitOnKeyEvent(const RefPtr& focusHub); @@ -123,6 +130,7 @@ private: GridLayoutInfo gridLayoutInfo_; RefPtr scrollableEvent_; + RefPtr positionController_; bool multiSelectable_ = false; bool supportAnimation_ = false; diff --git a/frameworks/core/components_ng/pattern/grid/grid_position_controller.cpp b/frameworks/core/components_ng/pattern/grid/grid_position_controller.cpp new file mode 100644 index 00000000000..e5c04689a02 --- /dev/null +++ b/frameworks/core/components_ng/pattern/grid/grid_position_controller.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components_ng/pattern/grid/grid_position_controller.h" + +#include "base/geometry/axis.h" +#include "base/utils/utils.h" +#include "core/components_ng/pattern/grid/grid_pattern.h" +#include "core/pipeline/pipeline_base.h" + +namespace OHOS::Ace::NG { + +void GridPositionController::JumpTo(int32_t index, int32_t source) {} + +bool GridPositionController::AnimateTo(const Dimension& position, float duration, const RefPtr& curve) +{ + return false; +} + +void GridPositionController::ScrollBy(double pixelX, double pixelY, bool smooth) +{ + auto pattern = scroll_.Upgrade(); + CHECK_NULL_VOID(pattern); + auto gridPattern = AceType::DynamicCast(pattern); + if (gridPattern->GetGridLayoutInfo().axis_ == Axis::VERTICAL) { + gridPattern->UpdateScrollPosition(static_cast(-pixelY), SCROLL_FROM_UPDATE); + } else { + gridPattern->UpdateScrollPosition(static_cast(-pixelX), SCROLL_FROM_UPDATE); + } +} + +Axis GridPositionController::GetScrollDirection() const +{ + auto pattern = scroll_.Upgrade(); + CHECK_NULL_RETURN(pattern, Axis::NONE); + auto gridPattern = AceType::DynamicCast(pattern); + if (gridPattern) { + return gridPattern->GetGridLayoutInfo().axis_; + } + return Axis::VERTICAL; +} + +void GridPositionController::ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth) {} + +void GridPositionController::ScrollPage(bool reverse, bool smooth) +{ + auto pattern = scroll_.Upgrade(); + CHECK_NULL_VOID(pattern); + auto gridPattern = AceType::DynamicCast(pattern); + if (gridPattern->GetGridLayoutInfo().axis_ != Axis::NONE) { + gridPattern->ScrollPage(reverse); + } +} + +Offset GridPositionController::GetCurrentOffset() const +{ + auto pattern = scroll_.Upgrade(); + CHECK_NULL_RETURN(pattern, Offset::Zero()); + auto gridPattern = AceType::DynamicCast(pattern); + auto axis = gridPattern->GetGridLayoutInfo().axis_; + if (axis == Axis::NONE) { + return Offset::Zero(); + } + + auto pxOffset = gridPattern->GetGridLayoutInfo().currentOffset_; + auto pipeline = PipelineBase::GetCurrentContext(); + CHECK_NULL_RETURN(pipeline, Offset::Zero()); + auto vpOffset = Dimension(pxOffset, DimensionUnit::PX).ConvertToVp(); + return (axis == Axis::HORIZONTAL) ? Offset(vpOffset, 0) : Offset(0, vpOffset); +} + +} // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/grid/grid_position_controller.h b/frameworks/core/components_ng/pattern/grid/grid_position_controller.h new file mode 100644 index 00000000000..2b472db93e3 --- /dev/null +++ b/frameworks/core/components_ng/pattern/grid/grid_position_controller.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_GRID_GRID_POSITION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_GRID_GRID_POSITION_CONTROLLER_H + +#include "core/components_ng/pattern/scroll/scroll_controller.h" + +namespace OHOS::Ace::NG { + +class ACE_EXPORT GridPositionController : public ScrollController { + DECLARE_ACE_TYPE(GridPositionController, ScrollController); + +public: + GridPositionController() = default; + ~GridPositionController() override = default; + + Axis GetScrollDirection() const override; + Offset GetCurrentOffset() const override; + void ScrollBy(double pixelX, double pixelY, bool smooth) override; + void ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth) override; + void ScrollPage(bool reverse, bool smooth) override; + void JumpTo(int32_t index, int32_t source) override; + bool AnimateTo(const Dimension& position, float duration, const RefPtr& curve) override; +}; + +} // namespace OHOS::Ace::NG + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_GRID_GRID_POSITION_CONTROLLER_H diff --git a/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.cpp index 98407b77d7a..01da930cd5b 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.cpp @@ -25,12 +25,12 @@ #include "base/utils/utils.h" #include "core/components/common/properties/alignment.h" #include "core/components_ng/base/frame_node.h" +#include "core/components_ng/pattern/grid/grid_event_hub.h" #include "core/components_ng/pattern/grid/grid_item_pattern.h" #include "core/components_ng/pattern/grid/grid_utils.h" #include "core/components_ng/pattern/pattern.h" #include "core/components_ng/property/layout_constraint.h" #include "core/components_ng/property/measure_utils.h" - namespace OHOS::Ace::NG { void GridScrollLayoutAlgorithm::Measure(LayoutWrapper* layoutWrapper) @@ -277,6 +277,7 @@ void GridScrollLayoutAlgorithm::MeasureRecordedItems(float mainSize, float cross gridLayoutInfo_.currentOffset_ = mainLength; gridLayoutInfo_.startMainLineIndex_ = currentMainLineIndex_ + 1; gridLayoutInfo_.startIndex_ = currentIndex + 1; + FireScrollingEvent(layoutWrapper); } } // Case 1. if this while-loop breaks due to running out of records, the [currentMainLineIndex_] is larger by 1 than @@ -323,6 +324,7 @@ float GridScrollLayoutAlgorithm::FillNewLineForward( auto itemSize = itemWrapper->GetGeometryNode()->GetMarginFrameSize(); lineHeight = std::max(GetMainAxisSize(itemSize, gridLayoutInfo_.axis_), lineHeight); gridLayoutInfo_.startIndex_ = currentIndex; + FireScrollingEvent(layoutWrapper); doneCreateNewLine = true; } // If it fails to create new line when [FillNewLineForward] is called, it means that it reaches start @@ -585,6 +587,13 @@ float GridScrollLayoutAlgorithm::ComputeItemCrossPosition(LayoutWrapper* layoutW return position; } +void GridScrollLayoutAlgorithm::FireScrollingEvent(LayoutWrapper* layoutWrapper) +{ + auto eventhub = layoutWrapper->GetHostNode()->GetEventHub(); + CHECK_NULL_VOID(eventhub); + eventhub->FireOnScrollToIndex(gridLayoutInfo_.startMainLineIndex_); +} + // only for debug use void GridScrollLayoutAlgorithm::PrintGridMatrix(const std::map>& gridMatrix) { diff --git a/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.h b/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.h index 04b5106d5bc..009ca3879fc 100644 --- a/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.h +++ b/frameworks/core/components_ng/pattern/grid/grid_scroll/grid_scroll_layout_algorithm.h @@ -76,6 +76,7 @@ private: void StripItemsOutOfViewport(LayoutWrapper* layoutWrapper); void ModifyCurrentOffsetWhenReachEnd(float mainSize); void InitialItemsCrossSize(const RefPtr& layoutProperty, const SizeF& frameSize); + void FireScrollingEvent(LayoutWrapper* layoutWrapper); uint32_t crossCount_ = 0; uint32_t mainCount_ = 0; diff --git a/frameworks/core/components_ng/pattern/scroll/scroll_controller.h b/frameworks/core/components_ng/pattern/scroll/scroll_controller.h index ab9f1953fc6..20f30168d56 100644 --- a/frameworks/core/components_ng/pattern/scroll/scroll_controller.h +++ b/frameworks/core/components_ng/pattern/scroll/scroll_controller.h @@ -23,6 +23,7 @@ namespace OHOS::Ace::NG { class ACE_EXPORT ScrollController : public ScrollControllerBase { DECLARE_ACE_TYPE(ScrollController, ScrollControllerBase); + public: ScrollController() = default; -- Gitee