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_ng/event/event_hub.h" 21 #include "core/components_ng/event/gesture_event_hub.h" 22 #include "core/components_ng/pattern/scrollable/scrollable_properties.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 ScrollEvent = std::function<void(Dimension, Dimension)>; 41 using ScrollEdgeEvent = std::function<void(ScrollEdge)>; 42 using ScrollEndEvent = std::function<void()>; 43 44 class ScrollEventHub : public EventHub { 45 DECLARE_ACE_TYPE(ScrollEventHub, EventHub) 46 47 public: 48 ScrollEventHub() = default; 49 ~ScrollEventHub() override = default; 50 GetOnScrollEvent()51 const ScrollEvent& GetOnScrollEvent() 52 { 53 return onScroll_; 54 } 55 SetOnScroll(ScrollEvent && onScroll)56 void SetOnScroll(ScrollEvent&& onScroll) 57 { 58 onScroll_ = std::move(onScroll); 59 } 60 GetScrollEdgeEvent()61 const ScrollEdgeEvent& GetScrollEdgeEvent() 62 { 63 return onScrollEdge_; 64 } 65 SetOnScrollEdge(ScrollEdgeEvent && event)66 void SetOnScrollEdge(ScrollEdgeEvent&& event) 67 { 68 onScrollEdge_ = std::move(event); 69 } 70 GetScrollEndEvent()71 const ScrollEndEvent& GetScrollEndEvent() 72 { 73 return onScrollEnd_; 74 } 75 SetOnScrollEnd(ScrollEndEvent && event)76 void SetOnScrollEnd(ScrollEndEvent&& event) 77 { 78 onScrollEnd_ = std::move(event); 79 } 80 GetScrollStartEvent()81 const OnScrollStartEvent& GetScrollStartEvent() 82 { 83 return onScrollStart_; 84 } 85 SetOnScrollStart(OnScrollStartEvent && event)86 void SetOnScrollStart(OnScrollStartEvent&& event) 87 { 88 onScrollStart_ = std::move(event); 89 } 90 GetScrollStopEvent()91 const OnScrollStopEvent& GetScrollStopEvent() 92 { 93 return onScrollStop_; 94 } 95 SetOnScrollStop(OnScrollStopEvent && event)96 void SetOnScrollStop(OnScrollStopEvent&& event) 97 { 98 onScrollStop_ = std::move(event); 99 } 100 GetScrollBeginEvent()101 const OnScrollBeginEvent& GetScrollBeginEvent() 102 { 103 return onScrollBegin_; 104 } 105 SetOnScrollBegin(OnScrollBeginEvent && event)106 void SetOnScrollBegin(OnScrollBeginEvent&& event) 107 { 108 onScrollBegin_ = std::move(event); 109 } 110 GetScrollFrameBeginEvent()111 const OnScrollFrameBeginEvent& GetScrollFrameBeginEvent() 112 { 113 return onScrollFrameBegin_; 114 } 115 SetOnScrollFrameBegin(OnScrollFrameBeginEvent && event)116 void SetOnScrollFrameBegin(OnScrollFrameBeginEvent&& event) 117 { 118 onScrollFrameBegin_ = std::move(event); 119 } 120 121 private: 122 ScrollEvent onScroll_; 123 OnScrollBeginEvent onScrollBegin_; 124 OnScrollFrameBeginEvent onScrollFrameBegin_; 125 ScrollEndEvent onScrollEnd_; 126 OnScrollStartEvent onScrollStart_; 127 OnScrollStopEvent onScrollStop_; 128 ScrollEdgeEvent onScrollEdge_; 129 130 ACE_DISALLOW_COPY_AND_MOVE(ScrollEventHub); 131 }; 132 133 } // namespace OHOS::Ace::NG 134 135 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SCROLL_SCROLL_EVENT_HUB_H