1 /* 2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann (at) kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis (at) kde.org> 4 * Copyright (C) 2006 Samuel Weinig <sam.weinig (at) 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/css/CSSValue.h" 27 #include "core/css/StyleColor.h" 28 #include "platform/graphics/Color.h" 29 #include "wtf/text/WTFString.h" 30 31 namespace WebCore { 32 33 class SVGPaint : public CSSValue { 34 public: 35 enum SVGPaintType { 36 SVG_PAINTTYPE_UNKNOWN, 37 SVG_PAINTTYPE_RGBCOLOR, 38 SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR, 39 SVG_PAINTTYPE_NONE, 40 SVG_PAINTTYPE_CURRENTCOLOR, 41 SVG_PAINTTYPE_URI_NONE, 42 SVG_PAINTTYPE_URI_CURRENTCOLOR, 43 SVG_PAINTTYPE_URI_RGBCOLOR, 44 SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR, 45 SVG_PAINTTYPE_URI 46 }; 47 48 static PassRefPtrWillBeRawPtr<SVGPaint> createUnknown() 49 { 50 return adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_UNKNOWN)); 51 } 52 53 static PassRefPtrWillBeRawPtr<SVGPaint> createNone() 54 { 55 return adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_NONE)); 56 } 57 58 static PassRefPtrWillBeRawPtr<SVGPaint> createCurrentColor() 59 { 60 return adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_CURRENTCOLOR)); 61 } 62 63 static PassRefPtrWillBeRawPtr<SVGPaint> createColor(const Color& color) 64 { 65 RefPtrWillBeRawPtr<SVGPaint> paint = adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_RGBCOLOR)); 66 paint->m_color = color; 67 return paint.release(); 68 } 69 70 static PassRefPtrWillBeRawPtr<SVGPaint> createURI(const String& uri) 71 { 72 RefPtrWillBeRawPtr<SVGPaint> paint = adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_URI, uri)); 73 return paint.release(); 74 } 75 76 static PassRefPtrWillBeRawPtr<SVGPaint> createURIAndColor(const String& uri, const Color& color) 77 { 78 RefPtrWillBeRawPtr<SVGPaint> paint = adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_URI_RGBCOLOR, uri)); 79 paint->m_color = color; 80 return paint.release(); 81 } 82 83 static PassRefPtrWillBeRawPtr<SVGPaint> createURIAndNone(const String& uri) 84 { 85 RefPtrWillBeRawPtr<SVGPaint> paint = adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_URI_NONE, uri)); 86 return paint.release(); 87 } 88 89 static PassRefPtrWillBeRawPtr<SVGPaint> createURIAndCurrentColor(const String& uri) 90 { 91 RefPtrWillBeRawPtr<SVGPaint> paint = adoptRefWillBeNoop(new SVGPaint(SVG_PAINTTYPE_URI_CURRENTCOLOR, uri)); 92 return paint.release(); 93 } 94 95 const SVGPaintType& paintType() const { return m_paintType; } 96 String uri() const { return m_uri; } 97 98 String customCSSText() const; 99 100 PassRefPtrWillBeRawPtr<SVGPaint> cloneForCSSOM() const; 101 102 bool equals(const SVGPaint&) const; 103 104 void traceAfterDispatch(Visitor* visitor) { CSSValue::traceAfterDispatch(visitor); } 105 106 Color color() const { return m_color; } 107 void setColor(const Color& color) { m_color = color; m_paintType = SVG_PAINTTYPE_RGBCOLOR; } 108 109 static StyleColor colorFromRGBColorString(const String&); 110 111 private: 112 friend class CSSComputedStyleDeclaration; 113 114 static PassRefPtrWillBeRawPtr<SVGPaint> create(const SVGPaintType& type, const String& uri, const Color& color) 115 { 116 RefPtrWillBeRawPtr<SVGPaint> paint = adoptRefWillBeNoop(new SVGPaint(type, uri)); 117 paint->m_color = color; 118 return paint.release(); 119 } 120 121 private: 122 SVGPaint(const SVGPaintType&, const String& uri = String()); 123 SVGPaint(const SVGPaint& cloneFrom); 124 125 SVGPaintType m_paintType; 126 Color m_color; 127 String m_uri; 128 }; 129 130 DEFINE_CSS_VALUE_TYPE_CASTS(SVGPaint, isSVGPaint()); 131 132 } // namespace WebCore 133 134 #endif // SVGPaint_h 135