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_PATTERN_LIST_LIST_PAINT_METHOD_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_LIST_LIST_PAINT_METHOD_H 18 19 #include "core/components_ng/pattern/list/list_content_modifier.h" 20 #include "core/components_ng/pattern/scroll/inner/scroll_bar.h" 21 #include "core/components_ng/pattern/scroll/scroll_edge_effect.h" 22 #include "core/components_ng/render/node_paint_method.h" 23 #include "core/components_v2/list/list_properties.h" 24 25 namespace OHOS::Ace::NG { 26 class ACE_EXPORT ListPaintMethod : public NodePaintMethod { DECLARE_ACE_TYPE(ListPaintMethod,NodePaintMethod)27 DECLARE_ACE_TYPE(ListPaintMethod, NodePaintMethod) 28 public: 29 ListPaintMethod( 30 const V2::ItemDivider& divider, bool vertical, int32_t lanes, float space) 31 : divider_(divider), vertical_(vertical), lanes_(lanes), space_(space) 32 {} 33 ~ListPaintMethod() override = default; 34 35 CanvasDrawFunction GetForegroundDrawFunction(PaintWrapper* paintWrapper) override; 36 GetContentModifier(PaintWrapper * paintWrapper)37 RefPtr<Modifier> GetContentModifier(PaintWrapper* paintWrapper) override 38 { 39 return listContentModifier_; 40 } 41 42 void UpdateContentModifier(PaintWrapper* paintWrapper) override; 43 44 void PaintScrollBar(RSCanvas& canvas); 45 void PaintEdgeEffect(PaintWrapper* paintWrapper, RSCanvas& canvas); 46 SetScrollBar(WeakPtr<ScrollBar> && scrollBar)47 void SetScrollBar(WeakPtr<ScrollBar>&& scrollBar) 48 { 49 scrollBar_ = scrollBar; 50 } 51 SetEdgeEffect(WeakPtr<ScrollEdgeEffect> && edgeEffect)52 void SetEdgeEffect(WeakPtr<ScrollEdgeEffect>&& edgeEffect) 53 { 54 edgeEffect_ = edgeEffect; 55 } 56 SetTotalItemCount(int32_t totalItemCount)57 void SetTotalItemCount(int32_t totalItemCount) 58 { 59 totalItemCount_ = totalItemCount; 60 } 61 SetContentModifier(const RefPtr<ListContentModifier> & modify)62 void SetContentModifier(const RefPtr<ListContentModifier>& modify) 63 { 64 listContentModifier_ = modify; 65 } 66 SetLaneGutter(float laneGutter)67 void SetLaneGutter(float laneGutter) 68 { 69 laneGutter_ = laneGutter; 70 } 71 GetLaneGutter()72 float GetLaneGutter() 73 { 74 return laneGutter_; 75 } 76 SetScrollBarOverlayModifier(WeakPtr<ScrollBarOverlayModifier> && scrollBarOverlayModifier)77 void SetScrollBarOverlayModifier(WeakPtr<ScrollBarOverlayModifier>&& scrollBarOverlayModifier) 78 { 79 scrollBarOverlayModifier_ = scrollBarOverlayModifier; 80 } 81 GetOverlayModifier(PaintWrapper * paintWrapper)82 RefPtr<Modifier> GetOverlayModifier(PaintWrapper* paintWrapper) override 83 { 84 return scrollBarOverlayModifier_.Upgrade(); 85 } 86 87 void UpdateOverlayModifier(PaintWrapper* paintWrapper) override; 88 89 private: 90 V2::ItemDivider divider_; 91 bool vertical_ = false; 92 int32_t lanes_ = 1; 93 int32_t totalItemCount_; 94 float space_; 95 float laneGutter_ = 0.0f; 96 RefPtr<ListContentModifier> listContentModifier_; 97 98 WeakPtr<ScrollBar> scrollBar_; 99 WeakPtr<ScrollEdgeEffect> edgeEffect_; 100 WeakPtr<ScrollBarOverlayModifier> scrollBarOverlayModifier_; 101 }; 102 } // namespace OHOS::Ace::NG 103 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_LIST_LIST_PAINT_METHOD_H