1 /* 2 Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann (at) kde.org> 3 2004, 2005 Rob Buis <buis (at) kde.org> 4 2005 Eric Seidel <eric (at) 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 #include "config.h" 23 24 #if ENABLE(SVG) && ENABLE(FILTERS) 25 #include "SVGFEConvolveMatrix.h" 26 #include "Filter.h" 27 #include "SVGRenderTreeAsText.h" 28 29 namespace WebCore { 30 31 FEConvolveMatrix::FEConvolveMatrix(FilterEffect* in, FilterEffect* in2, const FloatSize& kernelSize, 32 const float& divisor, const float& bias, const FloatSize& targetOffset, EdgeModeType edgeMode, 33 const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix) 34 : FilterEffect() 35 , m_in(in) 36 , m_in2(in2) 37 , m_kernelSize(kernelSize) 38 , m_divisor(divisor) 39 , m_bias(bias) 40 , m_targetOffset(targetOffset) 41 , m_edgeMode(edgeMode) 42 , m_kernelUnitLength(kernelUnitLength) 43 , m_preserveAlpha(preserveAlpha) 44 , m_kernelMatrix(kernelMatrix) 45 { 46 } 47 48 PassRefPtr<FEConvolveMatrix> FEConvolveMatrix::create(FilterEffect* in, FilterEffect* in2, const FloatSize& kernelSize, 49 const float& divisor, const float& bias, const FloatSize& targetOffset, EdgeModeType edgeMode, 50 const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix) 51 { 52 return adoptRef(new FEConvolveMatrix(in, in2, kernelSize, divisor, bias, targetOffset, edgeMode, kernelUnitLength, 53 preserveAlpha, kernelMatrix)); 54 } 55 56 57 FloatSize FEConvolveMatrix::kernelSize() const 58 { 59 return m_kernelSize; 60 } 61 62 void FEConvolveMatrix::setKernelSize(FloatSize kernelSize) 63 { 64 m_kernelSize = kernelSize; 65 } 66 67 const Vector<float>& FEConvolveMatrix::kernel() const 68 { 69 return m_kernelMatrix; 70 } 71 72 void FEConvolveMatrix::setKernel(const Vector<float>& kernel) 73 { 74 m_kernelMatrix = kernel; 75 } 76 77 float FEConvolveMatrix::divisor() const 78 { 79 return m_divisor; 80 } 81 82 void FEConvolveMatrix::setDivisor(float divisor) 83 { 84 m_divisor = divisor; 85 } 86 87 float FEConvolveMatrix::bias() const 88 { 89 return m_bias; 90 } 91 92 void FEConvolveMatrix::setBias(float bias) 93 { 94 m_bias = bias; 95 } 96 97 FloatSize FEConvolveMatrix::targetOffset() const 98 { 99 return m_targetOffset; 100 } 101 102 void FEConvolveMatrix::setTargetOffset(FloatSize targetOffset) 103 { 104 m_targetOffset = targetOffset; 105 } 106 107 EdgeModeType FEConvolveMatrix::edgeMode() const 108 { 109 return m_edgeMode; 110 } 111 112 void FEConvolveMatrix::setEdgeMode(EdgeModeType edgeMode) 113 { 114 m_edgeMode = edgeMode; 115 } 116 117 FloatPoint FEConvolveMatrix::kernelUnitLength() const 118 { 119 return m_kernelUnitLength; 120 } 121 122 void FEConvolveMatrix::setKernelUnitLength(FloatPoint kernelUnitLength) 123 { 124 m_kernelUnitLength = kernelUnitLength; 125 } 126 127 bool FEConvolveMatrix::preserveAlpha() const 128 { 129 return m_preserveAlpha; 130 } 131 132 void FEConvolveMatrix::setPreserveAlpha(bool preserveAlpha) 133 { 134 m_preserveAlpha = preserveAlpha; 135 } 136 137 void FEConvolveMatrix::apply(Filter*) 138 { 139 } 140 141 void FEConvolveMatrix::dump() 142 { 143 } 144 145 static TextStream& operator<<(TextStream& ts, EdgeModeType t) 146 { 147 switch (t) 148 { 149 case EDGEMODE_UNKNOWN: 150 ts << "UNKNOWN";break; 151 case EDGEMODE_DUPLICATE: 152 ts << "DUPLICATE";break; 153 case EDGEMODE_WRAP: 154 ts << "WRAP"; break; 155 case EDGEMODE_NONE: 156 ts << "NONE"; break; 157 } 158 return ts; 159 } 160 161 TextStream& FEConvolveMatrix::externalRepresentation(TextStream& ts) const 162 { 163 ts << "[type=CONVOLVE-MATRIX] "; 164 FilterEffect::externalRepresentation(ts); 165 ts << " [order " << m_kernelSize << "]" 166 << " [kernel matrix=" << m_kernelMatrix << "]" 167 << " [divisor=" << m_divisor << "]" 168 << " [bias=" << m_bias << "]" 169 << " [target " << m_targetOffset << "]" 170 << " [edge mode=" << m_edgeMode << "]" 171 << " [kernel unit length " << m_kernelUnitLength << "]" 172 << " [preserve alpha=" << m_preserveAlpha << "]"; 173 return ts; 174 } 175 176 }; // namespace WebCore 177 178 #endif // ENABLE(SVG) && ENABLE(FILTERS) 179