KHTML
SVGFEColorMatrixElement.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "config.h"
00024
00025 #if ENABLE(SVG) && ENABLE(SVG_FILTERS)
00026 #include "SVGFEColorMatrixElement.h"
00027
00028 #include "SVGNames.h"
00029 #include "SVGNumberList.h"
00030 #include "SVGResourceFilter.h"
00031
00032 namespace WebCore {
00033
00034 SVGFEColorMatrixElement::SVGFEColorMatrixElement(const QualifiedName& tagName, Document* doc)
00035 : SVGFilterPrimitiveStandardAttributes(tagName, doc)
00036 , m_type(SVG_FECOLORMATRIX_TYPE_UNKNOWN)
00037 , m_values(SVGNumberList::create(SVGNames::valuesAttr))
00038 , m_filterEffect(0)
00039 {
00040 }
00041
00042 SVGFEColorMatrixElement::~SVGFEColorMatrixElement()
00043 {
00044 delete m_filterEffect;
00045 }
00046
00047 ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, String, String, string, In1, in1, SVGNames::inAttr, m_in1)
00048 ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, int, Enumeration, enumeration, Type, type, SVGNames::typeAttr, m_type)
00049 ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, SVGNumberList*, NumberList, numberList, Values, values, SVGNames::valuesAttr, m_values.get())
00050
00051 void SVGFEColorMatrixElement::parseMappedAttribute(MappedAttribute* attr)
00052 {
00053 const String& value = attr->value();
00054 if (attr->name() == SVGNames::typeAttr) {
00055 if (value == "matrix")
00056 setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_MATRIX);
00057 else if (value == "saturate")
00058 setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_SATURATE);
00059 else if (value == "hueRotate")
00060 setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_HUEROTATE);
00061 else if (value == "luminanceToAlpha")
00062 setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA);
00063 }
00064 else if (attr->name() == SVGNames::inAttr)
00065 setIn1BaseValue(value);
00066 else if (attr->name() == SVGNames::valuesAttr)
00067 valuesBaseValue()->parse(value);
00068 else
00069 SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
00070 }
00071
00072 SVGFEColorMatrix* SVGFEColorMatrixElement::filterEffect(SVGResourceFilter* filter) const
00073 {
00074 if (!m_filterEffect)
00075 m_filterEffect = new SVGFEColorMatrix(filter);
00076
00077 m_filterEffect->setIn(in1());
00078 setStandardAttributes(m_filterEffect);
00079
00080 Vector<float> _values;
00081 SVGNumberList* numbers = values();
00082
00083 ExceptionCode ec = 0;
00084 unsigned int nr = numbers->numberOfItems();
00085 for (unsigned int i = 0;i < nr;i++)
00086 _values.append(numbers->getItem(i, ec));
00087
00088 m_filterEffect->setValues(_values);
00089 m_filterEffect->setType((SVGColorMatrixType) type());
00090
00091 return m_filterEffect;
00092 }
00093
00094 }
00095
00096 #endif // ENABLE(SVG)
00097
00098