namespace WebCore {
-// Animated property definitions
-DEFINE_ANIMATED_ENUMERATION(SVGFilterElement, SVGNames::filterUnitsAttr, FilterUnits, filterUnits, SVGUnitTypes::SVGUnitType)
-DEFINE_ANIMATED_ENUMERATION(SVGFilterElement, SVGNames::primitiveUnitsAttr, PrimitiveUnits, primitiveUnits, SVGUnitTypes::SVGUnitType)
-DEFINE_ANIMATED_INTEGER_MULTIPLE_WRAPPERS(SVGFilterElement, SVGNames::filterResAttr, filterResXIdentifier(), FilterResX, filterResX)
-DEFINE_ANIMATED_INTEGER_MULTIPLE_WRAPPERS(SVGFilterElement, SVGNames::filterResAttr, filterResYIdentifier(), FilterResY, filterResY)
-DEFINE_ANIMATED_STRING(SVGFilterElement, XLinkNames::hrefAttr, Href, href)
-
-BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGFilterElement)
- REGISTER_LOCAL_ANIMATED_PROPERTY(filterUnits)
- REGISTER_LOCAL_ANIMATED_PROPERTY(primitiveUnits)
- REGISTER_LOCAL_ANIMATED_PROPERTY(filterResX)
- REGISTER_LOCAL_ANIMATED_PROPERTY(filterResY)
- REGISTER_LOCAL_ANIMATED_PROPERTY(href)
-END_REGISTER_ANIMATED_PROPERTIES
-
inline SVGFilterElement::SVGFilterElement(Document& document)
: SVGElement(SVGNames::filterTag, document)
- , m_x(SVGAnimatedLength::create(this, SVGNames::xAttr, SVGLength::create(LengthModeWidth)))
- , m_y(SVGAnimatedLength::create(this, SVGNames::yAttr, SVGLength::create(LengthModeHeight)))
- , m_width(SVGAnimatedLength::create(this, SVGNames::widthAttr, SVGLength::create(LengthModeWidth)))
- , m_height(SVGAnimatedLength::create(this, SVGNames::heightAttr, SVGLength::create(LengthModeHeight)))
- , m_filterUnits(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
- , m_primitiveUnits(SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE)
+ , SVGURIReference(this)
+ , m_x(SVGAnimatedLength::create(this, SVGNames::xAttr, SVGLength::create(LengthModeWidth), AllowNegativeLengths))
+ , m_y(SVGAnimatedLength::create(this, SVGNames::yAttr, SVGLength::create(LengthModeHeight), AllowNegativeLengths))
+ , m_width(SVGAnimatedLength::create(this, SVGNames::widthAttr, SVGLength::create(LengthModeWidth), ForbidNegativeLengths))
+ , m_height(SVGAnimatedLength::create(this, SVGNames::heightAttr, SVGLength::create(LengthModeHeight), ForbidNegativeLengths))
+ , m_filterUnits(SVGAnimatedEnumeration<SVGUnitTypes::SVGUnitType>::create(this, SVGNames::filterUnitsAttr, SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX))
+ , m_primitiveUnits(SVGAnimatedEnumeration<SVGUnitTypes::SVGUnitType>::create(this, SVGNames::primitiveUnitsAttr, SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE))
+ , m_filterRes(SVGAnimatedIntegerOptionalInteger::create(this, SVGNames::filterResAttr))
{
ScriptWrappable::init(this);
addToPropertyMap(m_y);
addToPropertyMap(m_width);
addToPropertyMap(m_height);
- registerAnimatedPropertiesForSVGFilterElement();
+ addToPropertyMap(m_filterUnits);
+ addToPropertyMap(m_primitiveUnits);
+ addToPropertyMap(m_filterRes);
}
PassRefPtr<SVGFilterElement> SVGFilterElement::create(Document& document)
return adoptRef(new SVGFilterElement(document));
}
-const AtomicString& SVGFilterElement::filterResXIdentifier()
-{
- DEFINE_STATIC_LOCAL(AtomicString, s_identifier, ("SVGFilterResX", AtomicString::ConstructFromLiteral));
- return s_identifier;
-}
-
-const AtomicString& SVGFilterElement::filterResYIdentifier()
-{
- DEFINE_STATIC_LOCAL(AtomicString, s_identifier, ("SVGFilterResY", AtomicString::ConstructFromLiteral));
- return s_identifier;
-}
-
-void SVGFilterElement::setFilterRes(unsigned filterResX, unsigned filterResY)
+void SVGFilterElement::setFilterRes(unsigned x, unsigned y)
{
- setFilterResXBaseValue(filterResX);
- setFilterResYBaseValue(filterResY);
+ filterResX()->baseValue()->setValue(x);
+ filterResY()->baseValue()->setValue(y);
- RenderSVGResourceContainer* renderer = toRenderSVGResourceContainer(this->renderer());
- if (renderer)
- renderer->invalidateCacheAndMarkForLayout();
+ invalidateSVGAttributes();
+ svgAttributeChanged(SVGNames::filterResAttr);
}
bool SVGFilterElement::isSupportedAttribute(const QualifiedName& attrName)
if (!isSupportedAttribute(name))
SVGElement::parseAttribute(name, value);
- else if (name == SVGNames::filterUnitsAttr) {
- SVGUnitTypes::SVGUnitType propertyValue = SVGPropertyTraits<SVGUnitTypes::SVGUnitType>::fromString(value);
- if (propertyValue > 0)
- setFilterUnitsBaseValue(propertyValue);
- } else if (name == SVGNames::primitiveUnitsAttr) {
- SVGUnitTypes::SVGUnitType propertyValue = SVGPropertyTraits<SVGUnitTypes::SVGUnitType>::fromString(value);
- if (propertyValue > 0)
- setPrimitiveUnitsBaseValue(propertyValue);
- } else if (name == SVGNames::xAttr)
- m_x->setBaseValueAsString(value, AllowNegativeLengths, parseError);
+ else if (name == SVGNames::filterUnitsAttr)
+ m_filterUnits->setBaseValueAsString(value, parseError);
+ else if (name == SVGNames::primitiveUnitsAttr)
+ m_primitiveUnits->setBaseValueAsString(value, parseError);
+ else if (name == SVGNames::xAttr)
+ m_x->setBaseValueAsString(value, parseError);
else if (name == SVGNames::yAttr)
- m_y->setBaseValueAsString(value, AllowNegativeLengths, parseError);
+ m_y->setBaseValueAsString(value, parseError);
else if (name == SVGNames::widthAttr)
- m_width->setBaseValueAsString(value, ForbidNegativeLengths, parseError);
+ m_width->setBaseValueAsString(value, parseError);
else if (name == SVGNames::heightAttr)
- m_height->setBaseValueAsString(value, ForbidNegativeLengths, parseError);
- else if (name == SVGNames::filterResAttr) {
- float x, y;
- if (parseNumberOptionalNumber(value, x, y)) {
- setFilterResXBaseValue(x);
- setFilterResYBaseValue(y);
- }
- } else if (SVGURIReference::parseAttribute(name, value)) {
+ m_height->setBaseValueAsString(value, parseError);
+ else if (name == SVGNames::filterResAttr)
+ m_filterRes->setBaseValueAsString(value, parseError);
+ else if (SVGURIReference::parseAttribute(name, value, parseError)) {
} else
ASSERT_NOT_REACHED();
return;
}
- SVGElementInstance::InvalidationGuard invalidationGuard(this);
+ SVGElement::InvalidationGuard invalidationGuard(this);
if (attrName == SVGNames::xAttr
|| attrName == SVGNames::yAttr