1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SCROLL_SCROLL_EVENT_HUB_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SCROLL_SCROLL_EVENT_HUB_H 18 19 #include "base/memory/ace_type.h" 20 #include "core/components/scroll/scrollable.h" 21 #include "core/components_ng/event/event_hub.h" 22 #include "core/components_ng/event/gesture_event_hub.h" 23 24 namespace OHOS::Ace::NG { 25 26 enum class ScrollEventType { 27 SCROLL_TOP = 0, 28 SCROLL_END, 29 SCROLL_EDGE, 30 }; 31 32 // which edge is reached 33 enum class ScrollEdge { 34 TOP = 0, 35 LEFT, 36 BOTTOM, 37 RIGHT, 38 }; 39 40 using OnScrollEvent = std::function<void(Dimension, Dimension)>; 41 using ScrollBeginEvent = std::function<ScrollInfo(Dimension, Dimension)>; 42 using ScrollFrameBeginEvent = std::function<ScrollFrameResult(Dimension, ScrollState)>; 43 using ScrollEdgeEvent = std::function<void(ScrollEdge)>; 44 using ScrollEndEvent = std::function<void()>; 45 using ScrollStartEvent = std::function<void()>; 46 using ScrollStopEvent = std::function<void()>; 47 48 class ScrollEventHub : public EventHub { 49 DECLARE_ACE_TYPE(ScrollEventHub, EventHub) 50 51 public: 52 ScrollEventHub() = default; 53 ~ScrollEventHub() override = default; 54 GetOnScrollEvent()55 const OnScrollEvent& GetOnScrollEvent() 56 { 57 return onScroll_; 58 } 59 SetOnScroll(OnScrollEvent && onScroll)60 void SetOnScroll(OnScrollEvent&& onScroll) 61 { 62 onScroll_ = std::move(onScroll); 63 } 64 GetScrollEdgeEvent()65 const ScrollEdgeEvent& GetScrollEdgeEvent() 66 { 67 return onScrollEdge_; 68 } 69 SetOnScrollEdge(ScrollEdgeEvent && event)70 void SetOnScrollEdge(ScrollEdgeEvent&& event) 71 { 72 onScrollEdge_ = std::move(event); 73 } 74 GetScrollEndEvent()75 const ScrollEndEvent& GetScrollEndEvent() 76 { 77 return onScrollEnd_; 78 } 79 SetOnScrollEnd(ScrollEndEvent && event)80 void SetOnScrollEnd(ScrollEndEvent&& event) 81 { 82 onScrollEnd_ = std::move(event); 83 } 84 GetScrollStartEvent()85 const ScrollStartEvent& GetScrollStartEvent() 86 { 87 return onScrollStart_; 88 } 89 SetOnScrollStart(ScrollStartEvent && event)90 void SetOnScrollStart(ScrollStartEvent&& event) 91 { 92 onScrollStart_ = std::move(event); 93 } 94 GetScrollStopEvent()95 const ScrollStopEvent& GetScrollStopEvent() 96 { 97 return onScrollStop_; 98 } 99 SetOnScrollStop(ScrollStopEvent && event)100 void SetOnScrollStop(ScrollStopEvent&& event) 101 { 102 onScrollStop_ = std::move(event); 103 } 104 GetScrollBeginEvent()105 const ScrollBeginEvent& GetScrollBeginEvent() 106 { 107 return onScrollBegin_; 108 } 109 SetOnScrollBegin(ScrollBeginEvent && event)110 void SetOnScrollBegin(ScrollBeginEvent&& event) 111 { 112 onScrollBegin_ = std::move(event); 113 } 114 GetScrollFrameBeginEvent()115 const ScrollFrameBeginEvent& GetScrollFrameBeginEvent() 116 { 117 return onScrollFrameBegin_; 118 } 119 SetOnScrollFrameBegin(ScrollFrameBeginEvent && event)120 void SetOnScrollFrameBegin(ScrollFrameBeginEvent&& event) 121 { 122 onScrollFrameBegin_ = std::move(event); 123 } 124 125 private: 126 OnScrollEvent onScroll_; 127 ScrollBeginEvent onScrollBegin_; 128 ScrollFrameBeginEvent onScrollFrameBegin_; 129 ScrollEndEvent onScrollEnd_; 130 ScrollStartEvent onScrollStart_; 131 ScrollStopEvent onScrollStop_; 132 ScrollEdgeEvent onScrollEdge_; 133 134 ACE_DISALLOW_COPY_AND_MOVE(ScrollEventHub); 135 }; 136 137 } // namespace OHOS::Ace::NG 138 139 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SCROLL_SCROLL_EVENT_HUB_H