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) Research In Motion Limited 2011. All rights reserved. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public License 17 * along with this library; see the file COPYING.LIB. If not, write to 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 */ 21 22 #ifndef SVGColor_h 23 #define SVGColor_h 24 25 #include "core/css/CSSValue.h" 26 #include "core/platform/graphics/Color.h" 27 #include "wtf/PassRefPtr.h" 28 29 namespace WebCore { 30 31 class ExceptionState; 32 class RGBColor; 33 34 class SVGColor : public CSSValue { 35 public: 36 enum SVGColorType { 37 SVG_COLORTYPE_UNKNOWN = 0, 38 SVG_COLORTYPE_RGBCOLOR = 1, 39 SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2, 40 SVG_COLORTYPE_CURRENTCOLOR = 3 41 }; 42 43 static PassRefPtr<SVGColor> createFromString(const String& rgbColor) 44 { 45 RefPtr<SVGColor> color = adoptRef(new SVGColor(SVG_COLORTYPE_RGBCOLOR)); 46 color->m_valid = colorFromRGBColorString(rgbColor, color->m_color); 47 return color.release(); 48 } 49 50 static PassRefPtr<SVGColor> createFromColor(const Color& rgbColor) 51 { 52 RefPtr<SVGColor> color = adoptRef(new SVGColor(SVG_COLORTYPE_RGBCOLOR)); 53 color->setColor(rgbColor); 54 return color.release(); 55 } 56 57 static PassRefPtr<SVGColor> createCurrentColor() 58 { 59 return adoptRef(new SVGColor(SVG_COLORTYPE_CURRENTCOLOR)); 60 } 61 62 const Color& color() const { return m_color; } 63 const SVGColorType& colorType() const { return m_colorType; } 64 PassRefPtr<RGBColor> rgbColor() const; 65 66 static bool colorFromRGBColorString(const String&, Color&); 67 static Color colorFromRGBColorString(const String& s) 68 { 69 Color color; 70 colorFromRGBColorString(s, color); 71 return color; 72 } 73 74 void setRGBColor(const String& rgbColor, ExceptionState&); 75 void setRGBColorICCColor(const String& rgbColor, const String& iccColor, ExceptionState&); 76 void setColor(unsigned short colorType, const String& rgbColor, const String& iccColor, ExceptionState&); 77 78 String customCssText() const; 79 80 ~SVGColor() { } 81 82 PassRefPtr<SVGColor> cloneForCSSOM() const; 83 84 bool equals(const SVGColor&) const; 85 86 protected: 87 friend class CSSComputedStyleDeclaration; 88 89 SVGColor(ClassType, const SVGColorType&); 90 SVGColor(ClassType, const SVGColor& cloneFrom); 91 92 void setColor(const Color& color) { m_color = color; m_valid = true; } 93 void setColorType(const SVGColorType& type) { m_colorType = type; } 94 95 private: 96 SVGColor(const SVGColorType&); 97 98 Color m_color; 99 SVGColorType m_colorType; 100 bool m_valid; 101 }; 102 103 } // namespace WebCore 104 105 #endif // SVGColor_h 106