1 /* 2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 4 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmial.com> 5 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Library General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Library General Public License for more details. 16 * 17 * You should have received a copy of the GNU Library General Public License 18 * along with this library; see the file COPYING.LIB. If not, write to 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 * Boston, MA 02110-1301, USA. 21 */ 22 23 #ifndef SVGPaint_h 24 #define SVGPaint_h 25 26 #include "core/svg/SVGColor.h" 27 #include "wtf/text/WTFString.h" 28 29 namespace WebCore { 30 31 class ExceptionState; 32 33 class SVGPaint : public SVGColor { 34 public: 35 enum SVGPaintType { 36 SVG_PAINTTYPE_UNKNOWN = 0, 37 SVG_PAINTTYPE_RGBCOLOR = 1, 38 SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2, 39 SVG_PAINTTYPE_NONE = 101, 40 SVG_PAINTTYPE_CURRENTCOLOR = 102, 41 SVG_PAINTTYPE_URI_NONE = 103, 42 SVG_PAINTTYPE_URI_CURRENTCOLOR = 104, 43 SVG_PAINTTYPE_URI_RGBCOLOR = 105, 44 SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106, 45 SVG_PAINTTYPE_URI = 107 46 }; 47 createUnknown()48 static PassRefPtr<SVGPaint> createUnknown() 49 { 50 return adoptRef(new SVGPaint(SVG_PAINTTYPE_UNKNOWN)); 51 } 52 createNone()53 static PassRefPtr<SVGPaint> createNone() 54 { 55 return adoptRef(new SVGPaint(SVG_PAINTTYPE_NONE)); 56 } 57 createCurrentColor()58 static PassRefPtr<SVGPaint> createCurrentColor() 59 { 60 return adoptRef(new SVGPaint(SVG_PAINTTYPE_CURRENTCOLOR)); 61 } 62 createColor(const Color & color)63 static PassRefPtr<SVGPaint> createColor(const Color& color) 64 { 65 RefPtr<SVGPaint> paint = adoptRef(new SVGPaint(SVG_PAINTTYPE_RGBCOLOR)); 66 paint->setColor(color); 67 return paint.release(); 68 } 69 createURI(const String & uri)70 static PassRefPtr<SVGPaint> createURI(const String& uri) 71 { 72 RefPtr<SVGPaint> paint = adoptRef(new SVGPaint(SVG_PAINTTYPE_URI, uri)); 73 return paint.release(); 74 } 75 createURIAndColor(const String & uri,const Color & color)76 static PassRefPtr<SVGPaint> createURIAndColor(const String& uri, const Color& color) 77 { 78 RefPtr<SVGPaint> paint = adoptRef(new SVGPaint(SVG_PAINTTYPE_URI_RGBCOLOR, uri)); 79 paint->setColor(color); 80 return paint.release(); 81 } 82 createURIAndNone(const String & uri)83 static PassRefPtr<SVGPaint> createURIAndNone(const String& uri) 84 { 85 RefPtr<SVGPaint> paint = adoptRef(new SVGPaint(SVG_PAINTTYPE_URI_NONE, uri)); 86 return paint.release(); 87 } 88 paintType()89 const SVGPaintType& paintType() const { return m_paintType; } uri()90 String uri() const { return m_uri; } 91 92 void setUri(const String&); 93 void setPaint(unsigned short paintType, const String& uri, const String& rgbColor, const String& iccColor, ExceptionState&); 94 95 String customCSSText() const; 96 97 PassRefPtr<SVGPaint> cloneForCSSOM() const; 98 99 bool equals(const SVGPaint&) const; 100 101 private: 102 friend class CSSComputedStyleDeclaration; 103 create(const SVGPaintType & type,const String & uri,const Color & color)104 static PassRefPtr<SVGPaint> create(const SVGPaintType& type, const String& uri, const Color& color) 105 { 106 RefPtr<SVGPaint> paint = adoptRef(new SVGPaint(type, uri)); 107 paint->setColor(color); 108 return paint.release(); 109 } 110 111 private: 112 SVGPaint(const SVGPaintType&, const String& uri = String()); 113 SVGPaint(const SVGPaint& cloneFrom); 114 115 SVGPaintType m_paintType; 116 String m_uri; 117 }; 118 119 DEFINE_CSS_VALUE_TYPE_CASTS(SVGPaint, isSVGPaint()); 120 121 } // namespace WebCore 122 123 #endif // SVGPaint_h 124