1 /*
2     Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4                   2005 Eric Seidel <eric@webkit.org>
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     aint 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 #if ENABLE(SVG) && ENABLE(SVG_FILTERS)
23 #include "SVGRenderTreeAsText.h"
24 #include "SVGFEConvolveMatrix.h"
25 
26 namespace WebCore
27 {
28 
SVGFEConvolveMatrix(SVGResourceFilter * filter)29 SVGFEConvolveMatrix::SVGFEConvolveMatrix(SVGResourceFilter *filter)
30     : SVGFilterEffect(filter)
31     , m_kernelSize()
32     , m_divisor(0.0f)
33     , m_bias(0.0f)
34     , m_targetOffset()
35     , m_edgeMode(SVG_EDGEMODE_UNKNOWN)
36     , m_kernelUnitLength()
37     , m_preserveAlpha(false)
38 {
39 }
40 
kernelSize() const41 FloatSize SVGFEConvolveMatrix::kernelSize() const
42 {
43     return m_kernelSize;
44 }
45 
setKernelSize(FloatSize kernelSize)46 void SVGFEConvolveMatrix::setKernelSize(FloatSize kernelSize)
47 {
48     m_kernelSize = kernelSize;
49 }
50 
kernel() const51 const Vector<float> &SVGFEConvolveMatrix::kernel() const
52 {
53     return m_kernelMatrix;
54 }
55 
setKernel(const Vector<float> & kernel)56 void SVGFEConvolveMatrix::setKernel(const Vector<float> &kernel)
57 {
58     m_kernelMatrix = kernel;
59 }
60 
divisor() const61 float SVGFEConvolveMatrix::divisor() const
62 {
63     return m_divisor;
64 }
65 
setDivisor(float divisor)66 void SVGFEConvolveMatrix::setDivisor(float divisor)
67 {
68     m_divisor = divisor;
69 }
70 
bias() const71 float SVGFEConvolveMatrix::bias() const
72 {
73     return m_bias;
74 }
75 
setBias(float bias)76 void SVGFEConvolveMatrix::setBias(float bias)
77 {
78     m_bias = bias;
79 }
80 
targetOffset() const81 FloatSize SVGFEConvolveMatrix::targetOffset() const
82 {
83     return m_targetOffset;
84 }
85 
setTargetOffset(FloatSize targetOffset)86 void SVGFEConvolveMatrix::setTargetOffset(FloatSize targetOffset)
87 {
88     m_targetOffset = targetOffset;
89 }
90 
edgeMode() const91 SVGEdgeModeType SVGFEConvolveMatrix::edgeMode() const
92 {
93     return m_edgeMode;
94 }
95 
setEdgeMode(SVGEdgeModeType edgeMode)96 void SVGFEConvolveMatrix::setEdgeMode(SVGEdgeModeType edgeMode)
97 {
98     m_edgeMode = edgeMode;
99 }
100 
kernelUnitLength() const101 FloatPoint SVGFEConvolveMatrix::kernelUnitLength() const
102 {
103     return m_kernelUnitLength;
104 }
105 
setKernelUnitLength(FloatPoint kernelUnitLength)106 void SVGFEConvolveMatrix::setKernelUnitLength(FloatPoint kernelUnitLength)
107 {
108     m_kernelUnitLength = kernelUnitLength;
109 }
110 
preserveAlpha() const111 bool SVGFEConvolveMatrix::preserveAlpha() const
112 {
113     return m_preserveAlpha;
114 }
115 
setPreserveAlpha(bool preserveAlpha)116 void SVGFEConvolveMatrix::setPreserveAlpha(bool preserveAlpha)
117 {
118     m_preserveAlpha = preserveAlpha;
119 }
120 
operator <<(TextStream & ts,SVGEdgeModeType t)121 static TextStream &operator<<(TextStream &ts, SVGEdgeModeType t)
122 {
123     switch (t) {
124     case SVG_EDGEMODE_UNKNOWN:
125         ts << "UNKNOWN"; break;
126     case SVG_EDGEMODE_DUPLICATE:
127         ts << "DUPLICATE"; break;
128     case SVG_EDGEMODE_WRAP:
129         ts << "WRAP"; break;
130     case SVG_EDGEMODE_NONE:
131         ts << "NONE"; break;
132     }
133     return ts;
134 }
135 
externalRepresentation(TextStream & ts) const136 TextStream &SVGFEConvolveMatrix::externalRepresentation(TextStream &ts) const
137 {
138     ts << "[type=CONVOLVE-MATRIX] ";
139     SVGFilterEffect::externalRepresentation(ts);
140     ts << " [order " << m_kernelSize << "]"
141        << " [kernel matrix=" << m_kernelMatrix  << "]"
142        << " [divisor=" << m_divisor << "]"
143        << " [bias=" << m_bias << "]"
144        << " [target " << m_targetOffset << "]"
145        << " [edge mode=" << m_edgeMode << "]"
146        << " [kernel unit length " << m_kernelUnitLength << "]"
147        << " [preserve alpha=" << m_preserveAlpha << "]";
148     return ts;
149 }
150 
151 }; // namespace WebCore
152 
153 #endif // ENABLE(SVG) && ENABLE(SVG_FILTERS)
154