• 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 
112     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
113 };
114 
115 // blur foregroundBlurStyle foregroundEffect
116 struct ForegroundProperty {
117     ACE_DEFINE_PROPERTY_GROUP_ITEM(MotionBlur, MotionBlurOption);
CheckBlurStyleOptionForegroundProperty118     bool CheckBlurStyleOption(const std::optional<BlurStyleOption>& option) const
119     {
120         if (!option.has_value()) {
121             return false;
122         }
123         if (!propBlurStyleOption.has_value()) {
124             return false;
125         }
126         return NearEqual(propBlurStyleOption.value(), option.value());
127     }
CheckBlurRadiusChangedForegroundProperty128     bool CheckBlurRadiusChanged(const Dimension& radius) const
129     {
130         if (!propBlurRadius.has_value()) {
131             return false;
132         }
133         return NearEqual(propBlurRadius.value(), radius);
134     }
CheckSysOptionsForBlurSameForegroundProperty135     bool CheckSysOptionsForBlurSame(const SysOptions& sysOptions) const
136     {
137         if (!propSysOptionsForBlur.has_value()) {
138             return false;
139         }
140         return NearEqual(propSysOptionsForBlur.value(), sysOptions);
141     }
CheckSysOptionsForEffectSameForegroundProperty142     bool CheckSysOptionsForEffectSame(const SysOptions& sysOptions) const
143     {
144         if (!propSysOptionsForForeEffect.has_value()) {
145             return false;
146         }
147         return NearEqual(propSysOptionsForForeEffect.value(), sysOptions);
148     }
149     std::optional<BlurStyleOption> propBlurStyleOption;
150     std::optional<Dimension> propBlurRadius;
151     std::optional<SysOptions> propSysOptionsForBlur;
152     std::optional<SysOptions> propSysOptionsForForeEffect;
153     ACE_DEFINE_PROPERTY_GROUP_ITEM(ForegroundEffect, float);
154     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
155 };
156 
157 struct BorderImageProperty {
158     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImage, RefPtr<BorderImage>);
159     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImageSource, ImageSourceInfo);
160     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageSlice, bool);
161     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageWidth, bool);
162     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageOutset, bool);
163     ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageRepeat, bool);
164     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImageGradient, Gradient);
165     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderSourceFromImage, bool);
166 
ToJsonValueBorderImageProperty167     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
168     {
169         static const char* REPEAT_MODE[] = {
170             "RepeatMode.Space",
171             "RepeatMode.Stretch",
172             "RepeatMode.Repeat",
173             "RepeatMode.Round",
174         };
175         auto jsonBorderImage = JsonUtil::Create(true);
176         jsonBorderImage->Put("source", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->GetSrc().c_str());
177         jsonBorderImage->Put(
178             "slice", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->SliceToString().c_str());
179         jsonBorderImage->Put(
180             "width", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->WidthToString().c_str());
181         jsonBorderImage->Put(
182             "outset", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->OutsetToString().c_str());
183         jsonBorderImage->Put("repeat", REPEAT_MODE[static_cast<int>(
184                           propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->GetRepeatMode())]);
185         jsonBorderImage->Put("fill", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())
186             ->GetNeedFillCenter() ? "true" : "false");
187         json->PutExtAttr("borderImage", jsonBorderImage->ToString().c_str(), filter);
188     }
189 };
190 
191 struct BorderProperty {
192     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderRadius, BorderRadiusProperty);
193     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderColor, BorderColorProperty);
194     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderStyle, BorderStyleProperty);
195     ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderWidth, BorderWidthProperty);
196     ACE_DEFINE_PROPERTY_GROUP_ITEM(DashGap, BorderWidthProperty);
197     ACE_DEFINE_PROPERTY_GROUP_ITEM(DashWidth, BorderWidthProperty);
198 
199     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
200 };
201 
202 struct PointLightProperty {
203     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightPosition, TranslateOptions);
204     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightIntensity, float);
205     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightColor, Color);
206     ACE_DEFINE_PROPERTY_GROUP_ITEM(LightIlluminated, uint32_t);
207     ACE_DEFINE_PROPERTY_GROUP_ITEM(IlluminatedBorderWidth, Dimension);
208     ACE_DEFINE_PROPERTY_GROUP_ITEM(Bloom, float);
209 
210     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
211 };
212 
213 struct OuterBorderProperty {
214     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderRadius, BorderRadiusProperty);
215     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderColor, BorderColorProperty);
216     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderStyle, BorderStyleProperty);
217     ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderWidth, BorderWidthProperty);
218 
219     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
220 };
221 
222 struct TransformProperty {
223     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformScale, VectorF);
224     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformCenter, DimensionOffset);
225     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformTranslate, TranslateOptions);
226     ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformRotate, Vector5F);
227 
228     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
229 };
230 
231 struct GraphicsProperty {
232     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontBrightness, Dimension);
233     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontGrayScale, Dimension);
234     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontContrast, Dimension);
235     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontSaturate, Dimension);
236     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontSepia, Dimension);
237     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontInvert, InvertVariant);
238     ACE_DEFINE_PROPERTY_GROUP_ITEM(SystemBarEffect, bool);
239     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontHueRotate, float);
240     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontColorBlend, Color);
241     ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontBlurRadius, Dimension);
242     ACE_DEFINE_PROPERTY_GROUP_ITEM(LinearGradientBlur, NG::LinearGradientBlurPara);
243     ACE_DEFINE_PROPERTY_GROUP_ITEM(Magnifier, MagnifierParams);
244     ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicLightUpRate, float);
245     ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicLightUpDegree, float);
246     ACE_DEFINE_PROPERTY_GROUP_ITEM(BgDynamicBrightnessOption, BrightnessOption);
247     ACE_DEFINE_PROPERTY_GROUP_ITEM(FgDynamicBrightnessOption, BrightnessOption);
248     ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicDimDegree, float);
249     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackShadow, Shadow);
250     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackBlendMode, BlendMode);
251     ACE_DEFINE_PROPERTY_GROUP_ITEM(BackBlendApplyType, BlendApplyType);
252 
253     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
254 };
255 
256 struct RenderPositionProperty {
257     ACE_DEFINE_PROPERTY_GROUP_ITEM(Position, OffsetT<Dimension>);
258     ACE_DEFINE_PROPERTY_GROUP_ITEM(Offset, OffsetT<Dimension>);
259     ACE_DEFINE_PROPERTY_GROUP_ITEM(PositionEdges, EdgesParam);
260     ACE_DEFINE_PROPERTY_GROUP_ITEM(OffsetEdges, EdgesParam);
261     ACE_DEFINE_PROPERTY_GROUP_ITEM(Anchor, OffsetT<Dimension>);
262 
263     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
264 };
265 
266 struct ClipProperty {
267     ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipShape, RefPtr<BasicShape>);
268     ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipEdge, bool);
269     ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipMask, RefPtr<BasicShape>);
270 
271     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
272 };
273 
274 struct GradientProperty {
275     ACE_DEFINE_PROPERTY_GROUP_ITEM(LinearGradient, NG::Gradient);
276     ACE_DEFINE_PROPERTY_GROUP_ITEM(SweepGradient, NG::Gradient);
277     ACE_DEFINE_PROPERTY_GROUP_ITEM(RadialGradient, NG::Gradient);
278     ACE_DEFINE_PROPERTY_GROUP_ITEM(LastGradientType, NG::GradientType);
279 
280     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const;
281 };
282 
283 struct OverlayProperty {
284     ACE_DEFINE_PROPERTY_GROUP_ITEM(OverlayText, OverlayOptions);
285 
ToJsonValueOverlayProperty286     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const
287     {
288         propOverlayText.value_or(OverlayOptions()).ToJsonValue(json, filter);
289     }
290 };
291 
292 struct MotionPathProperty {
293     ACE_DEFINE_PROPERTY_GROUP_ITEM(MotionPath, MotionPathOption);
294 };
295 
296 } // namespace OHOS::Ace::NG
297 
298 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PAINTS_RENDER_PROPERTY_H
299