OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> | 2 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 26 matching lines...) Expand all Loading... |
37 DEFINE_ANIMATED_INTEGER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::
orderAttr, orderXIdentifier(), OrderX, orderX) | 37 DEFINE_ANIMATED_INTEGER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::
orderAttr, orderXIdentifier(), OrderX, orderX) |
38 DEFINE_ANIMATED_INTEGER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::
orderAttr, orderYIdentifier(), OrderY, orderY) | 38 DEFINE_ANIMATED_INTEGER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::
orderAttr, orderYIdentifier(), OrderY, orderY) |
39 DEFINE_ANIMATED_NUMBER_LIST(SVGFEConvolveMatrixElement, SVGNames::kernelMatrixAt
tr, KernelMatrix, kernelMatrix) | 39 DEFINE_ANIMATED_NUMBER_LIST(SVGFEConvolveMatrixElement, SVGNames::kernelMatrixAt
tr, KernelMatrix, kernelMatrix) |
40 DEFINE_ANIMATED_NUMBER(SVGFEConvolveMatrixElement, SVGNames::divisorAttr, Diviso
r, divisor) | 40 DEFINE_ANIMATED_NUMBER(SVGFEConvolveMatrixElement, SVGNames::divisorAttr, Diviso
r, divisor) |
41 DEFINE_ANIMATED_NUMBER(SVGFEConvolveMatrixElement, SVGNames::biasAttr, Bias, bia
s) | 41 DEFINE_ANIMATED_NUMBER(SVGFEConvolveMatrixElement, SVGNames::biasAttr, Bias, bia
s) |
42 DEFINE_ANIMATED_INTEGER(SVGFEConvolveMatrixElement, SVGNames::targetXAttr, Targe
tX, targetX) | 42 DEFINE_ANIMATED_INTEGER(SVGFEConvolveMatrixElement, SVGNames::targetXAttr, Targe
tX, targetX) |
43 DEFINE_ANIMATED_INTEGER(SVGFEConvolveMatrixElement, SVGNames::targetYAttr, Targe
tY, targetY) | 43 DEFINE_ANIMATED_INTEGER(SVGFEConvolveMatrixElement, SVGNames::targetYAttr, Targe
tY, targetY) |
44 DEFINE_ANIMATED_ENUMERATION(SVGFEConvolveMatrixElement, SVGNames::edgeModeAttr,
EdgeMode, edgeMode, EdgeModeType) | 44 DEFINE_ANIMATED_ENUMERATION(SVGFEConvolveMatrixElement, SVGNames::edgeModeAttr,
EdgeMode, edgeMode, EdgeModeType) |
45 DEFINE_ANIMATED_NUMBER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::k
ernelUnitLengthAttr, kernelUnitLengthXIdentifier(), KernelUnitLengthX, kernelUni
tLengthX) | 45 DEFINE_ANIMATED_NUMBER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::k
ernelUnitLengthAttr, kernelUnitLengthXIdentifier(), KernelUnitLengthX, kernelUni
tLengthX) |
46 DEFINE_ANIMATED_NUMBER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::k
ernelUnitLengthAttr, kernelUnitLengthYIdentifier(), KernelUnitLengthY, kernelUni
tLengthY) | 46 DEFINE_ANIMATED_NUMBER_MULTIPLE_WRAPPERS(SVGFEConvolveMatrixElement, SVGNames::k
ernelUnitLengthAttr, kernelUnitLengthYIdentifier(), KernelUnitLengthY, kernelUni
tLengthY) |
47 DEFINE_ANIMATED_BOOLEAN(SVGFEConvolveMatrixElement, SVGNames::preserveAlphaAttr,
PreserveAlpha, preserveAlpha) | |
48 | 47 |
49 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEConvolveMatrixElement) | 48 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEConvolveMatrixElement) |
50 REGISTER_LOCAL_ANIMATED_PROPERTY(in1) | 49 REGISTER_LOCAL_ANIMATED_PROPERTY(in1) |
51 REGISTER_LOCAL_ANIMATED_PROPERTY(orderX) | 50 REGISTER_LOCAL_ANIMATED_PROPERTY(orderX) |
52 REGISTER_LOCAL_ANIMATED_PROPERTY(orderY) | 51 REGISTER_LOCAL_ANIMATED_PROPERTY(orderY) |
53 REGISTER_LOCAL_ANIMATED_PROPERTY(kernelMatrix) | 52 REGISTER_LOCAL_ANIMATED_PROPERTY(kernelMatrix) |
54 REGISTER_LOCAL_ANIMATED_PROPERTY(divisor) | 53 REGISTER_LOCAL_ANIMATED_PROPERTY(divisor) |
55 REGISTER_LOCAL_ANIMATED_PROPERTY(bias) | 54 REGISTER_LOCAL_ANIMATED_PROPERTY(bias) |
56 REGISTER_LOCAL_ANIMATED_PROPERTY(targetX) | 55 REGISTER_LOCAL_ANIMATED_PROPERTY(targetX) |
57 REGISTER_LOCAL_ANIMATED_PROPERTY(targetY) | 56 REGISTER_LOCAL_ANIMATED_PROPERTY(targetY) |
58 REGISTER_LOCAL_ANIMATED_PROPERTY(edgeMode) | 57 REGISTER_LOCAL_ANIMATED_PROPERTY(edgeMode) |
59 REGISTER_LOCAL_ANIMATED_PROPERTY(kernelUnitLengthX) | 58 REGISTER_LOCAL_ANIMATED_PROPERTY(kernelUnitLengthX) |
60 REGISTER_LOCAL_ANIMATED_PROPERTY(kernelUnitLengthY) | 59 REGISTER_LOCAL_ANIMATED_PROPERTY(kernelUnitLengthY) |
61 REGISTER_LOCAL_ANIMATED_PROPERTY(preserveAlpha) | |
62 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGFilterPrimitiveStandardAttributes) | 60 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGFilterPrimitiveStandardAttributes) |
63 END_REGISTER_ANIMATED_PROPERTIES | 61 END_REGISTER_ANIMATED_PROPERTIES |
64 | 62 |
65 inline SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement(Document& document
) | 63 inline SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement(Document& document
) |
66 : SVGFilterPrimitiveStandardAttributes(SVGNames::feConvolveMatrixTag, docume
nt) | 64 : SVGFilterPrimitiveStandardAttributes(SVGNames::feConvolveMatrixTag, docume
nt) |
| 65 , m_preserveAlpha(SVGAnimatedBoolean::create(this, SVGNames::preserveAlphaAt
tr, SVGBoolean::create())) |
67 , m_edgeMode(EDGEMODE_DUPLICATE) | 66 , m_edgeMode(EDGEMODE_DUPLICATE) |
68 { | 67 { |
69 ScriptWrappable::init(this); | 68 ScriptWrappable::init(this); |
| 69 |
| 70 addToPropertyMap(m_preserveAlpha); |
| 71 |
70 registerAnimatedPropertiesForSVGFEConvolveMatrixElement(); | 72 registerAnimatedPropertiesForSVGFEConvolveMatrixElement(); |
71 } | 73 } |
72 | 74 |
73 PassRefPtr<SVGFEConvolveMatrixElement> SVGFEConvolveMatrixElement::create(Docume
nt& document) | 75 PassRefPtr<SVGFEConvolveMatrixElement> SVGFEConvolveMatrixElement::create(Docume
nt& document) |
74 { | 76 { |
75 return adoptRef(new SVGFEConvolveMatrixElement(document)); | 77 return adoptRef(new SVGFEConvolveMatrixElement(document)); |
76 } | 78 } |
77 | 79 |
78 const AtomicString& SVGFEConvolveMatrixElement::kernelUnitLengthXIdentifier() | 80 const AtomicString& SVGFEConvolveMatrixElement::kernelUnitLengthXIdentifier() |
79 { | 81 { |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 setKernelUnitLengthYBaseValue(y); | 196 setKernelUnitLengthYBaseValue(y); |
195 } else { | 197 } else { |
196 document().accessSVGExtensions()->reportWarning( | 198 document().accessSVGExtensions()->reportWarning( |
197 "feConvolveMatrix: problem parsing kernelUnitLength=\"" + value | 199 "feConvolveMatrix: problem parsing kernelUnitLength=\"" + value |
198 + "\". Filtered element will not be displayed."); | 200 + "\". Filtered element will not be displayed."); |
199 } | 201 } |
200 return; | 202 return; |
201 } | 203 } |
202 | 204 |
203 if (name == SVGNames::preserveAlphaAttr) { | 205 if (name == SVGNames::preserveAlphaAttr) { |
204 if (value == "true") | 206 SVGParsingError parseError = NoError; |
205 setPreserveAlphaBaseValue(true); | 207 m_preserveAlpha->setBaseValueAsString(value, parseError); |
206 else if (value == "false") | 208 reportAttributeParsingError(parseError, name, value); |
207 setPreserveAlphaBaseValue(false); | |
208 else | |
209 document().accessSVGExtensions()->reportWarning( | |
210 "feConvolveMatrix: problem parsing preserveAlphaAttr=\"" + value | |
211 + "\". Filtered element will not be displayed."); | |
212 return; | 209 return; |
213 } | 210 } |
214 | 211 |
215 ASSERT_NOT_REACHED(); | 212 ASSERT_NOT_REACHED(); |
216 } | 213 } |
217 | 214 |
218 bool SVGFEConvolveMatrixElement::setFilterEffectAttribute(FilterEffect* effect,
const QualifiedName& attrName) | 215 bool SVGFEConvolveMatrixElement::setFilterEffectAttribute(FilterEffect* effect,
const QualifiedName& attrName) |
219 { | 216 { |
220 FEConvolveMatrix* convolveMatrix = static_cast<FEConvolveMatrix*>(effect); | 217 FEConvolveMatrix* convolveMatrix = static_cast<FEConvolveMatrix*>(effect); |
221 if (attrName == SVGNames::edgeModeAttr) | 218 if (attrName == SVGNames::edgeModeAttr) |
222 return convolveMatrix->setEdgeMode(edgeModeCurrentValue()); | 219 return convolveMatrix->setEdgeMode(edgeModeCurrentValue()); |
223 if (attrName == SVGNames::divisorAttr) | 220 if (attrName == SVGNames::divisorAttr) |
224 return convolveMatrix->setDivisor(divisorCurrentValue()); | 221 return convolveMatrix->setDivisor(divisorCurrentValue()); |
225 if (attrName == SVGNames::biasAttr) | 222 if (attrName == SVGNames::biasAttr) |
226 return convolveMatrix->setBias(biasCurrentValue()); | 223 return convolveMatrix->setBias(biasCurrentValue()); |
227 if (attrName == SVGNames::targetXAttr) | 224 if (attrName == SVGNames::targetXAttr) |
228 return convolveMatrix->setTargetOffset(IntPoint(targetXCurrentValue(), t
argetYCurrentValue())); | 225 return convolveMatrix->setTargetOffset(IntPoint(targetXCurrentValue(), t
argetYCurrentValue())); |
229 if (attrName == SVGNames::targetYAttr) | 226 if (attrName == SVGNames::targetYAttr) |
230 return convolveMatrix->setTargetOffset(IntPoint(targetXCurrentValue(), t
argetYCurrentValue())); | 227 return convolveMatrix->setTargetOffset(IntPoint(targetXCurrentValue(), t
argetYCurrentValue())); |
231 if (attrName == SVGNames::kernelUnitLengthAttr) | 228 if (attrName == SVGNames::kernelUnitLengthAttr) |
232 return convolveMatrix->setKernelUnitLength(FloatPoint(kernelUnitLengthXC
urrentValue(), kernelUnitLengthYCurrentValue())); | 229 return convolveMatrix->setKernelUnitLength(FloatPoint(kernelUnitLengthXC
urrentValue(), kernelUnitLengthYCurrentValue())); |
233 if (attrName == SVGNames::preserveAlphaAttr) | 230 if (attrName == SVGNames::preserveAlphaAttr) |
234 return convolveMatrix->setPreserveAlpha(preserveAlphaCurrentValue()); | 231 return convolveMatrix->setPreserveAlpha(m_preserveAlpha->currentValue()-
>value()); |
235 | 232 |
236 ASSERT_NOT_REACHED(); | 233 ASSERT_NOT_REACHED(); |
237 return false; | 234 return false; |
238 } | 235 } |
239 | 236 |
240 void SVGFEConvolveMatrixElement::setOrder(float x, float y) | 237 void SVGFEConvolveMatrixElement::setOrder(float x, float y) |
241 { | 238 { |
242 setOrderXBaseValue(x); | 239 setOrderXBaseValue(x); |
243 setOrderYBaseValue(y); | 240 setOrderYBaseValue(y); |
244 invalidate(); | 241 invalidate(); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 if (!hasAttribute(SVGNames::divisorAttr)) { | 329 if (!hasAttribute(SVGNames::divisorAttr)) { |
333 for (int i = 0; i < kernelMatrixSize; ++i) | 330 for (int i = 0; i < kernelMatrixSize; ++i) |
334 divisorValue += kernelMatrix.at(i).value(); | 331 divisorValue += kernelMatrix.at(i).value(); |
335 if (!divisorValue) | 332 if (!divisorValue) |
336 divisorValue = 1; | 333 divisorValue = 1; |
337 } | 334 } |
338 | 335 |
339 RefPtr<FilterEffect> effect = FEConvolveMatrix::create(filter, | 336 RefPtr<FilterEffect> effect = FEConvolveMatrix::create(filter, |
340 IntSize(orderXValue, orderYValue), divisorValue, | 337 IntSize(orderXValue, orderYValue), divisorValue, |
341 biasCurrentValue(), IntPoint(targetXValue, targetYValue), ed
geModeCurrentValue(), | 338 biasCurrentValue(), IntPoint(targetXValue, targetYValue), ed
geModeCurrentValue(), |
342 FloatPoint(kernelUnitLengthXValue, kernelUnitLengthYValue),
preserveAlphaCurrentValue(), kernelMatrix.toFloatVector()); | 339 FloatPoint(kernelUnitLengthXValue, kernelUnitLengthYValue),
m_preserveAlpha->currentValue()->value(), kernelMatrix.toFloatVector()); |
343 effect->inputEffects().append(input1); | 340 effect->inputEffects().append(input1); |
344 return effect.release(); | 341 return effect.release(); |
345 } | 342 } |
346 | 343 |
347 } // namespace WebCore | 344 } // namespace WebCore |
OLD | NEW |