| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Oliver Hunt <oliver@nerget.com> | 2 * Copyright (C) 2006 Oliver Hunt <oliver@nerget.com> |
| 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 11 matching lines...) Expand all Loading... |
| 22 #include "core/svg/SVGFEDisplacementMapElement.h" | 22 #include "core/svg/SVGFEDisplacementMapElement.h" |
| 23 | 23 |
| 24 #include "SVGNames.h" | 24 #include "SVGNames.h" |
| 25 #include "platform/graphics/filters/FilterEffect.h" | 25 #include "platform/graphics/filters/FilterEffect.h" |
| 26 #include "core/svg/SVGElementInstance.h" | 26 #include "core/svg/SVGElementInstance.h" |
| 27 #include "core/svg/graphics/filters/SVGFilterBuilder.h" | 27 #include "core/svg/graphics/filters/SVGFilterBuilder.h" |
| 28 | 28 |
| 29 namespace WebCore { | 29 namespace WebCore { |
| 30 | 30 |
| 31 // Animated property definitions | 31 // Animated property definitions |
| 32 DEFINE_ANIMATED_STRING(SVGFEDisplacementMapElement, SVGNames::inAttr, In1, in1) | |
| 33 DEFINE_ANIMATED_STRING(SVGFEDisplacementMapElement, SVGNames::in2Attr, In2, in2) | |
| 34 DEFINE_ANIMATED_ENUMERATION(SVGFEDisplacementMapElement, SVGNames::xChannelSelec
torAttr, XChannelSelector, xChannelSelector, ChannelSelectorType) | 32 DEFINE_ANIMATED_ENUMERATION(SVGFEDisplacementMapElement, SVGNames::xChannelSelec
torAttr, XChannelSelector, xChannelSelector, ChannelSelectorType) |
| 35 DEFINE_ANIMATED_ENUMERATION(SVGFEDisplacementMapElement, SVGNames::yChannelSelec
torAttr, YChannelSelector, yChannelSelector, ChannelSelectorType) | 33 DEFINE_ANIMATED_ENUMERATION(SVGFEDisplacementMapElement, SVGNames::yChannelSelec
torAttr, YChannelSelector, yChannelSelector, ChannelSelectorType) |
| 36 | 34 |
| 37 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEDisplacementMapElement) | 35 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEDisplacementMapElement) |
| 38 REGISTER_LOCAL_ANIMATED_PROPERTY(in1) | |
| 39 REGISTER_LOCAL_ANIMATED_PROPERTY(in2) | |
| 40 REGISTER_LOCAL_ANIMATED_PROPERTY(xChannelSelector) | 36 REGISTER_LOCAL_ANIMATED_PROPERTY(xChannelSelector) |
| 41 REGISTER_LOCAL_ANIMATED_PROPERTY(yChannelSelector) | 37 REGISTER_LOCAL_ANIMATED_PROPERTY(yChannelSelector) |
| 42 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGFilterPrimitiveStandardAttributes) | 38 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGFilterPrimitiveStandardAttributes) |
| 43 END_REGISTER_ANIMATED_PROPERTIES | 39 END_REGISTER_ANIMATED_PROPERTIES |
| 44 | 40 |
| 45 inline SVGFEDisplacementMapElement::SVGFEDisplacementMapElement(Document& docume
nt) | 41 inline SVGFEDisplacementMapElement::SVGFEDisplacementMapElement(Document& docume
nt) |
| 46 : SVGFilterPrimitiveStandardAttributes(SVGNames::feDisplacementMapTag, docum
ent) | 42 : SVGFilterPrimitiveStandardAttributes(SVGNames::feDisplacementMapTag, docum
ent) |
| 47 , m_scale(SVGAnimatedNumber::create(this, SVGNames::scaleAttr, SVGNumber::cr
eate(0))) | 43 , m_scale(SVGAnimatedNumber::create(this, SVGNames::scaleAttr, SVGNumber::cr
eate(0))) |
| 44 , m_in1(SVGAnimatedString::create(this, SVGNames::inAttr, SVGString::create(
))) |
| 45 , m_in2(SVGAnimatedString::create(this, SVGNames::in2Attr, SVGString::create
())) |
| 48 , m_xChannelSelector(CHANNEL_A) | 46 , m_xChannelSelector(CHANNEL_A) |
| 49 , m_yChannelSelector(CHANNEL_A) | 47 , m_yChannelSelector(CHANNEL_A) |
| 50 { | 48 { |
| 51 ScriptWrappable::init(this); | 49 ScriptWrappable::init(this); |
| 52 | 50 |
| 53 addToPropertyMap(m_scale); | 51 addToPropertyMap(m_scale); |
| 52 addToPropertyMap(m_in1); |
| 53 addToPropertyMap(m_in2); |
| 54 registerAnimatedPropertiesForSVGFEDisplacementMapElement(); | 54 registerAnimatedPropertiesForSVGFEDisplacementMapElement(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 PassRefPtr<SVGFEDisplacementMapElement> SVGFEDisplacementMapElement::create(Docu
ment& document) | 57 PassRefPtr<SVGFEDisplacementMapElement> SVGFEDisplacementMapElement::create(Docu
ment& document) |
| 58 { | 58 { |
| 59 return adoptRef(new SVGFEDisplacementMapElement(document)); | 59 return adoptRef(new SVGFEDisplacementMapElement(document)); |
| 60 } | 60 } |
| 61 | 61 |
| 62 bool SVGFEDisplacementMapElement::isSupportedAttribute(const QualifiedName& attr
Name) | 62 bool SVGFEDisplacementMapElement::isSupportedAttribute(const QualifiedName& attr
Name) |
| 63 { | 63 { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 86 return; | 86 return; |
| 87 } | 87 } |
| 88 | 88 |
| 89 if (name == SVGNames::yChannelSelectorAttr) { | 89 if (name == SVGNames::yChannelSelectorAttr) { |
| 90 ChannelSelectorType propertyValue = SVGPropertyTraits<ChannelSelectorTyp
e>::fromString(value); | 90 ChannelSelectorType propertyValue = SVGPropertyTraits<ChannelSelectorTyp
e>::fromString(value); |
| 91 if (propertyValue > 0) | 91 if (propertyValue > 0) |
| 92 setYChannelSelectorBaseValue(propertyValue); | 92 setYChannelSelectorBaseValue(propertyValue); |
| 93 return; | 93 return; |
| 94 } | 94 } |
| 95 | 95 |
| 96 if (name == SVGNames::inAttr) { | |
| 97 setIn1BaseValue(value); | |
| 98 return; | |
| 99 } | |
| 100 | |
| 101 if (name == SVGNames::in2Attr) { | |
| 102 setIn2BaseValue(value); | |
| 103 return; | |
| 104 } | |
| 105 | |
| 106 SVGParsingError parseError = NoError; | 96 SVGParsingError parseError = NoError; |
| 107 | 97 |
| 108 if (name == SVGNames::scaleAttr) | 98 if (name == SVGNames::inAttr) |
| 99 m_in1->setBaseValueAsString(value, parseError); |
| 100 else if (name == SVGNames::in2Attr) |
| 101 m_in2->setBaseValueAsString(value, parseError); |
| 102 else if (name == SVGNames::scaleAttr) |
| 109 m_scale->setBaseValueAsString(value, parseError); | 103 m_scale->setBaseValueAsString(value, parseError); |
| 110 else | 104 else |
| 111 ASSERT_NOT_REACHED(); | 105 ASSERT_NOT_REACHED(); |
| 112 | 106 |
| 113 reportAttributeParsingError(parseError, name, value); | 107 reportAttributeParsingError(parseError, name, value); |
| 114 } | 108 } |
| 115 | 109 |
| 116 bool SVGFEDisplacementMapElement::setFilterEffectAttribute(FilterEffect* effect,
const QualifiedName& attrName) | 110 bool SVGFEDisplacementMapElement::setFilterEffectAttribute(FilterEffect* effect,
const QualifiedName& attrName) |
| 117 { | 111 { |
| 118 FEDisplacementMap* displacementMap = static_cast<FEDisplacementMap*>(effect)
; | 112 FEDisplacementMap* displacementMap = static_cast<FEDisplacementMap*>(effect)
; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 144 if (attrName == SVGNames::inAttr || attrName == SVGNames::in2Attr) { | 138 if (attrName == SVGNames::inAttr || attrName == SVGNames::in2Attr) { |
| 145 invalidate(); | 139 invalidate(); |
| 146 return; | 140 return; |
| 147 } | 141 } |
| 148 | 142 |
| 149 ASSERT_NOT_REACHED(); | 143 ASSERT_NOT_REACHED(); |
| 150 } | 144 } |
| 151 | 145 |
| 152 PassRefPtr<FilterEffect> SVGFEDisplacementMapElement::build(SVGFilterBuilder* fi
lterBuilder, Filter* filter) | 146 PassRefPtr<FilterEffect> SVGFEDisplacementMapElement::build(SVGFilterBuilder* fi
lterBuilder, Filter* filter) |
| 153 { | 147 { |
| 154 FilterEffect* input1 = filterBuilder->getEffectById(AtomicString(in1CurrentV
alue())); | 148 FilterEffect* input1 = filterBuilder->getEffectById(AtomicString(m_in1->curr
entValue()->value())); |
| 155 FilterEffect* input2 = filterBuilder->getEffectById(AtomicString(in2CurrentV
alue())); | 149 FilterEffect* input2 = filterBuilder->getEffectById(AtomicString(m_in2->curr
entValue()->value())); |
| 156 | 150 |
| 157 if (!input1 || !input2) | 151 if (!input1 || !input2) |
| 158 return 0; | 152 return 0; |
| 159 | 153 |
| 160 RefPtr<FilterEffect> effect = FEDisplacementMap::create(filter, xChannelSele
ctorCurrentValue(), yChannelSelectorCurrentValue(), m_scale->currentValue()->val
ue()); | 154 RefPtr<FilterEffect> effect = FEDisplacementMap::create(filter, xChannelSele
ctorCurrentValue(), yChannelSelectorCurrentValue(), m_scale->currentValue()->val
ue()); |
| 161 FilterEffectVector& inputEffects = effect->inputEffects(); | 155 FilterEffectVector& inputEffects = effect->inputEffects(); |
| 162 inputEffects.reserveCapacity(2); | 156 inputEffects.reserveCapacity(2); |
| 163 inputEffects.append(input1); | 157 inputEffects.append(input1); |
| 164 inputEffects.append(input2); | 158 inputEffects.append(input2); |
| 165 return effect.release(); | 159 return effect.release(); |
| 166 } | 160 } |
| 167 | 161 |
| 168 } | 162 } |
| OLD | NEW |