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 "base/geometry/ng/offset_t.h" 20 #include "base/geometry/ng/vector.h" 21 #include "core/components/common/layout/position_param.h" 22 #include "core/components/common/properties/clip_path.h" 23 #include "core/components/common/properties/color.h" 24 #include "core/components/common/properties/decoration.h" 25 #include "core/components/common/properties/shadow.h" 26 #include "core/components/common/properties/blend_mode.h" 27 #include "core/components_ng/base/inspector_filter.h" 28 #include "core/components_ng/property/border_property.h" 29 #include "core/components_ng/property/gradient_property.h" 30 #include "core/components_ng/property/overlay_property.h" 31 #include "core/components_ng/property/property.h" 32 #include "core/components_ng/property/transition_property.h" 33 #include "core/image/image_source_info.h" 34 35 namespace OHOS::Ace { 36 enum class BlurStyle; 37 } // namespace OHOS::Ace 38 39 namespace OHOS::Ace::NG { 40 41 struct BackgroundProperty { 42 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImage, ImageSourceInfo); 43 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageRepeat, ImageRepeat); 44 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageSize, BackgroundImageSize); 45 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImagePosition, BackgroundImagePosition); 46 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundImageResizableSlice, ImageResizableSlice); CheckBlurStyleOptionBackgroundProperty47 bool CheckBlurStyleOption(const std::optional<BlurStyleOption>& option) const 48 { 49 if (!option.has_value()) { 50 return false; 51 } 52 if (!propBlurStyleOption.has_value()) { 53 return false; 54 } 55 return NearEqual(propBlurStyleOption.value(), option.value()); 56 } CheckBlurRadiusBackgroundProperty57 bool CheckBlurRadius(const Dimension& radius) const 58 { 59 if (!propBlurRadius.has_value()) { 60 return false; 61 } 62 return NearEqual(propBlurRadius.value(), radius); 63 } CheckEffectOptionBackgroundProperty64 bool CheckEffectOption(const std::optional<EffectOption>& effectOption) const 65 { 66 if (!effectOption.has_value()) { 67 return false; 68 } 69 if (!propEffectOption.has_value()) { 70 return false; 71 } 72 return NearEqual(propEffectOption.value(), effectOption.value()); 73 } 74 std::optional<BlurStyleOption> propBlurStyleOption; 75 std::optional<Dimension> propBlurRadius; 76 std::optional<EffectOption> propEffectOption; 77 78 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 79 }; 80 81 struct CustomBackgroundProperty { 82 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundPixelMap, RefPtr<PixelMap>); 83 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackgroundAlign, Alignment); 84 85 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 86 }; 87 88 struct ForegroundProperty { 89 ACE_DEFINE_PROPERTY_GROUP_ITEM(MotionBlur, MotionBlurOption); CheckBlurStyleOptionForegroundProperty90 bool CheckBlurStyleOption(const std::optional<BlurStyleOption>& option) const 91 { 92 if (!option.has_value()) { 93 return false; 94 } 95 if (!propBlurStyleOption.has_value()) { 96 return false; 97 } 98 return NearEqual(propBlurStyleOption.value(), option.value()); 99 } CheckBlurRadiusForegroundProperty100 bool CheckBlurRadius(const Dimension& radius) const 101 { 102 if (!propBlurRadius.has_value()) { 103 return false; 104 } 105 return NearEqual(propBlurRadius.value(), radius); 106 } 107 std::optional<BlurStyleOption> propBlurStyleOption; 108 std::optional<Dimension> propBlurRadius; 109 ACE_DEFINE_PROPERTY_GROUP_ITEM(ForegroundEffect, float); 110 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 111 }; 112 113 struct BorderImageProperty { 114 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImage, RefPtr<BorderImage>); 115 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImageSource, ImageSourceInfo); 116 ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageSlice, bool); 117 ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageWidth, bool); 118 ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageOutset, bool); 119 ACE_DEFINE_PROPERTY_GROUP_ITEM(HasBorderImageRepeat, bool); 120 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderImageGradient, Gradient); 121 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderSourceFromImage, bool); 122 ToJsonValueBorderImageProperty123 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const 124 { 125 static const char* REPEAT_MODE[] = { 126 "RepeatMode.Space", 127 "RepeatMode.Stretch", 128 "RepeatMode.Repeat", 129 "RepeatMode.Round", 130 }; 131 auto jsonBorderImage = JsonUtil::Create(true); 132 jsonBorderImage->Put("source", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->GetSrc().c_str()); 133 jsonBorderImage->Put( 134 "slice", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->SliceToString().c_str()); 135 jsonBorderImage->Put( 136 "width", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->WidthToString().c_str()); 137 jsonBorderImage->Put( 138 "outset", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->OutsetToString().c_str()); 139 jsonBorderImage->Put("repeat", REPEAT_MODE[static_cast<int>( 140 propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>())->GetRepeatMode())]); 141 jsonBorderImage->Put("fill", propBorderImage.value_or(AceType::MakeRefPtr<BorderImage>()) 142 ->GetNeedFillCenter() ? "true" : "false"); 143 json->PutExtAttr("borderImage", jsonBorderImage->ToString().c_str(), filter); 144 } 145 }; 146 147 struct BorderProperty { 148 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderRadius, BorderRadiusProperty); 149 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderColor, BorderColorProperty); 150 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderStyle, BorderStyleProperty); 151 ACE_DEFINE_PROPERTY_GROUP_ITEM(BorderWidth, BorderWidthProperty); 152 ACE_DEFINE_PROPERTY_GROUP_ITEM(DashGap, BorderWidthProperty); 153 ACE_DEFINE_PROPERTY_GROUP_ITEM(DashWidth, BorderWidthProperty); 154 155 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 156 }; 157 158 struct PointLightProperty { 159 ACE_DEFINE_PROPERTY_GROUP_ITEM(LightPosition, TranslateOptions); 160 ACE_DEFINE_PROPERTY_GROUP_ITEM(LightIntensity, float); 161 ACE_DEFINE_PROPERTY_GROUP_ITEM(LightColor, Color); 162 ACE_DEFINE_PROPERTY_GROUP_ITEM(LightIlluminated, uint32_t); 163 ACE_DEFINE_PROPERTY_GROUP_ITEM(IlluminatedBorderWidth, Dimension); 164 ACE_DEFINE_PROPERTY_GROUP_ITEM(Bloom, float); 165 166 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 167 }; 168 169 struct OuterBorderProperty { 170 ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderRadius, BorderRadiusProperty); 171 ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderColor, BorderColorProperty); 172 ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderStyle, BorderStyleProperty); 173 ACE_DEFINE_PROPERTY_GROUP_ITEM(OuterBorderWidth, BorderWidthProperty); 174 175 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 176 }; 177 178 struct TransformProperty { 179 ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformScale, VectorF); 180 ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformCenter, DimensionOffset); 181 ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformTranslate, TranslateOptions); 182 ACE_DEFINE_PROPERTY_GROUP_ITEM(TransformRotate, Vector5F); 183 184 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 185 }; 186 187 struct GraphicsProperty { 188 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontBrightness, Dimension); 189 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontGrayScale, Dimension); 190 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontContrast, Dimension); 191 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontSaturate, Dimension); 192 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontSepia, Dimension); 193 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontInvert, InvertVariant); 194 ACE_DEFINE_PROPERTY_GROUP_ITEM(SystemBarEffect, bool); 195 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontHueRotate, float); 196 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontColorBlend, Color); 197 ACE_DEFINE_PROPERTY_GROUP_ITEM(FrontBlurRadius, Dimension); 198 ACE_DEFINE_PROPERTY_GROUP_ITEM(LinearGradientBlur, NG::LinearGradientBlurPara); 199 ACE_DEFINE_PROPERTY_GROUP_ITEM(Magnifier, MagnifierParams); 200 ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicLightUpRate, float); 201 ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicLightUpDegree, float); 202 ACE_DEFINE_PROPERTY_GROUP_ITEM(BgDynamicBrightnessOption, BrightnessOption); 203 ACE_DEFINE_PROPERTY_GROUP_ITEM(FgDynamicBrightnessOption, BrightnessOption); 204 ACE_DEFINE_PROPERTY_GROUP_ITEM(DynamicDimDegree, float); 205 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackShadow, Shadow); 206 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackBlendMode, BlendMode); 207 ACE_DEFINE_PROPERTY_GROUP_ITEM(BackBlendApplyType, BlendApplyType); 208 209 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 210 }; 211 212 struct RenderPositionProperty { 213 ACE_DEFINE_PROPERTY_GROUP_ITEM(Position, OffsetT<Dimension>); 214 ACE_DEFINE_PROPERTY_GROUP_ITEM(Offset, OffsetT<Dimension>); 215 ACE_DEFINE_PROPERTY_GROUP_ITEM(PositionEdges, EdgesParam); 216 ACE_DEFINE_PROPERTY_GROUP_ITEM(OffsetEdges, EdgesParam); 217 ACE_DEFINE_PROPERTY_GROUP_ITEM(Anchor, OffsetT<Dimension>); 218 219 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 220 }; 221 222 struct ClipProperty { 223 ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipShape, RefPtr<BasicShape>); 224 ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipEdge, bool); 225 ACE_DEFINE_PROPERTY_GROUP_ITEM(ClipMask, RefPtr<BasicShape>); 226 227 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 228 }; 229 230 struct GradientProperty { 231 ACE_DEFINE_PROPERTY_GROUP_ITEM(LinearGradient, NG::Gradient); 232 ACE_DEFINE_PROPERTY_GROUP_ITEM(SweepGradient, NG::Gradient); 233 ACE_DEFINE_PROPERTY_GROUP_ITEM(RadialGradient, NG::Gradient); 234 ACE_DEFINE_PROPERTY_GROUP_ITEM(LastGradientType, NG::GradientType); 235 236 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 237 }; 238 239 struct OverlayProperty { 240 ACE_DEFINE_PROPERTY_GROUP_ITEM(OverlayText, OverlayOptions); 241 ToJsonValueOverlayProperty242 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const 243 { 244 propOverlayText.value_or(OverlayOptions()).ToJsonValue(json, filter); 245 } 246 }; 247 248 struct MotionPathProperty { 249 ACE_DEFINE_PROPERTY_GROUP_ITEM(MotionPath, MotionPathOption); 250 }; 251 252 } // namespace OHOS::Ace::NG 253 254 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PAINTS_RENDER_PROPERTY_H 255