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_BAR_SCROLL_BAR_PATTERN_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SCROLL_BAR_SCROLL_BAR_PATTERN_H 18 19 #include "core/components/common/layout/constants.h" 20 #include "core/components_ng/pattern/pattern.h" 21 #include "core/components_ng/pattern/scroll/inner/scroll_bar.h" 22 #include "core/components_ng/pattern/scroll/scroll_event_hub.h" 23 #include "core/components_ng/pattern/scroll_bar/scroll_bar_layout_algorithm.h" 24 #include "core/components_ng/pattern/scroll_bar/scroll_bar_layout_property.h" 25 #include "core/components_ng/pattern/scroll_bar/proxy/scroll_bar_proxy.h" 26 27 namespace OHOS::Ace::NG { 28 29 class ScrollBarPattern : public Pattern { 30 DECLARE_ACE_TYPE(ScrollBarPattern, Pattern); 31 32 public: 33 ScrollBarPattern() = default; ~ScrollBarPattern()34 ~ScrollBarPattern() override 35 { 36 scrollEndAnimator_ = nullptr; 37 scrollBarProxy_ = nullptr; 38 scrollableEvent_ = nullptr; 39 } 40 IsAtomicNode()41 bool IsAtomicNode() const override 42 { 43 return false; 44 } 45 CreateLayoutProperty()46 RefPtr<LayoutProperty> CreateLayoutProperty() override 47 { 48 return MakeRefPtr<ScrollBarLayoutProperty>(); 49 } 50 CreateLayoutAlgorithm()51 RefPtr<LayoutAlgorithm> CreateLayoutAlgorithm() override 52 { 53 auto layoutAlgorithm = MakeRefPtr<ScrollBarLayoutAlgorithm>(currentOffset_); 54 return layoutAlgorithm; 55 } 56 CreateEventHub()57 RefPtr<EventHub> CreateEventHub() override 58 { 59 return MakeRefPtr<ScrollEventHub>(); 60 } 61 GetCurrentPosition()62 float GetCurrentPosition() const 63 { 64 return currentOffset_; 65 } 66 SetCurrentPosition(float currentOffset)67 void SetCurrentPosition(float currentOffset) 68 { 69 currentOffset_ = currentOffset; 70 } 71 GetAxis()72 Axis GetAxis() const 73 { 74 return axis_; 75 } 76 GetScrollableDistance()77 float GetScrollableDistance() const 78 { 79 return scrollableDistance_; 80 } 81 SetScrollBarProxy(const RefPtr<ScrollBarProxy> & scrollBarProxy)82 void SetScrollBarProxy(const RefPtr<ScrollBarProxy>& scrollBarProxy) 83 { 84 scrollBarProxy_ = scrollBarProxy; 85 } 86 GetDisplayMode()87 const DisplayMode& GetDisplayMode() const 88 { 89 return displayMode_; 90 } 91 GetControlDistance()92 float GetControlDistance() const 93 { 94 return controlDistance_; 95 } 96 SetControlDistance(float controlDistance)97 void SetControlDistance(float controlDistance) 98 { 99 controlDistance_ = controlDistance; 100 } 101 GetScrollOffset()102 float GetScrollOffset() const 103 { 104 return scrollOffset_; 105 } 106 SetScrollOffset(float scrollOffset)107 void SetScrollOffset(float scrollOffset) 108 { 109 scrollOffset_ = scrollOffset; 110 } 111 112 bool IsAtTop() const; 113 bool IsAtBottom() const; 114 bool UpdateCurrentOffset(float offset, int32_t source); 115 116 // disappear Animator 117 void StartAnimator(); 118 void StopAnimator(); 119 void SetOpacity(uint8_t value); 120 121 private: 122 void OnModifyDone() override; 123 void OnAttachToFrameNode() override; 124 bool OnDirtyLayoutWrapperSwap(const RefPtr<LayoutWrapper>& dirty, const DirtySwapConfig& config) override; 125 void ValidateOffset(int32_t source); 126 127 RefPtr<Animator> scrollEndAnimator_; 128 RefPtr<ScrollBarProxy> scrollBarProxy_; 129 RefPtr<ScrollableEvent> scrollableEvent_; 130 Axis axis_ = Axis::VERTICAL; 131 DisplayMode displayMode_ { DisplayMode::AUTO }; 132 float currentOffset_ = 0.0f; 133 float lastOffset_ = 0.0f; 134 float scrollableDistance_ = 0.0f; 135 float controlDistance_ = 0.0f; 136 float scrollOffset_ = 0.0f; 137 }; 138 139 } // namespace OHOS::Ace::NG 140 141 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SCROLL_BAR_SCROLL_BAR_PATTERN_H 142