#include "core/svg/SVGFEComponentTransferElement.h"
-#include "SVGNames.h"
-#include "platform/graphics/filters/FilterEffect.h"
+#include "core/SVGNames.h"
+#include "core/dom/ElementTraversal.h"
#include "core/svg/SVGFEFuncAElement.h"
#include "core/svg/SVGFEFuncBElement.h"
#include "core/svg/SVGFEFuncGElement.h"
#include "core/svg/SVGFEFuncRElement.h"
#include "core/svg/graphics/filters/SVGFilterBuilder.h"
+#include "platform/graphics/filters/FilterEffect.h"
-namespace WebCore {
-
-// Animated property definitions
-DEFINE_ANIMATED_STRING(SVGFEComponentTransferElement, SVGNames::inAttr, In1, in1)
-
-BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEComponentTransferElement)
- REGISTER_LOCAL_ANIMATED_PROPERTY(in1)
- REGISTER_PARENT_ANIMATED_PROPERTIES(SVGFilterPrimitiveStandardAttributes)
-END_REGISTER_ANIMATED_PROPERTIES
+namespace blink {
inline SVGFEComponentTransferElement::SVGFEComponentTransferElement(Document& document)
: SVGFilterPrimitiveStandardAttributes(SVGNames::feComponentTransferTag, document)
+ , m_in1(SVGAnimatedString::create(this, SVGNames::inAttr, SVGString::create()))
{
- ScriptWrappable::init(this);
- registerAnimatedPropertiesForSVGFEComponentTransferElement();
+ addToPropertyMap(m_in1);
}
-PassRefPtr<SVGFEComponentTransferElement> SVGFEComponentTransferElement::create(Document& document)
-{
- return adoptRef(new SVGFEComponentTransferElement(document));
-}
+DEFINE_NODE_FACTORY(SVGFEComponentTransferElement)
bool SVGFEComponentTransferElement::isSupportedAttribute(const QualifiedName& attrName)
{
return;
}
- if (name == SVGNames::inAttr) {
- setIn1BaseValue(value);
- return;
- }
+ SVGParsingError parseError = NoError;
+
+ if (name == SVGNames::inAttr)
+ m_in1->setBaseValueAsString(value, parseError);
+ else
+ ASSERT_NOT_REACHED();
- ASSERT_NOT_REACHED();
+ reportAttributeParsingError(parseError, name, value);
}
PassRefPtr<FilterEffect> SVGFEComponentTransferElement::build(SVGFilterBuilder* filterBuilder, Filter* filter)
{
- FilterEffect* input1 = filterBuilder->getEffectById(AtomicString(in1CurrentValue()));
+ FilterEffect* input1 = filterBuilder->getEffectById(AtomicString(m_in1->currentValue()->value()));
if (!input1)
- return 0;
+ return nullptr;
ComponentTransferFunction red;
ComponentTransferFunction green;
ComponentTransferFunction blue;
ComponentTransferFunction alpha;
- for (Node* node = firstChild(); node; node = node->nextSibling()) {
- if (node->hasTagName(SVGNames::feFuncRTag))
- red = toSVGFEFuncRElement(node)->transferFunction();
- else if (node->hasTagName(SVGNames::feFuncGTag))
- green = toSVGFEFuncGElement(node)->transferFunction();
- else if (node->hasTagName(SVGNames::feFuncBTag))
- blue = toSVGFEFuncBElement(node)->transferFunction();
- else if (node->hasTagName(SVGNames::feFuncATag))
- alpha = toSVGFEFuncAElement(node)->transferFunction();
+ for (SVGElement* element = Traversal<SVGElement>::firstChild(*this); element; element = Traversal<SVGElement>::nextSibling(*element)) {
+ if (isSVGFEFuncRElement(*element))
+ red = toSVGFEFuncRElement(*element).transferFunction();
+ else if (isSVGFEFuncGElement(*element))
+ green = toSVGFEFuncGElement(*element).transferFunction();
+ else if (isSVGFEFuncBElement(*element))
+ blue = toSVGFEFuncBElement(*element).transferFunction();
+ else if (isSVGFEFuncAElement(*element))
+ alpha = toSVGFEFuncAElement(*element).transferFunction();
}
RefPtr<FilterEffect> effect = FEComponentTransfer::create(filter, red, green, blue, alpha);