1 /* 2 * Copyright (c) 2021 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_DECLARATION_SVG_SVG_GRADIENT_DECLARATION_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_SVG_SVG_GRADIENT_DECLARATION_H 18 19 #include "core/components/declaration/common/declaration.h" 20 21 namespace OHOS::Ace { 22 23 struct SvgGradientAttribute : Attribute { 24 Gradient gradient = Gradient(); 25 }; 26 27 class SvgGradientDeclaration : public Declaration { 28 DECLARE_ACE_TYPE(SvgGradientDeclaration, Declaration); 29 30 public: 31 SvgGradientDeclaration() = default; 32 ~SvgGradientDeclaration() override = default; 33 void InitializeStyle() override; 34 bool SetSpecializedAttr(const std::pair<std::string, std::string>& attr) override; 35 bool SetSpecializedStyle(const std::pair<std::string, std::string>& style) override; 36 SetTransform(const std::string & gradientTransform)37 void SetTransform(const std::string& gradientTransform) 38 { 39 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 40 attribute.gradient.SetGradientTransform(gradientTransform); 41 } 42 SetSpreadMethod(SpreadMethod spreadMethod)43 void SetSpreadMethod(SpreadMethod spreadMethod) 44 { 45 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 46 attribute.gradient.SetSpreadMethod(spreadMethod); 47 } 48 SetX1(const Dimension & x1)49 void SetX1(const Dimension& x1) 50 { 51 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 52 attribute.gradient.GetLinearGradient().x1 = x1; 53 } 54 SetY1(const Dimension & y1)55 void SetY1(const Dimension& y1) 56 { 57 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 58 attribute.gradient.GetLinearGradient().y1 = y1; 59 } 60 SetX2(const Dimension & x2)61 void SetX2(const Dimension& x2) 62 { 63 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 64 attribute.gradient.GetLinearGradient().x2 = x2; 65 } 66 SetY2(const Dimension & y2)67 void SetY2(const Dimension& y2) 68 { 69 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 70 attribute.gradient.GetLinearGradient().y2 = y2; 71 } 72 SetR(const Dimension & r)73 void SetR(const Dimension& r) 74 { 75 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 76 attribute.gradient.GetRadialGradient().radialHorizontalSize = r; 77 attribute.gradient.GetRadialGradient().radialVerticalSize = r; 78 } 79 SetCx(const Dimension & cx)80 void SetCx(const Dimension& cx) 81 { 82 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 83 attribute.gradient.GetRadialGradient().radialCenterX = cx; 84 } 85 SetCy(const Dimension & cy)86 void SetCy(const Dimension& cy) 87 { 88 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 89 attribute.gradient.GetRadialGradient().radialCenterY = cy; 90 } 91 SetFx(const Dimension & fx)92 void SetFx(const Dimension& fx) 93 { 94 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 95 attribute.gradient.GetRadialGradient().fRadialCenterX = fx; 96 } 97 SetFy(const Dimension & fy)98 void SetFy(const Dimension& fy) 99 { 100 auto& attribute = MaybeResetAttribute<SvgGradientAttribute>(AttributeTag::SPECIALIZED_ATTR); 101 attribute.gradient.GetRadialGradient().fRadialCenterY = fy; 102 } 103 GetTransform()104 const std::string& GetTransform() const 105 { 106 auto& attribute = static_cast<SvgGradientAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 107 return attribute.gradient.GetGradientTransform(); 108 } 109 GetSpreadMethod()110 SpreadMethod GetSpreadMethod() const 111 { 112 auto& attribute = static_cast<SvgGradientAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 113 return attribute.gradient.GetSpreadMethod(); 114 } 115 GetGradient()116 const Gradient& GetGradient() const 117 { 118 auto& attribute = static_cast<SvgGradientAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 119 return attribute.gradient; 120 } 121 SetGradientType(GradientType gradientType)122 void SetGradientType(GradientType gradientType) 123 { 124 auto& attribute = static_cast<SvgGradientAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 125 return attribute.gradient.SetType(gradientType); 126 } 127 AddGradientColor(const GradientColor & gradientColor)128 void AddGradientColor(const GradientColor& gradientColor) 129 { 130 auto& attribute = static_cast<SvgGradientAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR)); 131 attribute.gradient.AddColor(gradientColor); 132 } 133 134 protected: 135 void InitSpecialized() override; 136 137 private: 138 bool SetSpecializedValue(const std::pair<std::string, std::string>& attr); 139 }; 140 141 } // namespace OHOS::Ace 142 143 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_SVG_SVG_GRADIENT_DECLARATION_H 144