| Index: third_party/WebKit/Source/core/svg/SVGPatternElement.cpp
|
| diff --git a/third_party/WebKit/Source/core/svg/SVGPatternElement.cpp b/third_party/WebKit/Source/core/svg/SVGPatternElement.cpp
|
| index 216ddcff46746d5cbf185618e9a6e35f4738ce1b..db648a0f9038152344a71f16a01335177ecb1562 100644
|
| --- a/third_party/WebKit/Source/core/svg/SVGPatternElement.cpp
|
| +++ b/third_party/WebKit/Source/core/svg/SVGPatternElement.cpp
|
| @@ -23,6 +23,7 @@
|
| #include "core/svg/SVGPatternElement.h"
|
|
|
| #include "core/dom/ElementTraversal.h"
|
| +#include "core/dom/StyleChangeReason.h"
|
| #include "core/layout/svg/LayoutSVGResourcePattern.h"
|
| #include "core/svg/PatternAttributes.h"
|
| #include "platform/transforms/AffineTransform.h"
|
| @@ -50,7 +51,8 @@ inline SVGPatternElement::SVGPatternElement(Document& document)
|
| SVGLength::create(SVGLengthMode::Height))),
|
| m_patternTransform(
|
| SVGAnimatedTransformList::create(this,
|
| - SVGNames::patternTransformAttr)),
|
| + SVGNames::patternTransformAttr,
|
| + CSSPropertyTransform)),
|
| m_patternUnits(SVGAnimatedEnumeration<SVGUnitTypes::SVGUnitType>::create(
|
| this,
|
| SVGNames::patternUnitsAttr,
|
| @@ -85,11 +87,30 @@ DEFINE_TRACE(SVGPatternElement) {
|
|
|
| DEFINE_NODE_FACTORY(SVGPatternElement)
|
|
|
| +void SVGPatternElement::collectStyleForPresentationAttribute(
|
| + const QualifiedName& name,
|
| + const AtomicString& value,
|
| + MutableStylePropertySet* style) {
|
| + if (name == SVGNames::patternTransformAttr) {
|
| + addPropertyToPresentationAttributeStyle(
|
| + style, CSSPropertyTransform,
|
| + m_patternTransform->currentValue()->cssValue());
|
| + return;
|
| + }
|
| + SVGElement::collectStyleForPresentationAttribute(name, value, style);
|
| +}
|
| +
|
| void SVGPatternElement::svgAttributeChanged(const QualifiedName& attrName) {
|
| bool isLengthAttr =
|
| attrName == SVGNames::xAttr || attrName == SVGNames::yAttr ||
|
| attrName == SVGNames::widthAttr || attrName == SVGNames::heightAttr;
|
|
|
| + if (attrName == SVGNames::patternTransformAttr) {
|
| + invalidateSVGPresentationAttributeStyle();
|
| + setNeedsStyleRecalc(LocalStyleChange,
|
| + StyleChangeReasonForTracing::fromAttribute(attrName));
|
| + }
|
| +
|
| if (isLengthAttr || attrName == SVGNames::patternUnitsAttr ||
|
| attrName == SVGNames::patternContentUnitsAttr ||
|
| attrName == SVGNames::patternTransformAttr ||
|
| @@ -160,10 +181,9 @@ static void setPatternAttributes(const SVGPatternElement* element,
|
| element->patternContentUnits()->currentValue()->enumValue());
|
|
|
| if (!attributes.hasPatternTransform() &&
|
| - element->patternTransform()->isSpecified()) {
|
| - AffineTransform transform;
|
| - element->patternTransform()->currentValue()->concatenate(transform);
|
| - attributes.setPatternTransform(transform);
|
| + element->hasTransform(SVGElement::ExcludeMotionTransform)) {
|
| + attributes.setPatternTransform(
|
| + element->calculateTransform(SVGElement::ExcludeMotionTransform));
|
| }
|
|
|
| if (!attributes.hasPatternContentElement() &&
|
| @@ -198,9 +218,7 @@ void SVGPatternElement::collectPatternAttributes(
|
|
|
| AffineTransform SVGPatternElement::localCoordinateSpaceTransform(
|
| SVGElement::CTMScope) const {
|
| - AffineTransform matrix;
|
| - m_patternTransform->currentValue()->concatenate(matrix);
|
| - return matrix;
|
| + return calculateTransform(SVGElement::ExcludeMotionTransform);
|
| }
|
|
|
| bool SVGPatternElement::selfHasRelativeLengths() const {
|
|
|