diff options
Diffstat (limited to 'Source/WebCore/svg/SVGFEBlendElement.cpp')
-rw-r--r-- | Source/WebCore/svg/SVGFEBlendElement.cpp | 56 |
1 files changed, 15 insertions, 41 deletions
diff --git a/Source/WebCore/svg/SVGFEBlendElement.cpp b/Source/WebCore/svg/SVGFEBlendElement.cpp index 8548caa3a..f29ea3374 100644 --- a/Source/WebCore/svg/SVGFEBlendElement.cpp +++ b/Source/WebCore/svg/SVGFEBlendElement.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> + * Copyright (C) 2014 Adobe Systems Incorporated. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -19,13 +20,9 @@ */ #include "config.h" - -#if ENABLE(SVG) && ENABLE(FILTERS) #include "SVGFEBlendElement.h" -#include "Attribute.h" #include "FilterEffect.h" -#include "SVGElementInstance.h" #include "SVGFilterBuilder.h" #include "SVGNames.h" @@ -34,7 +31,7 @@ namespace WebCore { // Animated property definitions DEFINE_ANIMATED_STRING(SVGFEBlendElement, SVGNames::inAttr, In1, in1) DEFINE_ANIMATED_STRING(SVGFEBlendElement, SVGNames::in2Attr, In2, in2) -DEFINE_ANIMATED_ENUMERATION(SVGFEBlendElement, SVGNames::modeAttr, Mode, mode, BlendModeType) +DEFINE_ANIMATED_ENUMERATION(SVGFEBlendElement, SVGNames::modeAttr, Mode, mode, BlendMode) BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFEBlendElement) REGISTER_LOCAL_ANIMATED_PROPERTY(in1) @@ -45,39 +42,23 @@ END_REGISTER_ANIMATED_PROPERTIES inline SVGFEBlendElement::SVGFEBlendElement(const QualifiedName& tagName, Document& document) : SVGFilterPrimitiveStandardAttributes(tagName, document) - , m_mode(FEBLEND_MODE_NORMAL) + , m_mode(BlendModeNormal) { ASSERT(hasTagName(SVGNames::feBlendTag)); registerAnimatedPropertiesForSVGFEBlendElement(); } -PassRefPtr<SVGFEBlendElement> SVGFEBlendElement::create(const QualifiedName& tagName, Document& document) -{ - return adoptRef(new SVGFEBlendElement(tagName, document)); -} - -bool SVGFEBlendElement::isSupportedAttribute(const QualifiedName& attrName) +Ref<SVGFEBlendElement> SVGFEBlendElement::create(const QualifiedName& tagName, Document& document) { - DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, supportedAttributes, ()); - if (supportedAttributes.isEmpty()) { - supportedAttributes.add(SVGNames::modeAttr); - supportedAttributes.add(SVGNames::inAttr); - supportedAttributes.add(SVGNames::in2Attr); - } - return supportedAttributes.contains<SVGAttributeHashTranslator>(attrName); + return adoptRef(*new SVGFEBlendElement(tagName, document)); } void SVGFEBlendElement::parseAttribute(const QualifiedName& name, const AtomicString& value) { - if (!isSupportedAttribute(name)) { - SVGFilterPrimitiveStandardAttributes::parseAttribute(name, value); - return; - } - if (name == SVGNames::modeAttr) { - BlendModeType propertyValue = SVGPropertyTraits<BlendModeType>::fromString(value); - if (propertyValue > 0) - setModeBaseValue(propertyValue); + BlendMode mode = BlendModeNormal; + if (parseBlendMode(value, mode)) + setModeBaseValue(mode); return; } @@ -91,7 +72,7 @@ void SVGFEBlendElement::parseAttribute(const QualifiedName& name, const AtomicSt return; } - ASSERT_NOT_REACHED(); + SVGFilterPrimitiveStandardAttributes::parseAttribute(name, value); } bool SVGFEBlendElement::setFilterEffectAttribute(FilterEffect* effect, const QualifiedName& attrName) @@ -106,42 +87,35 @@ bool SVGFEBlendElement::setFilterEffectAttribute(FilterEffect* effect, const Qua void SVGFEBlendElement::svgAttributeChanged(const QualifiedName& attrName) { - if (!isSupportedAttribute(attrName)) { - SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName); - return; - } - - SVGElementInstance::InvalidationGuard invalidationGuard(this); - if (attrName == SVGNames::modeAttr) { + InstanceInvalidationGuard guard(*this); primitiveAttributeChanged(attrName); return; } if (attrName == SVGNames::inAttr || attrName == SVGNames::in2Attr) { + InstanceInvalidationGuard guard(*this); invalidate(); return; } - ASSERT_NOT_REACHED(); + SVGFilterPrimitiveStandardAttributes::svgAttributeChanged(attrName); } -PassRefPtr<FilterEffect> SVGFEBlendElement::build(SVGFilterBuilder* filterBuilder, Filter* filter) +RefPtr<FilterEffect> SVGFEBlendElement::build(SVGFilterBuilder* filterBuilder, Filter& filter) { FilterEffect* input1 = filterBuilder->getEffectById(in1()); FilterEffect* input2 = filterBuilder->getEffectById(in2()); if (!input1 || !input2) - return 0; + return nullptr; RefPtr<FilterEffect> effect = FEBlend::create(filter, mode()); FilterEffectVector& inputEffects = effect->inputEffects(); inputEffects.reserveCapacity(2); inputEffects.append(input1); inputEffects.append(input2); - return effect.release(); + return effect; } } - -#endif // ENABLE(SVG) |