1 /*
2  * Copyright (c) 2023 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_PATTERN_WATERFLOW_WATER_FLOW_PAINT_METHOD_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WATERFLOW_WATER_FLOW_PAINT_METHOD_H
18 
19 #include "core/components_ng/pattern/scroll/inner/scroll_bar.h"
20 #include "core/components_ng/pattern/scroll/scroll_edge_effect.h"
21 #include "core/components_ng/pattern/scrollable/scrollable_paint_method.h"
22 #include "core/components_ng/pattern/waterflow/water_flow_content_modifier.h"
23 
24 namespace OHOS::Ace::NG {
25 class ACE_EXPORT WaterFlowPaintMethod : public ScrollablePaintMethod {
26     DECLARE_ACE_TYPE(WaterFlowPaintMethod, ScrollablePaintMethod)
27 public:
28     WaterFlowPaintMethod() = default;
WaterFlowPaintMethod(bool vertical,bool isReverse,bool isVerticalReverse)29     WaterFlowPaintMethod(bool vertical, bool isReverse, bool isVerticalReverse)
30         : ScrollablePaintMethod(vertical, isReverse, isVerticalReverse)
31     {}
32     ~WaterFlowPaintMethod() override = default;
33 
34     CanvasDrawFunction GetForegroundDrawFunction(PaintWrapper* paintWrapper) override;
35 
GetContentModifier(PaintWrapper * paintWrapper)36     RefPtr<Modifier> GetContentModifier(PaintWrapper* paintWrapper) override
37     {
38         return contentModifier_;
39     }
40 
41     void UpdateContentModifier(PaintWrapper* paintWrapper) override;
42 
43     void PaintEdgeEffect(PaintWrapper* paintWrapper, RSCanvas& canvas);
44 
SetScrollBar(WeakPtr<ScrollBar> && scrollBar)45     void SetScrollBar(WeakPtr<ScrollBar>&& scrollBar)
46     {
47         scrollBar_ = scrollBar;
48     }
49 
SetEdgeEffect(WeakPtr<ScrollEdgeEffect> && edgeEffect)50     void SetEdgeEffect(WeakPtr<ScrollEdgeEffect>&& edgeEffect)
51     {
52         edgeEffect_ = edgeEffect;
53     }
54 
SetContentModifier(const RefPtr<WaterFlowContentModifier> & modify)55     void SetContentModifier(const RefPtr<WaterFlowContentModifier>& modify)
56     {
57         contentModifier_ = modify;
58     }
59 
SetScrollBarOverlayModifier(WeakPtr<ScrollBarOverlayModifier> && scrollBarOverlayModifier)60     void SetScrollBarOverlayModifier(WeakPtr<ScrollBarOverlayModifier>&& scrollBarOverlayModifier)
61     {
62         scrollBarOverlayModifier_ = scrollBarOverlayModifier;
63     }
64 
GetOverlayModifier(PaintWrapper * paintWrapper)65     RefPtr<Modifier> GetOverlayModifier(PaintWrapper* paintWrapper) override
66     {
67         return scrollBarOverlayModifier_.Upgrade();
68     }
69 
70     void UpdateOverlayModifier(PaintWrapper* paintWrapper) override;
71 
72 private:
73     RefPtr<WaterFlowContentModifier> contentModifier_;
74     WeakPtr<ScrollBar> scrollBar_;
75     WeakPtr<ScrollEdgeEffect> edgeEffect_;
76     WeakPtr<ScrollBarOverlayModifier> scrollBarOverlayModifier_;
77 };
78 } // namespace OHOS::Ace::NG
79 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WATERFLOW_WATER_FLOW_PAINT_METHOD_H