8a2b03ef7a701c93af3b1b50bab30533f1c180ca
[WebKit-https.git] / WebCore / ksvg2 / svg / SVGFEColorMatrixElement.cpp
1 /*
2     Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4
5     This file is part of the KDE project
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., 59 Temple Place - Suite 330,
20     Boston, MA 02111-1307, USA.
21 */
22
23 #include "config.h"
24 #ifdef SVG_SUPPORT
25 #include "DeprecatedStringList.h"
26
27 #include "Attr.h"
28
29 #include "KCanvasFilters.h"
30 #include "KRenderingDevice.h"
31 #include "KRenderingPaintServerGradient.h"
32
33 #include "ksvg.h"
34 #include "SVGNames.h"
35 #include "SVGHelper.h"
36 #include "SVGRenderStyle.h"
37 #include "SVGFEColorMatrixElement.h"
38 #include "SVGNumberList.h"
39
40 namespace WebCore {
41
42 SVGFEColorMatrixElement::SVGFEColorMatrixElement(const QualifiedName& tagName, Document *doc)
43     : SVGFilterPrimitiveStandardAttributes(tagName, doc)
44     , m_type(0)
45     , m_values(new SVGNumberList)
46     , m_filterEffect(0)
47 {
48 }
49
50 SVGFEColorMatrixElement::~SVGFEColorMatrixElement()
51 {
52     delete m_filterEffect;
53 }
54
55 ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, String, String, string, In1, in1, SVGNames::inAttr.localName(), m_in1)
56 ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, int, Enumeration, enumeration, Type, type, SVGNames::typeAttr.localName(), m_type)
57 ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, SVGNumberList*, NumberList, numberList, Values, values, SVGNames::valuesAttr.localName(), m_values.get())
58
59 void SVGFEColorMatrixElement::parseMappedAttribute(MappedAttribute *attr)
60 {
61     const String& value = attr->value();
62     if (attr->name() == SVGNames::typeAttr) {
63         if(value == "matrix")
64             setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_MATRIX);
65         else if(value == "saturate")
66             setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_SATURATE);
67         else if(value == "hueRotate")
68             setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_HUEROTATE);
69         else if(value == "luminanceToAlpha")
70             setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA);
71     }
72     else if (attr->name() == SVGNames::inAttr)
73         setIn1BaseValue(value);
74     else if (attr->name() == SVGNames::valuesAttr)
75         valuesBaseValue()->parse(value.deprecatedString());
76     else
77         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
78 }
79
80 KCanvasFEColorMatrix *SVGFEColorMatrixElement::filterEffect() const
81 {
82     if (!m_filterEffect)
83         m_filterEffect = static_cast<KCanvasFEColorMatrix *>(renderingDevice()->createFilterEffect(FE_COLOR_MATRIX));
84     if (!m_filterEffect)
85         return 0;
86         
87     m_filterEffect->setIn(in1());
88     setStandardAttributes(m_filterEffect);
89     DeprecatedValueList<float> _values;
90     SVGNumberList *numbers = values();
91
92     ExceptionCode ec = 0;
93     unsigned int nr = numbers->numberOfItems();
94     for(unsigned int i = 0;i < nr;i++)
95         _values.append(numbers->getItem(i, ec));
96     m_filterEffect->setValues(_values);
97     m_filterEffect->setType((KCColorMatrixType)(type() - 1));
98     
99     return m_filterEffect;
100 }
101
102 }
103
104 // vim:ts=4:noet
105 #endif // SVG_SUPPORT
106