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_SCROLLABLE_PAINT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_SCROLLABLE_PAINT_PROPERTY_H 18 19 #include "core/animation/curve.h" 20 #include "core/animation/curves.h" 21 #include "core/components/common/layout/constants.h" 22 #include "core/components/common/properties/color.h" 23 #include "core/components_ng/pattern/scroll/inner/scroll_bar.h" 24 #include "core/components_ng/render/paint_property.h" 25 26 namespace OHOS::Ace::NG { 27 class InspectorFilter; 28 29 struct ScrollBarProperty { 30 ACE_DEFINE_PROPERTY_GROUP_ITEM(ScrollBarMode, DisplayMode); 31 ACE_DEFINE_PROPERTY_GROUP_ITEM(ScrollBarWidth, Dimension); 32 ACE_DEFINE_PROPERTY_GROUP_ITEM(ScrollBarColor, Color); 33 }; 34 struct FadingEdgeProperty { 35 ACE_DEFINE_PROPERTY_GROUP_ITEM(FadingEdge, bool); 36 ACE_DEFINE_PROPERTY_GROUP_ITEM(FadingEdgeLength, Dimension); 37 }; 38 39 enum class ContentClipMode { 40 CONTENT_ONLY, // area excluding margin & padding & SafeAreaPadding 41 BOUNDARY, // corresponding to FrameRect, area excluding margin 42 SAFE_AREA, // CONTENT_ONLY area + SafeAreaPadding (which can stack up with ancestor's SafeAreaPadding) 43 CUSTOM, // inner enum, not present in frontend. Custom shape's offset is relative to FrameOffset. 44 DEFAULT, // Different scrollable components have different default clip values. 45 }; 46 using ContentClip = std::pair<ContentClipMode, RefPtr<ShapeRect>>; 47 48 class ScrollablePaintProperty : public PaintProperty { 49 DECLARE_ACE_TYPE(ScrollablePaintProperty, PaintProperty) 50 51 public: 52 ScrollablePaintProperty() = default; 53 ~ScrollablePaintProperty() override = default; 54 55 RefPtr<PaintProperty> Clone() const override; 56 57 /** 58 * @brief copy paint props from @c src 59 */ 60 void CloneProps(const ScrollablePaintProperty* src); 61 Reset()62 void Reset() override 63 { 64 ResetScrollBarProperty(); 65 ResetFadingEdgeProperty(); 66 PaintProperty::Reset(); 67 ResetContentClip(); 68 } 69 70 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override; 71 72 ACE_DEFINE_PROPERTY_GROUP(ScrollBarProperty, ScrollBarProperty); 73 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ScrollBarProperty, ScrollBarMode, DisplayMode, PROPERTY_UPDATE_RENDER); 74 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ScrollBarProperty, ScrollBarWidth, Dimension, PROPERTY_UPDATE_RENDER); 75 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(ScrollBarProperty, ScrollBarColor, Color, PROPERTY_UPDATE_RENDER); 76 ACE_DEFINE_PROPERTY_GROUP(FadingEdgeProperty, FadingEdgeProperty); 77 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FadingEdgeProperty, FadingEdge, bool, PROPERTY_UPDATE_RENDER); 78 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FadingEdgeProperty, FadingEdgeLength, Dimension, PROPERTY_UPDATE_RENDER); 79 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ContentClip, ContentClip, PROPERTY_UPDATE_RENDER); 80 Dimension GetBarWidth() const; 81 Color GetBarColor() const; 82 83 /** 84 * @brief Return the default content clip mode. 85 */ GetDefaultContentClip()86 virtual ContentClipMode GetDefaultContentClip() const 87 { 88 return ContentClipMode::CONTENT_ONLY; 89 } 90 91 private: 92 std::string ContentClipToStr() const; 93 std::string GetBarStateString() const; 94 }; 95 96 class GridPaintProperty : public ScrollablePaintProperty { 97 DECLARE_ACE_TYPE(GridPaintProperty, ScrollablePaintProperty) 98 public: 99 RefPtr<PaintProperty> Clone() const override; 100 GetDefaultContentClip()101 ContentClipMode GetDefaultContentClip() const override 102 { 103 return ContentClipMode::BOUNDARY; 104 } 105 }; 106 107 class ScrollPaintProperty : public ScrollablePaintProperty { 108 DECLARE_ACE_TYPE(ScrollPaintProperty, ScrollablePaintProperty) 109 public: 110 RefPtr<PaintProperty> Clone() const override; 111 GetDefaultContentClip()112 ContentClipMode GetDefaultContentClip() const override 113 { 114 return ContentClipMode::BOUNDARY; 115 } 116 }; 117 } // namespace OHOS::Ace::NG 118 119 #endif 120