| Index: Source/core/svg/SVGViewSpec.cpp
|
| diff --git a/Source/core/svg/SVGViewSpec.cpp b/Source/core/svg/SVGViewSpec.cpp
|
| index adcea68f6e5e69cb3428b324ec8c37f33084c305..d6a63c375ea764f545e468ba8657c2194a6e60d3 100644
|
| --- a/Source/core/svg/SVGViewSpec.cpp
|
| +++ b/Source/core/svg/SVGViewSpec.cpp
|
| @@ -27,40 +27,23 @@
|
|
|
| namespace WebCore {
|
|
|
| -// Define custom non-animated property 'transform'.
|
| -const SVGPropertyInfo* SVGViewSpec::transformPropertyInfo()
|
| -{
|
| - static const SVGPropertyInfo* s_propertyInfo = 0;
|
| - if (!s_propertyInfo) {
|
| - s_propertyInfo = new SVGPropertyInfo(AnimatedTransformList,
|
| - PropertyIsReadOnly,
|
| - SVGNames::transformAttr,
|
| - transformIdentifier(),
|
| - 0,
|
| - 0);
|
| - }
|
| - return s_propertyInfo;
|
| -}
|
| -
|
| SVGViewSpec::SVGViewSpec(SVGSVGElement* contextElement)
|
| - // Note: We make |viewBox| and |preserveAspectRatio|'s contextElement the target element of SVGViewSpec.
|
| + // Note: addToPropertyMap is not needed, as SVGViewSpec do not correspond to an element.
|
| + // Note: We make tear-offs' contextElement the target element of SVGViewSpec.
|
| // This contextElement will be only used for keeping this alive from the tearoff.
|
| // SVGSVGElement holds a strong-ref to this SVGViewSpec, so this is kept alive as:
|
| // AnimatedProperty tearoff -(contextElement)-> SVGSVGElement -(RefPtr)-> SVGViewSpec.
|
| - : SVGFitToViewBox(contextElement, PropertyMapPolicySkip) // Note: addToPropertyMap is not needed, as SVGViewSpec do not correspond to an element.
|
| + : SVGFitToViewBox(contextElement, PropertyMapPolicySkip)
|
| , m_contextElement(contextElement)
|
| + , m_transform(SVGAnimatedTransformList::create(contextElement, SVGNames::transformAttr, SVGTransformList::create()))
|
| {
|
| ASSERT(m_contextElement);
|
| ScriptWrappable::init(this);
|
|
|
| viewBox()->setReadOnly();
|
| preserveAspectRatio()->setReadOnly();
|
| -}
|
| -
|
| -const AtomicString& SVGViewSpec::transformIdentifier()
|
| -{
|
| - DEFINE_STATIC_LOCAL(AtomicString, s_identifier, ("SVGViewSpecTransformAttribute", AtomicString::ConstructFromLiteral));
|
| - return s_identifier;
|
| + m_transform->setReadOnly();
|
| + // Note: addToPropertyMap is not needed, as SVGViewSpec do not correspond to an element.
|
| }
|
|
|
| String SVGViewSpec::preserveAspectRatioString() const
|
| @@ -68,23 +51,12 @@ String SVGViewSpec::preserveAspectRatioString() const
|
| return preserveAspectRatio()->baseValue()->valueAsString();
|
| }
|
|
|
| -void SVGViewSpec::setTransformString(const String& transform)
|
| -{
|
| - if (!m_contextElement)
|
| - return;
|
| -
|
| - SVGTransformList newList;
|
| - newList.parse(transform);
|
| -
|
| - if (SVGAnimatedProperty* wrapper = SVGAnimatedProperty::lookupWrapper<SVGElement, SVGAnimatedTransformList>(m_contextElement, transformPropertyInfo()))
|
| - static_cast<SVGAnimatedTransformList*>(wrapper)->detachListWrappers(newList.size());
|
| -
|
| - m_transform = newList;
|
| -}
|
| -
|
| String SVGViewSpec::transformString() const
|
| {
|
| - return SVGPropertyTraits<SVGTransformList>::toString(m_transform);
|
| + if (!m_transform)
|
| + return String();
|
| +
|
| + return m_transform->baseValue()->valueAsString();
|
| }
|
|
|
| String SVGViewSpec::viewBoxString() const
|
| @@ -102,23 +74,9 @@ SVGElement* SVGViewSpec::viewTarget() const
|
| return toSVGElement(element);
|
| }
|
|
|
| -SVGTransformListPropertyTearOff* SVGViewSpec::transform()
|
| -{
|
| - if (!m_contextElement)
|
| - return 0;
|
| - // Return the animVal here, as its readonly by default - which is exactly what we want here.
|
| - return static_cast<SVGTransformListPropertyTearOff*>(static_pointer_cast<SVGAnimatedTransformList>(lookupOrCreateTransformWrapper(this))->animVal());
|
| -}
|
| -
|
| -PassRefPtr<SVGAnimatedProperty> SVGViewSpec::lookupOrCreateTransformWrapper(SVGViewSpec* ownerType)
|
| -{
|
| - ASSERT(ownerType);
|
| - ASSERT(ownerType->contextElement());
|
| - return SVGAnimatedProperty::lookupOrCreateWrapper<SVGElement, SVGAnimatedTransformList, SVGTransformList>(ownerType->contextElement(), transformPropertyInfo(), ownerType->m_transform);
|
| -}
|
| -
|
| void SVGViewSpec::detachContextElement()
|
| {
|
| + m_transform = 0;
|
| clearViewBox();
|
| clearPreserveAspectRatio();
|
| m_contextElement = 0;
|
| @@ -127,7 +85,7 @@ void SVGViewSpec::detachContextElement()
|
| void SVGViewSpec::reset()
|
| {
|
| resetZoomAndPan();
|
| - m_transform.clear();
|
| + m_transform->baseValue()->clear();
|
| updateViewBox(FloatRect());
|
| ASSERT(preserveAspectRatio());
|
| preserveAspectRatio()->baseValue()->setAlign(SVGPreserveAspectRatio::SVG_PRESERVEASPECTRATIO_XMIDYMID);
|
| @@ -176,7 +134,7 @@ bool SVGViewSpec::parseViewSpecInternal(const CharType* ptr, const CharType* end
|
| ptr++;
|
| if (ptr >= end)
|
| return false;
|
| - setViewTargetString(String(viewTargetStart, ptr - viewTargetStart));
|
| + m_viewTargetString = String(viewTargetStart, ptr - viewTargetStart);
|
| ptr++;
|
| } else
|
| return false;
|
| @@ -208,7 +166,7 @@ bool SVGViewSpec::parseViewSpecInternal(const CharType* ptr, const CharType* end
|
| if (ptr >= end || *ptr != '(')
|
| return false;
|
| ptr++;
|
| - parseTransformAttribute(m_transform, ptr, end, DoNotClearList);
|
| + m_transform->baseValue()->parse(ptr, end);
|
| if (ptr >= end || *ptr != ')')
|
| return false;
|
| ptr++;
|
|
|