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