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