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