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