Home | History | Annotate | Download | only in svg
      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/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 
     48     static PassRefPtr<SVGPaint> createUnknown()
     49     {
     50         return adoptRef(new SVGPaint(SVG_PAINTTYPE_UNKNOWN));
     51     }
     52 
     53     static PassRefPtr<SVGPaint> createNone()
     54     {
     55         return adoptRef(new SVGPaint(SVG_PAINTTYPE_NONE));
     56     }
     57 
     58     static PassRefPtr<SVGPaint> createCurrentColor()
     59     {
     60         return adoptRef(new SVGPaint(SVG_PAINTTYPE_CURRENTCOLOR));
     61     }
     62 
     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 
     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 
     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 
     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 
     89     const SVGPaintType& paintType() const { return m_paintType; }
     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 
    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 } // namespace WebCore
    120 
    121 #endif // SVGPaint_h
    122