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 #include "core/components_ng/pattern/scrollable/scrollable_paint_property.h"
17
18 #include "core/components/scroll/scroll_bar_theme.h"
19 #include "core/components_ng/base/inspector_filter.h"
20 #include "core/pipeline_ng/pipeline_context.h"
21
22 namespace OHOS::Ace::NG {
ContentClipToStr() const23 std::string ScrollablePaintProperty::ContentClipToStr() const
24 {
25 auto mode = propContentClip_ ? propContentClip_->first : ContentClipMode::DEFAULT;
26 if (mode == ContentClipMode::DEFAULT) {
27 mode = GetDefaultContentClip();
28 }
29 switch (mode) {
30 case ContentClipMode::CONTENT_ONLY:
31 return "ContentClipMode.CONTENT_ONLY";
32 case ContentClipMode::BOUNDARY:
33 return "ContentClipMode.BOUNDARY";
34 case ContentClipMode::CUSTOM:
35 return "RectShape";
36 case ContentClipMode::SAFE_AREA:
37 return "ContentClipMode.SAFE_AREA";
38 default:
39 return "";
40 }
41 }
42
ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter) const43 void ScrollablePaintProperty::ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
44 {
45 PaintProperty::ToJsonValue(json, filter);
46 /* no fixed attr below, just return */
47 if (filter.IsFastFilter()) {
48 return;
49 }
50 json->PutExtAttr("scrollBar", GetBarStateString().c_str(), filter);
51 json->PutExtAttr("scrollBarColor", GetBarColor().ColorToString().c_str(), filter);
52 json->PutExtAttr("scrollBarWidth", GetBarWidth().ToString().c_str(), filter);
53 json->PutExtAttr("fadingEdge",
54 propFadingEdgeProperty_ ? propFadingEdgeProperty_->propFadingEdge.value_or(false) : false, filter);
55 auto fadingEdgeOption = JsonUtil::Create(true);
56 fadingEdgeOption->Put("fadingEdgeLength",
57 propFadingEdgeProperty_
58 ? propFadingEdgeProperty_->propFadingEdgeLength
59 .value_or(Dimension(32.0, DimensionUnit::VP)) // 32.0: default fading edge length
60 .ToString()
61 .c_str()
62 : Dimension(32.0, DimensionUnit::VP).ToString().c_str()); // 32.0: default fading edge length
63 json->PutExtAttr("fadingEdgeOption", fadingEdgeOption, filter);
64 json->PutExtAttr("clipContent", ContentClipToStr().c_str(), filter);
65 }
66
GetBarColor() const67 Color ScrollablePaintProperty::GetBarColor() const
68 {
69 auto context = PipelineContext::GetCurrentContext();
70 CHECK_NULL_RETURN(context, Color::TRANSPARENT);
71 auto themeManager = context->GetThemeManager();
72 CHECK_NULL_RETURN(themeManager, Color::TRANSPARENT);
73 auto scrollBarTheme = themeManager->GetTheme<ScrollBarTheme>();
74 CHECK_NULL_RETURN(scrollBarTheme, Color::TRANSPARENT);
75 auto defaultScrollBarColor = scrollBarTheme->GetForegroundColor();
76 return propScrollBarProperty_ ? propScrollBarProperty_->propScrollBarColor.value_or(defaultScrollBarColor)
77 : defaultScrollBarColor;
78 }
79
GetBarWidth() const80 Dimension ScrollablePaintProperty::GetBarWidth() const
81 {
82 auto context = PipelineContext::GetCurrentContext();
83 CHECK_NULL_RETURN(context, Dimension());
84 auto themeManager = context->GetThemeManager();
85 CHECK_NULL_RETURN(themeManager, Dimension());
86 auto scrollBarTheme = themeManager->GetTheme<ScrollBarTheme>();
87 CHECK_NULL_RETURN(scrollBarTheme, Dimension());
88 auto defaultScrollBarWidth = scrollBarTheme->GetNormalWidth();
89 return propScrollBarProperty_ ? propScrollBarProperty_->propScrollBarWidth.value_or(defaultScrollBarWidth)
90 : defaultScrollBarWidth;
91 }
92
GetBarStateString() const93 std::string ScrollablePaintProperty::GetBarStateString() const
94 {
95 auto mode = propScrollBarProperty_ ? propScrollBarProperty_->propScrollBarMode.value_or(DisplayMode::AUTO)
96 : DisplayMode::AUTO;
97 switch (mode) {
98 case DisplayMode::AUTO:
99 return "BarState.Auto";
100 case DisplayMode::ON:
101 return "BarState.On";
102 case DisplayMode::OFF:
103 return "BarState.Off";
104 default:
105 break;
106 }
107 return "BarState.Off";
108 }
109
CloneProps(const ScrollablePaintProperty * src)110 void ScrollablePaintProperty::CloneProps(const ScrollablePaintProperty* src)
111 {
112 UpdatePaintProperty(src);
113 propScrollBarProperty_ = src->CloneScrollBarProperty();
114 propFadingEdgeProperty_ = src->CloneFadingEdgeProperty();
115 propContentClip_ = src->CloneContentClip();
116 }
117
Clone() const118 RefPtr<PaintProperty> ScrollablePaintProperty::Clone() const
119 {
120 auto paintProperty = MakeRefPtr<ScrollablePaintProperty>();
121 paintProperty->CloneProps(this);
122 return paintProperty;
123 }
124
Clone() const125 RefPtr<PaintProperty> GridPaintProperty::Clone() const
126 {
127 auto paintProperty = MakeRefPtr<GridPaintProperty>();
128 paintProperty->CloneProps(this);
129 return paintProperty;
130 }
131
Clone() const132 RefPtr<PaintProperty> ScrollPaintProperty::Clone() const
133 {
134 auto paintProperty = MakeRefPtr<GridPaintProperty>();
135 paintProperty->CloneProps(this);
136 return paintProperty;
137 }
138 } // namespace OHOS::Ace::NG
139