Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / svg / SVGFEComponentTransferElement.cpp
index 653ee00..918d0dc 100644 (file)
 
 #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)
 {
@@ -67,35 +57,37 @@ void SVGFEComponentTransferElement::parseAttribute(const QualifiedName& name, co
         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);