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