2 * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public License
16 * along with this library; see the file COPYING.LIB. If not, write to
17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
21 #ifndef SVGFETurbulenceElement_h
22 #define SVGFETurbulenceElement_h
24 #include "core/svg/SVGAnimatedEnumeration.h"
25 #include "core/svg/SVGAnimatedInteger.h"
26 #include "core/svg/SVGAnimatedNumber.h"
27 #include "core/svg/SVGAnimatedNumberOptionalNumber.h"
28 #include "core/svg/SVGFilterPrimitiveStandardAttributes.h"
29 #include "platform/graphics/filters/FETurbulence.h"
33 enum SVGStitchOptions {
34 SVG_STITCHTYPE_UNKNOWN = 0,
35 SVG_STITCHTYPE_STITCH = 1,
36 SVG_STITCHTYPE_NOSTITCH = 2
40 struct SVGPropertyTraits<SVGStitchOptions> {
41 static unsigned highestEnumValue() { return SVG_STITCHTYPE_NOSTITCH; }
43 static String toString(SVGStitchOptions type)
46 case SVG_STITCHTYPE_UNKNOWN:
48 case SVG_STITCHTYPE_STITCH:
50 case SVG_STITCHTYPE_NOSTITCH:
58 static SVGStitchOptions fromString(const String& value)
60 if (value == "stitch")
61 return SVG_STITCHTYPE_STITCH;
62 if (value == "noStitch")
63 return SVG_STITCHTYPE_NOSTITCH;
64 return SVG_STITCHTYPE_UNKNOWN;
69 struct SVGPropertyTraits<TurbulenceType> {
70 static unsigned highestEnumValue() { return FETURBULENCE_TYPE_TURBULENCE; }
72 static String toString(TurbulenceType type)
75 case FETURBULENCE_TYPE_UNKNOWN:
77 case FETURBULENCE_TYPE_FRACTALNOISE:
78 return "fractalNoise";
79 case FETURBULENCE_TYPE_TURBULENCE:
87 static TurbulenceType fromString(const String& value)
89 if (value == "fractalNoise")
90 return FETURBULENCE_TYPE_FRACTALNOISE;
91 if (value == "turbulence")
92 return FETURBULENCE_TYPE_TURBULENCE;
93 return FETURBULENCE_TYPE_UNKNOWN;
97 class SVGFETurbulenceElement FINAL : public SVGFilterPrimitiveStandardAttributes {
99 static PassRefPtr<SVGFETurbulenceElement> create(Document&);
101 SVGAnimatedNumber* baseFrequencyX() { return m_baseFrequency->firstNumber(); }
102 SVGAnimatedNumber* baseFrequencyY() { return m_baseFrequency->secondNumber(); }
103 SVGAnimatedNumber* seed() { return m_seed.get(); }
104 SVGAnimatedInteger* numOctaves() { return m_numOctaves.get(); }
107 explicit SVGFETurbulenceElement(Document&);
109 bool isSupportedAttribute(const QualifiedName&);
110 virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
111 virtual bool setFilterEffectAttribute(FilterEffect*, const QualifiedName& attrName) OVERRIDE;
112 virtual void svgAttributeChanged(const QualifiedName&) OVERRIDE;
113 virtual PassRefPtr<FilterEffect> build(SVGFilterBuilder*, Filter*) OVERRIDE;
115 RefPtr<SVGAnimatedNumberOptionalNumber> m_baseFrequency;
116 RefPtr<SVGAnimatedNumber> m_seed;
117 RefPtr<SVGAnimatedInteger> m_numOctaves;
118 BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGFETurbulenceElement)
119 DECLARE_ANIMATED_ENUMERATION(StitchTiles, stitchTiles, SVGStitchOptions)
120 DECLARE_ANIMATED_ENUMERATION(Type, type, TurbulenceType)
121 END_DECLARE_ANIMATED_PROPERTIES
124 } // namespace WebCore