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_PATTERN_DECLARATION_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_SVG_SVG_PATTERN_DECLARATION_H
18 
19 #include "core/components/declaration/svg/svg_base_declaration.h"
20 
21 namespace OHOS::Ace {
22 
23 struct SvgPatternAttribute : SvgBaseAttribute {
24     Dimension x; // x-axis default value
25     Dimension y; // y-axis default value
26     Dimension width; // pattern area width default value
27     Dimension height; // pattern area height default value
28     std::string patternUnits = "objectBoundingBox";
29     std::string patternContentUnits = "userSpaceOnUse";
30     std::string patternTransform;
31     Rect viewBox;
32 };
33 
34 class SvgPatternDeclaration : public SvgBaseDeclaration {
35     DECLARE_ACE_TYPE(SvgPatternDeclaration, SvgBaseDeclaration);
36 
37 public:
38     SvgPatternDeclaration() = default;
39     ~SvgPatternDeclaration() override = default;
40     void InitializeStyle() override;
41     bool SetSpecializedAttr(const std::pair<std::string, std::string>& attr) override;
42 
SetX(const Dimension & x)43     void SetX(const Dimension& x)
44     {
45         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
46         attribute.x = x;
47     }
48 
GetX()49     Dimension& GetX() const
50     {
51         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
52         return attribute.x;
53     }
54 
SetY(const Dimension & y)55     void SetY(const Dimension& y)
56     {
57         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
58         attribute.y = y;
59     }
60 
GetY()61     Dimension& GetY() const
62     {
63         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
64         return attribute.y;
65     }
66 
SetHeight(const Dimension & height)67     void SetHeight(const Dimension& height)
68     {
69         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
70         attribute.height = height;
71     }
72 
GetHeight()73     Dimension& GetHeight() const
74     {
75         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
76         return attribute.height;
77     }
78 
SetWidth(const Dimension & width)79     void SetWidth(const Dimension& width)
80     {
81         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
82         attribute.width = width;
83     }
84 
GetWidth()85     Dimension& GetWidth() const
86     {
87         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
88         return attribute.width;
89     }
90 
GetPatternUnits()91     const std::string& GetPatternUnits() const
92     {
93         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
94         return attribute.patternUnits;
95     }
96 
SetPatternUnits(const std::string & patternUnits)97     void SetPatternUnits(const std::string& patternUnits)
98     {
99         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
100         attribute.patternUnits = patternUnits;
101     }
102 
GetPatternContentUnits()103     const std::string& GetPatternContentUnits() const
104     {
105         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
106         return attribute.patternContentUnits;
107     }
108 
SetPatternContentUnits(const std::string & patternContentUnits)109     void SetPatternContentUnits(const std::string& patternContentUnits)
110     {
111         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
112         attribute.patternContentUnits = patternContentUnits;
113     }
114 
GetPatternTransform()115     const std::string& GetPatternTransform() const
116     {
117         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
118         return attribute.patternTransform;
119     }
120 
SetPatternTransform(const std::string & patternTransform)121     void SetPatternTransform(const std::string& patternTransform)
122     {
123         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
124         attribute.patternTransform = patternTransform;
125     }
126 
GetViewBox()127     const Rect& GetViewBox() const
128     {
129         auto& attribute = static_cast<SvgPatternAttribute&>(GetAttribute(AttributeTag::SPECIALIZED_ATTR));
130         return attribute.viewBox;
131     }
132 
SetViewBox(const Rect & viewBox)133     void SetViewBox(const Rect& viewBox)
134     {
135         auto& attribute = MaybeResetAttribute<SvgPatternAttribute>(AttributeTag::SPECIALIZED_ATTR);
136         attribute.viewBox = viewBox;
137     }
138 
GetId()139     const std::string& GetId()
140     {
141         auto& commonAttr = MaybeResetAttribute<CommonAttribute>(AttributeTag::COMMON_ATTR);
142         return commonAttr.id;
143     }
144 
145 protected:
146     void InitSpecialized() override;
147 };
148 
149 } // namespace OHOS::Ace
150 
151 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_SVG_SVG_PATTERN_DECLARATION_H
152