OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "core/svg/SVGFEBlendElement.h" | 23 #include "core/svg/SVGFEBlendElement.h" |
24 | 24 |
25 #include "SVGNames.h" | 25 #include "SVGNames.h" |
26 #include "platform/graphics/filters/FilterEffect.h" | 26 #include "platform/graphics/filters/FilterEffect.h" |
27 #include "core/svg/SVGElementInstance.h" | 27 #include "core/svg/SVGElementInstance.h" |
28 #include "core/svg/graphics/filters/SVGFilterBuilder.h" | 28 #include "core/svg/graphics/filters/SVGFilterBuilder.h" |
29 | 29 |
30 namespace WebCore { | 30 namespace WebCore { |
31 | 31 |
32 // Animated property definitions | 32 // Animated property definitions |
33 DEFINE_ANIMATED_STRING(SVGFEBlendElement, SVGNames::inAttr, In1, in1) | |
34 DEFINE_ANIMATED_STRING(SVGFEBlendElement, SVGNames::in2Attr, In2, in2) | |
35 DEFINE_ANIMATED_ENUMERATION(SVGFEBlendElement, SVGNames::modeAttr, Mode, mode, B
lendModeType) | 33 DEFINE_ANIMATED_ENUMERATION(SVGFEBlendElement, SVGNames::modeAttr, Mode, mode, B
lendModeType) |
36 | 34 |
37 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEBlendElement) | 35 BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEBlendElement) |
38 REGISTER_LOCAL_ANIMATED_PROPERTY(in1) | |
39 REGISTER_LOCAL_ANIMATED_PROPERTY(in2) | |
40 REGISTER_LOCAL_ANIMATED_PROPERTY(mode) | 36 REGISTER_LOCAL_ANIMATED_PROPERTY(mode) |
41 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGFilterPrimitiveStandardAttributes) | 37 REGISTER_PARENT_ANIMATED_PROPERTIES(SVGFilterPrimitiveStandardAttributes) |
42 END_REGISTER_ANIMATED_PROPERTIES | 38 END_REGISTER_ANIMATED_PROPERTIES |
43 | 39 |
44 inline SVGFEBlendElement::SVGFEBlendElement(Document& document) | 40 inline SVGFEBlendElement::SVGFEBlendElement(Document& document) |
45 : SVGFilterPrimitiveStandardAttributes(SVGNames::feBlendTag, document) | 41 : SVGFilterPrimitiveStandardAttributes(SVGNames::feBlendTag, document) |
| 42 , m_in1(SVGAnimatedString::create(this, SVGNames::inAttr, SVGString::create(
))) |
| 43 , m_in2(SVGAnimatedString::create(this, SVGNames::in2Attr, SVGString::create
())) |
46 , m_mode(FEBLEND_MODE_NORMAL) | 44 , m_mode(FEBLEND_MODE_NORMAL) |
47 { | 45 { |
48 ScriptWrappable::init(this); | 46 ScriptWrappable::init(this); |
| 47 addToPropertyMap(m_in1); |
| 48 addToPropertyMap(m_in2); |
49 registerAnimatedPropertiesForSVGFEBlendElement(); | 49 registerAnimatedPropertiesForSVGFEBlendElement(); |
50 } | 50 } |
51 | 51 |
52 PassRefPtr<SVGFEBlendElement> SVGFEBlendElement::create(Document& document) | 52 PassRefPtr<SVGFEBlendElement> SVGFEBlendElement::create(Document& document) |
53 { | 53 { |
54 return adoptRef(new SVGFEBlendElement(document)); | 54 return adoptRef(new SVGFEBlendElement(document)); |
55 } | 55 } |
56 | 56 |
57 bool SVGFEBlendElement::isSupportedAttribute(const QualifiedName& attrName) | 57 bool SVGFEBlendElement::isSupportedAttribute(const QualifiedName& attrName) |
58 { | 58 { |
(...skipping 13 matching lines...) Expand all Loading... |
72 return; | 72 return; |
73 } | 73 } |
74 | 74 |
75 if (name == SVGNames::modeAttr) { | 75 if (name == SVGNames::modeAttr) { |
76 BlendModeType propertyValue = SVGPropertyTraits<BlendModeType>::fromStri
ng(value); | 76 BlendModeType propertyValue = SVGPropertyTraits<BlendModeType>::fromStri
ng(value); |
77 if (propertyValue > 0) | 77 if (propertyValue > 0) |
78 setModeBaseValue(propertyValue); | 78 setModeBaseValue(propertyValue); |
79 return; | 79 return; |
80 } | 80 } |
81 | 81 |
82 if (name == SVGNames::inAttr) { | 82 SVGParsingError parseError = NoError; |
83 setIn1BaseValue(value); | |
84 return; | |
85 } | |
86 | 83 |
87 if (name == SVGNames::in2Attr) { | 84 if (name == SVGNames::inAttr) |
88 setIn2BaseValue(value); | 85 m_in1->setBaseValueAsString(value, parseError); |
89 return; | 86 else if (name == SVGNames::in2Attr) |
90 } | 87 m_in2->setBaseValueAsString(value, parseError); |
| 88 else |
| 89 ASSERT_NOT_REACHED(); |
91 | 90 |
92 ASSERT_NOT_REACHED(); | 91 reportAttributeParsingError(parseError, name, value); |
93 } | 92 } |
94 | 93 |
95 bool SVGFEBlendElement::setFilterEffectAttribute(FilterEffect* effect, const Qua
lifiedName& attrName) | 94 bool SVGFEBlendElement::setFilterEffectAttribute(FilterEffect* effect, const Qua
lifiedName& attrName) |
96 { | 95 { |
97 FEBlend* blend = static_cast<FEBlend*>(effect); | 96 FEBlend* blend = static_cast<FEBlend*>(effect); |
98 if (attrName == SVGNames::modeAttr) | 97 if (attrName == SVGNames::modeAttr) |
99 return blend->setBlendMode(modeCurrentValue()); | 98 return blend->setBlendMode(modeCurrentValue()); |
100 | 99 |
101 ASSERT_NOT_REACHED(); | 100 ASSERT_NOT_REACHED(); |
102 return false; | 101 return false; |
(...skipping 16 matching lines...) Expand all Loading... |
119 if (attrName == SVGNames::inAttr || attrName == SVGNames::in2Attr) { | 118 if (attrName == SVGNames::inAttr || attrName == SVGNames::in2Attr) { |
120 invalidate(); | 119 invalidate(); |
121 return; | 120 return; |
122 } | 121 } |
123 | 122 |
124 ASSERT_NOT_REACHED(); | 123 ASSERT_NOT_REACHED(); |
125 } | 124 } |
126 | 125 |
127 PassRefPtr<FilterEffect> SVGFEBlendElement::build(SVGFilterBuilder* filterBuilde
r, Filter* filter) | 126 PassRefPtr<FilterEffect> SVGFEBlendElement::build(SVGFilterBuilder* filterBuilde
r, Filter* filter) |
128 { | 127 { |
129 FilterEffect* input1 = filterBuilder->getEffectById(AtomicString(in1CurrentV
alue())); | 128 FilterEffect* input1 = filterBuilder->getEffectById(AtomicString(m_in1->curr
entValue()->value())); |
130 FilterEffect* input2 = filterBuilder->getEffectById(AtomicString(in2CurrentV
alue())); | 129 FilterEffect* input2 = filterBuilder->getEffectById(AtomicString(m_in2->curr
entValue()->value())); |
131 | 130 |
132 if (!input1 || !input2) | 131 if (!input1 || !input2) |
133 return 0; | 132 return 0; |
134 | 133 |
135 RefPtr<FilterEffect> effect = FEBlend::create(filter, modeCurrentValue()); | 134 RefPtr<FilterEffect> effect = FEBlend::create(filter, modeCurrentValue()); |
136 FilterEffectVector& inputEffects = effect->inputEffects(); | 135 FilterEffectVector& inputEffects = effect->inputEffects(); |
137 inputEffects.reserveCapacity(2); | 136 inputEffects.reserveCapacity(2); |
138 inputEffects.append(input1); | 137 inputEffects.append(input1); |
139 inputEffects.append(input2); | 138 inputEffects.append(input2); |
140 return effect.release(); | 139 return effect.release(); |
141 } | 140 } |
142 | 141 |
143 } | 142 } |
OLD | NEW |