1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #ifndef INCLUDED_SVGIO_SVGREADER_SVGGRADIENTNODE_HXX
23 #define INCLUDED_SVGIO_SVGREADER_SVGGRADIENTNODE_HXX
24 
25 #include <svgio/svgiodllapi.h>
26 #include <svgio/svgreader/svgnode.hxx>
27 #include <svgio/svgreader/svgstyleattributes.hxx>
28 #include <drawinglayer/primitive2d/svggradientprimitive2d.hxx>
29 
30 //////////////////////////////////////////////////////////////////////////////
31 
32 namespace svgio
33 {
34     namespace svgreader
35     {
36         class SvgGradientNode : public SvgNode
37         {
38         private:
39             /// use styles
40             SvgStyleAttributes          maSvgStyleAttributes;
41 
42             /// linear gradient values
43             SvgNumber                   maX1;
44             SvgNumber                   maY1;
45             SvgNumber                   maX2;
46             SvgNumber                   maY2;
47 
48             /// radial gradient values
49             SvgNumber                   maCx;
50             SvgNumber                   maCy;
51             SvgNumber                   maR;
52             SvgNumber                   maFx;
53             SvgNumber                   maFy;
54 
55             /// variable scan values, dependent of given XAttributeList
56             SvgUnits                    maGradientUnits;
57             drawinglayer::primitive2d::SpreadMethod   maSpreadMethod;
58             basegfx::B2DHomMatrix*      mpaGradientTransform;
59 
60             /// link to another gradient used as style. If maXLink
61             /// is set, the node can be fetched on demand by using
62             // tryToFindLink (buffered)
63             rtl::OUString               maXLink;
64             const SvgGradientNode*      mpXLink;
65 
66             /// link on demand
67             void tryToFindLink();
68 
69         public:
70             SvgGradientNode(
71                 SVGToken aType,
72                 SvgDocument& rDocument,
73                 SvgNode* pParent);
74             virtual ~SvgGradientNode();
75 
76             virtual const SvgStyleAttributes* getSvgStyleAttributes() const;
77             virtual void parseAttribute(const rtl::OUString& rTokenName, SVGToken aSVGToken, const rtl::OUString& aContent);
78 
79             /// collect gradient stop entries
80             void collectGradientEntries(drawinglayer::primitive2d::SvgGradientEntryVector& aVector) const;
81 
82             /// x1 content
83             const SvgNumber getX1() const;
setX1(const SvgNumber & rX1=SvgNumber ())84             void setX1(const SvgNumber& rX1 = SvgNumber()) { maX1 = rX1; }
85 
86             /// y1 content
87             const SvgNumber getY1() const;
setY1(const SvgNumber & rY1=SvgNumber ())88             void setY1(const SvgNumber& rY1 = SvgNumber()) { maY1 = rY1; }
89 
90             /// x2 content
91             const SvgNumber getX2() const;
setX2(const SvgNumber & rX2=SvgNumber ())92             void setX2(const SvgNumber& rX2 = SvgNumber()) { maX2 = rX2; }
93 
94             /// y2 content
95             const SvgNumber getY2() const;
setY2(const SvgNumber & rY2=SvgNumber ())96             void setY2(const SvgNumber& rY2 = SvgNumber()) { maY2 = rY2; }
97 
98             /// Cx content
99             const SvgNumber getCx() const;
setCx(const SvgNumber & rCx=SvgNumber ())100             void setCx(const SvgNumber& rCx = SvgNumber()) { maCx = rCx; }
101 
102             /// Cy content
103             const SvgNumber getCy() const;
setCy(const SvgNumber & rCy=SvgNumber ())104             void setCy(const SvgNumber& rCy = SvgNumber()) { maCy = rCy; }
105 
106             /// R content
107             const SvgNumber getR() const;
setR(const SvgNumber & rR=SvgNumber ())108             void setR(const SvgNumber& rR = SvgNumber()) { maR = rR; }
109 
110             /// Fx content
111             const SvgNumber* getFx() const;
setFx(const SvgNumber & rFx=SvgNumber ())112             void setFx(const SvgNumber& rFx = SvgNumber()) { maFx = rFx; }
113 
114             /// Fy content
115             const SvgNumber* getFy() const;
setFy(const SvgNumber & rFy=SvgNumber ())116             void setFy(const SvgNumber& rFy = SvgNumber()) { maFy = rFy; }
117 
118             /// gradientUnits content
getGradientUnits() const119             SvgUnits getGradientUnits() const { return maGradientUnits; }
setGradientUnits(const SvgUnits aGradientUnits)120             void setGradientUnits(const SvgUnits aGradientUnits) { maGradientUnits = aGradientUnits; }
121 
122             /// SpreadMethod content
getSpreadMethod() const123             drawinglayer::primitive2d::SpreadMethod getSpreadMethod() const { return maSpreadMethod; }
setSpreadMethod(const drawinglayer::primitive2d::SpreadMethod aSpreadMethod)124             void setSpreadMethod(const drawinglayer::primitive2d::SpreadMethod aSpreadMethod) { maSpreadMethod = aSpreadMethod; }
125 
126             /// transform content, set if found in current context
127             const basegfx::B2DHomMatrix* getGradientTransform() const;
128             void setGradientTransform(const basegfx::B2DHomMatrix* pMatrix = 0);
129         };
130     } // end of namespace svgreader
131 } // end of namespace svgio
132 
133 //////////////////////////////////////////////////////////////////////////////
134 
135 #endif //INCLUDED_SVGIO_SVGREADER_SVGGRADIENTNODE_HXX
136 
137 // eof
138