• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_PAINTS_RENDER_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PAINTS_RENDER_PROPERTY_H
18 
19 #include <optional>
20 
21 #include "base/geometry/ng/offset_t.h"
22 #include "base/geometry/ng/vector.h"
23 #include "core/components/common/layout/position_param.h"
24 #include "core/components/common/properties/background_image.h"
25 #include "core/components/common/properties/blend_mode.h"
26 #include "core/components/common/properties/blur_style_option.h"
27 #include "core/components/common/properties/border_image.h"
28 #include "core/components/common/properties/brightness_option.h"
29 #include "core/components/common/properties/clip_path.h"
30 #include "core/components/common/properties/color.h"
31 #include "core/components/common/properties/decoration.h"
32 #include "core/components/common/properties/invert.h"
33 #include "core/components/common/properties/motion_path_option.h"
34 #include "core/components/common/properties/shadow.h"
35 #include "core/components_ng/base/inspector_filter.h"
36 #include "core/components_ng/property/border_property.h"
37 #include "core/components_ng/property/gradient_property.h"
38 #include "core/components_ng/property/overlay_property.h"
39 #include "core/components_ng/property/property.h"
40 #include "core/components_ng/property/transition_property.h"
41 #include "core/image/image_source_info.h"
42 
43 namespace OHOS::Ace {
44 enum class BlurStyle;
45 } // namespace OHOS::Ace
46 
47 namespace OHOS::Ace::NG {
48 
49 // backdropBlur backgroundBlurStyle backgroundEffect
50 struct BackgroundProperty {
51     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImage, ImageSourceInfo);
52     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageRepeat, ImageRepeat);
53     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageSyncMode, bool);
54     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageSize, BackgroundImageSize);
55     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImagePosition, BackgroundImagePosition);
56     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageResizableSlice, ImageResizableSlice);
CheckBlurStyleOptionBackgroundProperty57     bool CheckBlurStyleOption(const std::optional<BlurStyleOption>& option) const
58     {
59         if (!option.has_value()) {
60             return false;
61         }
62         if (!propBlurStyleOption.has_value()) {
63             return false;
64         }
65         return NearEqual(propBlurStyleOption.value(), option.value());
66     }
CheckBlurRadiusChangedBackgroundProperty67     bool CheckBlurRadiusChanged(const Dimension& radius) const
68     {
69         if (!propBlurRadius.has_value()) {
70             return false;
71         }
72         return NearEqual(propBlurRadius.value(), radius);
73     }
CheckBlurOptionChangedBackgroundProperty74     bool CheckBlurOptionChanged(const BlurOption& blurOption) const
75     {
76         if (!propBackdropBlurOption.has_value()) {
77             return false;
78         }
79         return NearEqual(propBackdropBlurOption->grayscale[0], blurOption.grayscale[0])
80             && NearEqual(propBackdropBlurOption->grayscale[1], blurOption.grayscale[1]);
81     }
CheckSystemAdaptationSameBackgroundProperty82     bool CheckSystemAdaptationSame(const SysOptions& sysOptions) const
83     {
84         if (!propSysOptions.has_value()) {
85             return false;
86         }
87         return NearEqual(propSysOptions.value(), sysOptions);
88     }
CheckEffectOptionBackgroundProperty89     bool CheckEffectOption(const std::optional<EffectOption>& effectOption) const
90     {
91         if (!effectOption.has_value()) {
92             return false;
93         }
94         if (!propEffectOption.has_value()) {
95             return false;
96         }
97         return NearEqual(propEffectOption.value(), effectOption.value());
98     }
99     std::optional<BlurStyleOption> propBlurStyleOption;
100     std::optional<Dimension> propBlurRadius;
101     std::optional<EffectOption> propEffectOption;
102     std::optional<BlurOption> propBackdropBlurOption;
103     std::optional<SysOptions> propSysOptions;
104 
105     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
106 };
107 
108 struct CustomBackgroundProperty {
109     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundPixelMap, RefPtr<PixelMap>);
110     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundAlign, Alignment);
111     ACE_DEFINE_PROPERTY_GROUP_ITEM(CustomBackgroundColor, Color);
112     ACE_DEFINE_PROPERTY_GROUP_ITEM(IsTransitionBackground, bool);
113     ACE_DEFINE_PROPERTY_GROUP_ITEM(BuilderBackgroundFlag, bool);
114     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundIgnoresLayoutSafeAreaEdges, uint32_t);
115 
116     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
117 };
118 
119 // blur foregroundBlurStyle foregroundEffect
120 struct ForegroundProperty {
121     ACE_DEFINE_PROPERTY_GROUP_ITEM(MotionBlur, MotionBlurOption);
CheckBlurStyleOptionForegroundProperty122     bool CheckBlurStyleOption(const std::optional<BlurStyleOption>& option) const
123     {
124         if (!option.has_value()) {
125             return false;
126         }
127         if (!propBlurStyleOption.has_value()) {
128             return false;
129         }
130         return NearEqual(propBlurStyleOption.value(), option.value());
131     }
CheckBlurRadiusChangedForegroundProperty132     bool CheckBlurRadiusChanged(const Dimension& radius) const
133     {
134         if (!propBlurRadius.has_value()) {
135             return false;
136         }
137         return NearEqual(propBlurRadius.value(), radius);
138     }
CheckSysOptionsForBlurSameForegroundProperty139     bool CheckSysOptionsForBlurSame(const SysOptions& sysOptions) const
140     {
141         if (!propSysOptionsForBlur.has_value()) {
142             return false;
143         }
144         return NearEqual(propSysOptionsForBlur.value(), sysOptions);
145     }
146     std::optional<BlurStyleOption> propBlurStyleOption;
147     std::optional<Dimension> propBlurRadius;
148     std::optional<SysOptions> propSysOptionsForBlur;
149     ACE_DEFINE_PROPERTY_GROUP_ITEM(ForegroundEffect, float);
150     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
151 };
152 
153 struct BorderImageProperty {
154     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImage, RefPtr<BorderImage>);
155     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImageSource, ImageSourceInfo);
156     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageSlice, bool);
157     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageWidth, bool);
158     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageOutset, bool);
159     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageRepeat, bool);
160     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImageGradient, Gradient);
161     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderSourceFromImage, bool);
162 
ToJsonValueBorderImageProperty163     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
164     {
165         static const char* REPEAT_MODE[] = {
166             "RepeatMode.Space",
167             "RepeatMode.Stretch",
168             "RepeatMode.Repeat",
169             "RepeatMode.Round",
170         };
171         auto jsonBorderImage = JsonUtil::Create(true);
172         jsonBorderImage->Put("source", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->GetSrc().c_str());
173         jsonBorderImage->Put(
174             "slice", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->SliceToString().c_str());
175         jsonBorderImage->Put(
176             "width", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->WidthToString().c_str());
177         jsonBorderImage->Put(
178             "outset", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->OutsetToString().c_str());
179         jsonBorderImage->Put("repeat", REPEAT_MODE[static_cast<int>(
180                           propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->GetRepeatMode())]);
181         jsonBorderImage->Put("fill", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())
182             ->GetNeedFillCenter() ? "true" : "false");
183         json->PutExtAttr("borderImage", jsonBorderImage->ToString().c_str(), filter);
184     }
185 };
186 
187 struct BorderProperty {
188     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderRadius, BorderRadiusProperty);
189     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderColor, BorderColorProperty);
190     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderStyle, BorderStyleProperty);
191     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderWidth, BorderWidthProperty);
192     ACE_DEFINE_PROPERTY_GROUP_ITEM(DashGap, BorderWidthProperty);
193     ACE_DEFINE_PROPERTY_GROUP_ITEM(DashWidth, BorderWidthProperty);
194 
195     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
196 };
197 
198 struct PointLightProperty {
199     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightPosition, TranslateOptions);
200     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightIntensity, float);
201     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightColor, Color);
202     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightIlluminated, uint32_t);
203     ACE_DEFINE_PROPERTY_GROUP_ITEM(IlluminatedBorderWidth, Dimension);
204     ACE_DEFINE_PROPERTY_GROUP_ITEM(Bloom, float);
205 
206     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
207 };
208 
209 struct OuterBorderProperty {
210     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderRadius, BorderRadiusProperty);
211     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderColor, BorderColorProperty);
212     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderStyle, BorderStyleProperty);
213     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderWidth, BorderWidthProperty);
214 
215     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
216 };
217 
218 struct TransformProperty {
219     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformScale, VectorF);
220     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformCenter, DimensionOffset);
221     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformTranslate, TranslateOptions);
222     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformRotate, Vector5F);
223     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformRotateAngle, Vector4F);
224 
225     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
226 };
227 
228 struct GraphicsProperty {
229     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontBrightness, Dimension);
230     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontGrayScale, Dimension);
231     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontContrast, Dimension);
232     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontSaturate, Dimension);
233     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontSepia, Dimension);
234     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontInvert, InvertVariant);
235     ACE_DEFINE_PROPERTY_GROUP_ITEM(SystemBarEffect, bool);
236     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontHueRotate, float);
237     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontColorBlend, Color);
238     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontBlurRadius, Dimension);
239     ACE_DEFINE_PROPERTY_GROUP_ITEM(LinearGradientBlur, NG::LinearGradientBlurPara);
240     ACE_DEFINE_PROPERTY_GROUP_ITEM(Magnifier, MagnifierParams);
241     ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicLightUpRate, float);
242     ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicLightUpDegree, float);
243     ACE_DEFINE_PROPERTY_GROUP_ITEM(BgDynamicBrightnessOption, BrightnessOption);
244     ACE_DEFINE_PROPERTY_GROUP_ITEM(FgDynamicBrightnessOption, BrightnessOption);
245     ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicDimDegree, float);
246     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackShadow, Shadow);
247     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackBlendMode, BlendMode);
248     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackBlendApplyType, BlendApplyType);
249 
250     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
251 };
252 
253 struct RenderPositionProperty {
254     ACE_DEFINE_PROPERTY_GROUP_ITEM(Position, OffsetT<Dimension>);
255     ACE_DEFINE_PROPERTY_GROUP_ITEM(Offset, OffsetT<Dimension>);
256     ACE_DEFINE_PROPERTY_GROUP_ITEM(PositionEdges, EdgesParam);
257     ACE_DEFINE_PROPERTY_GROUP_ITEM(OffsetEdges, EdgesParam);
258     ACE_DEFINE_PROPERTY_GROUP_ITEM(Anchor, OffsetT<Dimension>);
259 
260     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
261 };
262 
263 struct ClipProperty {
264     ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipShape, RefPtr<BasicShape>);
265     ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipEdge, bool);
266     ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipMask, RefPtr<BasicShape>);
267 
268     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
269 };
270 
271 struct GradientProperty {
272     ACE_DEFINE_PROPERTY_GROUP_ITEM(LinearGradient, NG::Gradient);
273     ACE_DEFINE_PROPERTY_GROUP_ITEM(SweepGradient, NG::Gradient);
274     ACE_DEFINE_PROPERTY_GROUP_ITEM(RadialGradient, NG::Gradient);
275     ACE_DEFINE_PROPERTY_GROUP_ITEM(LastGradientType, NG::GradientType);
276 
277     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
278 };
279 
280 struct OverlayProperty {
281     ACE_DEFINE_PROPERTY_GROUP_ITEM(OverlayText, OverlayOptions);
282 
ToJsonValueOverlayProperty283     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
284     {
285         propOverlayText.value_or(OverlayOptions()).ToJsonValue(json, filter);
286     }
287 };
288 
289 struct MotionPathProperty {
290     ACE_DEFINE_PROPERTY_GROUP_ITEM(MotionPath, MotionPathOption);
291 };
292 
293 } // namespace OHOS::Ace::NG
294 
295 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PAINTS_RENDER_PROPERTY_H
296