#include "core/svg/SVGPatternElement.h"
#include "XLinkNames.h"
+#include "core/dom/ElementTraversal.h"
#include "core/rendering/svg/RenderSVGResourcePattern.h"
#include "core/svg/PatternAttributes.h"
#include "core/svg/SVGElementInstance.h"
DEFINE_ANIMATED_ENUMERATION(SVGPatternElement, SVGNames::patternUnitsAttr, PatternUnits, patternUnits, SVGUnitTypes::SVGUnitType)
DEFINE_ANIMATED_ENUMERATION(SVGPatternElement, SVGNames::patternContentUnitsAttr, PatternContentUnits, patternContentUnits, SVGUnitTypes::SVGUnitType)
DEFINE_ANIMATED_TRANSFORM_LIST(SVGPatternElement, SVGNames::patternTransformAttr, PatternTransform, patternTransform)
-DEFINE_ANIMATED_STRING(SVGPatternElement, XLinkNames::hrefAttr, Href, href)
BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGPatternElement)
REGISTER_LOCAL_ANIMATED_PROPERTY(patternUnits)
REGISTER_LOCAL_ANIMATED_PROPERTY(patternContentUnits)
REGISTER_LOCAL_ANIMATED_PROPERTY(patternTransform)
- REGISTER_LOCAL_ANIMATED_PROPERTY(href)
REGISTER_PARENT_ANIMATED_PROPERTIES(SVGElement)
- REGISTER_PARENT_ANIMATED_PROPERTIES(SVGTests)
END_REGISTER_ANIMATED_PROPERTIES
inline SVGPatternElement::SVGPatternElement(Document& document)
: SVGElement(SVGNames::patternTag, document)
+ , SVGURIReference(this)
+ , SVGTests(this)
+ , SVGFitToViewBox(this)
, 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_viewBox(SVGAnimatedRect::create(this, SVGNames::viewBoxAttr))
- , m_preserveAspectRatio(SVGAnimatedPreserveAspectRatio::create(this, SVGNames::preserveAspectRatioAttr, SVGPreserveAspectRatio::create()))
, m_patternUnits(SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
, m_patternContentUnits(SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE)
{
addToPropertyMap(m_y);
addToPropertyMap(m_width);
addToPropertyMap(m_height);
- addToPropertyMap(m_viewBox);
- addToPropertyMap(m_preserveAspectRatio);
registerAnimatedPropertiesForSVGPatternElement();
}
{
SVGParsingError parseError = NoError;
- if (!isSupportedAttribute(name))
+ if (!isSupportedAttribute(name)) {
SVGElement::parseAttribute(name, value);
- else if (name == SVGNames::patternUnitsAttr) {
+ } else if (name == SVGNames::patternUnitsAttr) {
SVGUnitTypes::SVGUnitType propertyValue = SVGPropertyTraits<SVGUnitTypes::SVGUnitType>::fromString(value);
if (propertyValue > 0)
setPatternUnitsBaseValue(propertyValue);
detachAnimatedPatternTransformListWrappers(newList.size());
setPatternTransformBaseValue(newList);
return;
- } else if (name == SVGNames::xAttr)
+ } else if (name == SVGNames::xAttr) {
m_x->setBaseValueAsString(value, AllowNegativeLengths, parseError);
- else if (name == SVGNames::yAttr)
+ } else if (name == SVGNames::yAttr) {
m_y->setBaseValueAsString(value, AllowNegativeLengths, parseError);
- else if (name == SVGNames::widthAttr)
+ } else if (name == SVGNames::widthAttr) {
m_width->setBaseValueAsString(value, ForbidNegativeLengths, parseError);
- else if (name == SVGNames::heightAttr)
+ } else if (name == SVGNames::heightAttr) {
m_height->setBaseValueAsString(value, ForbidNegativeLengths, parseError);
- else if (SVGURIReference::parseAttribute(name, value)
- || SVGTests::parseAttribute(name, value)
- || SVGFitToViewBox::parseAttribute(this, name, value)) {
- } else
+ } else if (SVGURIReference::parseAttribute(name, value, parseError)) {
+ } else if (SVGTests::parseAttribute(name, value)) {
+ } else if (SVGFitToViewBox::parseAttribute(name, value, document(), parseError)) {
+ } else {
ASSERT_NOT_REACHED();
+ }
reportAttributeParsingError(parseError, name, value);
}
attributes.setPatternTransform(transform);
}
- if (!attributes.hasPatternContentElement() && element->childElementCount())
+ if (!attributes.hasPatternContentElement() && ElementTraversal::firstWithin(*element))
attributes.setPatternContentElement(element);
}
processedPatterns.add(current);
// Respect xlink:href, take attributes from referenced element
- Node* refNode = SVGURIReference::targetElementFromIRIString(current->hrefCurrentValue(), document());
+ Node* refNode = SVGURIReference::targetElementFromIRIString(current->hrefString(), document());
if (refNode && refNode->hasTagName(SVGNames::patternTag)) {
current = toSVGPatternElement(const_cast<const Node*>(refNode));