2006-09-26 Eric Seidel <eric@eseidel.com>
authoreseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Sep 2006 12:33:30 +0000 (12:33 +0000)
committereseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Sep 2006 12:33:30 +0000 (12:33 +0000)
        Reviewed by mitz.

        Bring animation back to life
        http://bugzilla.opendarwin.org/show_bug.cgi?id=11021

        Register/unregister SVGSVGElements as time containers on insertion/removal.
        Replace uses of DeprecatedString with String in SVGAnimationElement
        Various whitespace clean-up.

        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::parseTransformValue):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        * ksvg2/svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::parseMappedAttribute):
        (WebCore::SVGAnimationElement::parseClockValue):
        (WebCore::SVGAnimationElement::targetAttribute):
        (WebCore::SVGAnimationElement::setTargetAttribute):
        (WebCore::SVGAnimationElement::attributeName):
        * ksvg2/svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::rendererIsNeeded):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::createRenderer):
        (WebCore::SVGSVGElement::insertedIntoDocument): added, calls addTimeContainer(this)
        (WebCore::SVGSVGElement::removedFromDocument): added, calls removeTimeContainer(this)
        * ksvg2/svg/SVGSVGElement.h:
        * ksvg2/svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::handleTimerEvent):
        * ksvg2/svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::getTarget):
        * ksvg2/svg/SVGURIReference.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@16572 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
WebCore/ChangeLog
WebCore/ksvg2/misc/KSVGTimeScheduler.cpp
WebCore/ksvg2/misc/SVGDocumentExtensions.cpp
WebCore/ksvg2/svg/SVGAnimateTransformElement.cpp
WebCore/ksvg2/svg/SVGAnimateTransformElement.h
WebCore/ksvg2/svg/SVGAnimationElement.cpp
WebCore/ksvg2/svg/SVGAnimationElement.h
WebCore/ksvg2/svg/SVGSVGElement.cpp
WebCore/ksvg2/svg/SVGSVGElement.h
WebCore/ksvg2/svg/SVGSetElement.cpp
WebCore/ksvg2/svg/SVGURIReference.cpp
WebCore/ksvg2/svg/SVGURIReference.h

index 8e09327f22546fb5648acc7094b5609586111c56..59a6bd3f951e57f1e4eda76ebfb359fabc14f4d9 100644 (file)
@@ -1,3 +1,45 @@
+2006-09-26  Eric Seidel  <eric@eseidel.com>
+
+        Reviewed by mitz.
+
+        Bring animation back to life
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=11021
+        
+        Register/unregister SVGSVGElements as time containers on insertion/removal.
+        Replace uses of DeprecatedString with String in SVGAnimationElement
+        Various whitespace clean-up.
+
+        * ksvg2/misc/KSVGTimeScheduler.cpp:
+        (WebCore::SVGTimer::notifyAll):
+        * ksvg2/misc/SVGDocumentExtensions.cpp:
+        (WebCore::SVGDocumentExtensions::startAnimations):
+        (WebCore::SVGDocumentExtensions::pauseAnimations):
+        (WebCore::SVGDocumentExtensions::unpauseAnimations):
+        * ksvg2/svg/SVGAnimateTransformElement.cpp:
+        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
+        (WebCore::SVGAnimateTransformElement::parseTransformValue):
+        * ksvg2/svg/SVGAnimateTransformElement.h:
+        * ksvg2/svg/SVGAnimationElement.cpp:
+        (WebCore::SVGAnimationElement::SVGAnimationElement):
+        (WebCore::SVGAnimationElement::parseMappedAttribute):
+        (WebCore::SVGAnimationElement::parseClockValue):
+        (WebCore::SVGAnimationElement::targetAttribute):
+        (WebCore::SVGAnimationElement::setTargetAttribute):
+        (WebCore::SVGAnimationElement::attributeName):
+        * ksvg2/svg/SVGAnimationElement.h:
+        (WebCore::SVGAnimationElement::rendererIsNeeded):
+        * ksvg2/svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::getScreenCTM):
+        (WebCore::SVGSVGElement::createRenderer):
+        (WebCore::SVGSVGElement::insertedIntoDocument): added, calls addTimeContainer(this)
+        (WebCore::SVGSVGElement::removedFromDocument): added, calls removeTimeContainer(this)
+        * ksvg2/svg/SVGSVGElement.h:
+        * ksvg2/svg/SVGSetElement.cpp:
+        (WebCore::SVGSetElement::handleTimerEvent):
+        * ksvg2/svg/SVGURIReference.cpp:
+        (WebCore::SVGURIReference::getTarget):
+        * ksvg2/svg/SVGURIReference.h:
+
 2006-09-26  Graham Dennis  <graham.dennis@gmail.com>
 
         Reviewed by mitzpettel.
index 83949b94f69715e8bbe6bf2d5255664e08c22858..8de55d810a0785528db7f550de4726d96e07ff59 100644 (file)
@@ -214,34 +214,27 @@ void SVGTimer::notifyAll()
             }
             else
 #endif
-            if(animation->hasTagName(SVGNames::animateColorTag))
-            {
-                SVGAnimateColorElement *animColor = static_cast<SVGAnimateColorElement *>(animation);
-                if(!animColor)
+            if (animation->hasTagName(SVGNames::animateColorTag)) {
+                SVGAnimateColorElement* animColor = static_cast<SVGAnimateColorElement*>(animation);
+                if (!animColor)
                     continue;
 
                 String name = animColor->attributeName();
                 Color color = animColor->color();
 
-                if(!targetColor.contains(name))
-                {
-                    if(animation->isAdditive())
-                    {
+                if (!targetColor.contains(name)) {
+                    if (animation->isAdditive()) {
                         int r = animColor->initialColor().red() + color.red();
                         int g = animColor->initialColor().green() + color.green();
                         int b = animColor->initialColor().blue() + color.blue();
                     
                         targetColor.set(name, animColor->clampColor(r, g, b));
-                    }
-                    else
+                    } else
                         targetColor.set(name, color);
-                }
-                else
-                {
-                    if(!animation->isAdditive())
+                } else {
+                    if (!animation->isAdditive())
                         targetColor.set(name, color);
-                    else
-                    {
+                    else {
                         Color baseColor = targetColor.get(name);
                         int r = baseColor.red() + color.red();
                         int g = baseColor.green() + color.green();
@@ -257,7 +250,7 @@ void SVGTimer::notifyAll()
         if (targetTransforms) {
             SVGElement* key = targetIterator->first;
             if (key && key->isStyled() && key->isStyledTransformable()) {
-                SVGStyledTransformableElement *transform = static_cast<SVGStyledTransformableElement *>(key);
+                SVGStyledTransformableElement* transform = static_cast<SVGStyledTransformableElement*>(key);
                 transform->setTransform(targetTransforms.get());
                 transform->updateLocalTransform(transform->transform());
             }
@@ -265,22 +258,17 @@ void SVGTimer::notifyAll()
 
         // Handle <animateColor>.
         HashMap<String, Color>::iterator cend = targetColor.end();
-        for(HashMap<String, Color>::iterator cit = targetColor.begin(); cit != cend; ++cit)
-        {
-            if(cit->second.isValid())
-            {
-                SVGAnimationElement::setTargetAttribute(targetIterator->first,
-                                                            cit->first.impl(),
-                                                            String(cit->second.name()).impl());
-            }
+        for (HashMap<String, Color>::iterator cit = targetColor.begin(); cit != cend; ++cit) {
+            if (cit->second.isValid())
+                SVGAnimationElement::setTargetAttribute(targetIterator->first, cit->first, cit->second.name());
         }
     }
 
     // Make a second pass through the map to avoid multiple setChanged calls on the same element.
     for (targetIterator = targetMap.begin(); targetIterator != tend; ++targetIterator) {
-        SVGElement *key = targetIterator->first;
+        SVGElementkey = targetIterator->first;
         if (key && key->isStyled())
-            static_cast<SVGStyledElement *>(key)->setChanged(true);
+            static_cast<SVGStyledElement*>(key)->setChanged(true);
     }
 }
 
index 22750a0d91cd7ca77cc67d494217e5cfe8b1b737..0a384c114e0cd2ec439b6dc7e168b5e943749947 100644 (file)
@@ -66,21 +66,21 @@ void SVGDocumentExtensions::startAnimations()
     // FIXME: Eventually every "Time Container" will need a way to latch on to some global timer
     // starting animations for a document will do this "latching"
     
-    HashSet<SVGSVGElement*>::iterator end = m_timeContainers.begin();
+    HashSet<SVGSVGElement*>::iterator end = m_timeContainers.end();
     for (HashSet<SVGSVGElement*>::iterator itr = m_timeContainers.begin(); itr != end; ++itr)
         (*itr)->timeScheduler()->startAnimations();
 }
     
 void SVGDocumentExtensions::pauseAnimations()
 {
-    HashSet<SVGSVGElement*>::iterator end = m_timeContainers.begin();
+    HashSet<SVGSVGElement*>::iterator end = m_timeContainers.end();
     for (HashSet<SVGSVGElement*>::iterator itr = m_timeContainers.begin(); itr != end; ++itr)
         (*itr)->pauseAnimations();
 }
 
 void SVGDocumentExtensions::unpauseAnimations()
 {
-    HashSet<SVGSVGElement*>::iterator end = m_timeContainers.begin();
+    HashSet<SVGSVGElement*>::iterator end = m_timeContainers.end();
     for (HashSet<SVGSVGElement*>::iterator itr = m_timeContainers.begin(); itr != end; ++itr)
         (*itr)->unpauseAnimations();
 }
index 28f511bd12799a7450db5da82fbb5de7af444520..bfe03f5e9c495e848666c1e49d262d159a5f7be0 100644 (file)
@@ -200,10 +200,10 @@ void SVGAnimateTransformElement::handleTimerEvent(double timePercentage)
                     useTimePercentage = 1.0;
                 }
 
-                m_toTransform = parseTransformValue(value2.deprecatedString());
+                m_toTransform = parseTransformValue(value2);
                 m_toRotateSpecialCase = m_rotateSpecialCase;
     
-                m_fromTransform = parseTransformValue(value1.deprecatedString());
+                m_fromTransform = parseTransformValue(value1);
                 m_fromRotateSpecialCase = m_rotateSpecialCase;
 
                 m_currentItem = itemByPercentage;
@@ -331,9 +331,9 @@ void SVGAnimateTransformElement::handleTimerEvent(double timePercentage)
     }
 }
 
-RefPtr<SVGTransform> SVGAnimateTransformElement::parseTransformValue(const DeprecatedString &data) const
+RefPtr<SVGTransform> SVGAnimateTransformElement::parseTransformValue(const String& data) const
 {
-    DeprecatedString parse = data.stripWhiteSpace();
+    DeprecatedString parse = data.deprecatedString().stripWhiteSpace();
     if (parse.isEmpty())
         return 0;
     
index 2640520b7b35202e690629379f1ea43f13e32383..01538fce195ae71b8227aa7f08e60ddffa6acc58 100644 (file)
@@ -20,8 +20,8 @@
     Boston, MA 02111-1307, USA.
 */
 
-#ifndef KSVG_SVGAnimateTransformElementImpl_H
-#define KSVG_SVGAnimateTransformElementImpl_H
+#ifndef SVGAnimateTransformElement_H
+#define SVGAnimateTransformElement_H
 #ifdef SVG_SUPPORT
 
 #include "SVGTransform.h"
@@ -36,16 +36,16 @@ namespace WebCore {
         SVGAnimateTransformElement(const QualifiedName&, Document*);
         virtual ~SVGAnimateTransformElement();
 
-        virtual void parseMappedAttribute(MappedAttribute *attr);
+        virtual void parseMappedAttribute(MappedAttribute*);
 
         virtual void handleTimerEvent(double timePercentage);
 
         // Helpers
-        RefPtr<SVGTransform> parseTransformValue(const DeprecatedString &data) const;
-        void calculateRotationFromMatrix(const AffineTransform &matrix, double &angle, double &cx, double &cy) const;
+        RefPtr<SVGTransform> parseTransformValue(const String&) const;
+        void calculateRotationFromMatrix(const AffineTransform&, double &angle, double &cx, double &cy) const;
 
-        SVGMatrix *initialMatrix() const;
-        SVGMatrix *transformMatrix() const;
+        SVGMatrixinitialMatrix() const;
+        SVGMatrixtransformMatrix() const;
 
     protected:
         virtual const SVGElement* contextElement() const { return this; }
@@ -69,6 +69,6 @@ namespace WebCore {
 } // namespace WebCore
 
 #endif // SVG_SUPPORT
-#endif // KSVG_SVGAnimateTransformElementImpl_H
+#endif // SVGAnimateTransformElement_H
 
 // vim:ts=4:noet
index 2f7dd4798271e0a6bc82af02efc99e8a38394dd6..ccbcb0d08b582293d05dd34d43b7631c0aff2923 100644 (file)
 #include <math.h>
 #include <wtf/Vector.h>
 
-using namespace WebCore;
 using namespace std;
 
-SVGAnimationElement::SVGAnimationElement(const QualifiedName& tagName, Document *doc)
-: SVGElement(tagName, doc), SVGTests(), SVGExternalResourcesRequired()
+namespace WebCore {
+
+SVGAnimationElement::SVGAnimationElement(const QualifiedName& tagName, Document* doc)
+    : SVGElement(tagName, doc)
+    , SVGTests()
+    , SVGExternalResourcesRequired()
+    , m_targetElement(0)
+    , m_connected(false)
+    , m_currentTime(0.0)
+    , m_simpleDuration(0.0)
+    , m_fill(FILL_REMOVE)
+    , m_restart(RESTART_ALWAYS)
+    , m_calcMode(CALCMODE_LINEAR)
+    , m_additive(ADDITIVE_REPLACE)
+    , m_accumulate(ACCUMULATE_NONE)
+    , m_attributeType(ATTRIBUTETYPE_AUTO)
+    , m_max(0.0)
+    , m_min(0.0)
+    , m_end(0.0)
+    , m_begin(0.0)
+    , m_repeations(0)
+    , m_repeatCount(0)
 {
-    m_connected = false;
 
-    m_targetElement = 0;
-    
-    m_currentTime = 0.0;
-    m_simpleDuration = 0.0;
-
-    // Initialize shared properties...
-    m_end = 0.0;
-    m_min = 0.0;
-    m_max = 0.0;
-    m_begin = 0.0;
-
-    m_repeations = 0;
-    m_repeatCount = 0;
-
-    m_fill = FILL_REMOVE;
-    m_restart = RESTART_ALWAYS;
-    m_calcMode = CALCMODE_LINEAR;
-    m_additive = ADDITIVE_REPLACE;
-    m_accumulate = ACCUMULATE_NONE;
-    m_attributeType = ATTRIBUTETYPE_AUTO;
 }
 
 SVGAnimationElement::~SVGAnimationElement()
@@ -120,9 +118,9 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name().matches(XLinkNames::hrefAttr))
-        m_href = value.deprecatedString();
+        m_href = value;
     else if (attr->name() == SVGNames::attributeNameAttr)
-        m_attributeName = value.deprecatedString();
+        m_attributeName = value;
     else if (attr->name() == SVGNames::attributeTypeAttr)
     {
         if (value == "CSS")
@@ -144,29 +142,29 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute *attr)
 
         // Parse data
         for (unsigned int i = 0; i < temp->numberOfItems(); i++) {
-            DeprecatedString current = String(temp->getItem(i, ec)).deprecatedString();
+            String current = temp->getItem(i, ec);
 
             if (current.startsWith("accessKey")) {
                 // Register keyDownEventListener for the character
-                DeprecatedString character = current.mid(current.length() - 2, 1);
+                String character = current.substring(current.length() - 2, 1);
                 // FIXME: Not implemented! Supposed to register accessKey character
             } else if (current.startsWith("wallclock")) {
                 int firstBrace = current.find('(');
                 int secondBrace = current.find(')');
 
-                DeprecatedString wallclockValue = current.mid(firstBrace + 1, secondBrace - firstBrace - 2);
+                String wallclockValue = current.substring(firstBrace + 1, secondBrace - firstBrace - 2);
                 // FIXME: Not implemented! Supposed to use wallClock value
             } else if (current.contains('.')) {
                 int dotPosition = current.find('.');
 
-                DeprecatedString element = current.mid(0, dotPosition);
-                DeprecatedString clockValue;
+                String element = current.substring(0, dotPosition);
+                String clockValue;
                 if (current.contains("begin"))
-                    clockValue = current.mid(dotPosition + 6);
+                    clockValue = current.substring(dotPosition + 6);
                 else if (current.contains("end"))
-                    clockValue = current.mid(dotPosition + 4);
+                    clockValue = current.substring(dotPosition + 4);
                 else if (current.contains("repeat"))
-                    clockValue = current.mid(dotPosition + 7);
+                    clockValue = current.substring(dotPosition + 7);
                 else // DOM2 Event Reference
                 {
                     int plusMinusPosition = -1;
@@ -176,8 +174,8 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute *attr)
                     else if (current.contains('-'))
                         plusMinusPosition = current.find('-');
 
-                    DeprecatedString event = current.mid(dotPosition + 1, plusMinusPosition - dotPosition - 1);
-                    clockValue = current.mid(dotPosition + event.length() + 1);
+                    String event = current.substring(dotPosition + 1, plusMinusPosition - dotPosition - 1);
+                    clockValue = current.substring(dotPosition + event.length() + 1);
                     // FIXME: supposed to use DOM Event
                 }
             } else {
@@ -197,19 +195,19 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute *attr)
     }
     else if (attr->name() == SVGNames::durAttr)
     {
-        m_simpleDuration = parseClockValue(value.deprecatedString());
+        m_simpleDuration = parseClockValue(value);
         if (!isIndefinite(m_simpleDuration))
             m_simpleDuration *= 1000.0;
     }
     else if (attr->name() == SVGNames::minAttr)
     {
-        m_min = parseClockValue(value.deprecatedString());
+        m_min = parseClockValue(value);
         if (!isIndefinite(m_min))
             m_min *= 1000.0;
     }
     else if (attr->name() == SVGNames::maxAttr)
     {
-        m_max = parseClockValue(value.deprecatedString());
+        m_max = parseClockValue(value);
         if (!isIndefinite(m_max))
             m_max *= 1000.0;
     }
@@ -230,7 +228,7 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute *attr)
             m_repeatCount = value.toDouble();
     }
     else if (attr->name() == SVGNames::repeatDurAttr)
-        m_repeatDur = value.deprecatedString();
+        m_repeatDur = value;
     else if (attr->name() == SVGNames::fillAttr)
     {
         if (value == "freeze")
@@ -265,11 +263,11 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute *attr)
         SVGHelper::parseSeparatedList(m_keySplines.get(), value, ';');
     }
     else if (attr->name() == SVGNames::fromAttr)
-        m_from = value.deprecatedString();
+        m_from = value;
     else if (attr->name() == SVGNames::toAttr)
-        m_to = value.deprecatedString();
+        m_to = value;
     else if (attr->name() == SVGNames::byAttr)
-        m_by = value.deprecatedString();
+        m_by = value;
     else if (attr->name() == SVGNames::additiveAttr)
     {
         if (value == "sum")
@@ -293,9 +291,9 @@ void SVGAnimationElement::parseMappedAttribute(MappedAttribute *attr)
     }
 }
 
-double SVGAnimationElement::parseClockValue(const DeprecatedString &data) const
+double SVGAnimationElement::parseClockValue(const String& data) const
 {
-    DeprecatedString parse = data.stripWhiteSpace();
+    DeprecatedString parse = data.deprecatedString().stripWhiteSpace();
     
     if (parse == "indefinite") // Saves some time...
         return DBL_MAX;
@@ -429,48 +427,42 @@ String SVGAnimationElement::targetAttribute() const
     }
 
     if (attributeType == ATTRIBUTETYPE_XML || ret.isEmpty())
-        ret = targetElement()->getAttribute(String(m_attributeName).impl());
+        ret = targetElement()->getAttribute(m_attributeName);
 
     return ret;
 }
 
-void SVGAnimationElement::setTargetAttribute(StringImpl *value)
+void SVGAnimationElement::setTargetAttribute(const String& value)
 {
-    SVGAnimationElement::setTargetAttribute(targetElement(), String(m_attributeName).impl(), value, static_cast<EAttributeType>(m_attributeType));
+    SVGAnimationElement::setTargetAttribute(targetElement(), m_attributeName, value, static_cast<EAttributeType>(m_attributeType));
 }
 
-void SVGAnimationElement::setTargetAttribute(SVGElement *target, StringImpl *nameImpl, StringImpl *value, EAttributeType type)
+void SVGAnimationElement::setTargetAttribute(SVGElement* target, const String& name, const String& value, EAttributeType type)
 {
-    if (!target || !nameImpl || !value)
+    if (!target || name.isNull() || value.isNull())
         return;
-    String name(nameImpl);
     
-    SVGStyledElement *styled = NULL;
-    if (target && target->isStyled())
-        styled = static_cast<SVGStyledElement *>(target);
+    SVGStyledElement* styled = (target && target->isStyled()) ? static_cast<SVGStyledElement*>(target) : 0;
 
     EAttributeType attributeType = type;
-    if (type == ATTRIBUTETYPE_AUTO)
-    {
-        attributeType = ATTRIBUTETYPE_XML;
-
+    if (type == ATTRIBUTETYPE_AUTO) {
         // Spec: The implementation should match the attributeName to an attribute
         // for the target element. The implementation must first search through the
         // list of CSS properties for a matching property name, and if none is found,
         // search the default XML namespace for the element.
-        if (styled && styled->style()) {
-            if (styled->style()->getPropertyCSSValue(name))
-                attributeType = ATTRIBUTETYPE_CSS;
-        }
+        if (styled && styled->style() && styled->style()->getPropertyCSSValue(name))
+            attributeType = ATTRIBUTETYPE_CSS;
+        else
+            attributeType = ATTRIBUTETYPE_XML;
     }
     ExceptionCode ec = 0;
     if (attributeType == ATTRIBUTETYPE_CSS && styled && styled->style())
         styled->style()->setProperty(name, value, "", ec);
     else if (attributeType == ATTRIBUTETYPE_XML)
-        target->setAttribute(nameImpl, value, ec);
+        target->setAttribute(name, value, ec);
 }
 
-DeprecatedString SVGAnimationElement::attributeName() const
+String SVGAnimationElement::attributeName() const
 {
     return m_attributeName;
 }
@@ -577,6 +569,8 @@ bool SVGAnimationElement::isIndefinite(double value) const
     return (value == DBL_MAX);
 }
 
+}
+
 // vim:ts=4:noet
 #endif // SVG_SUPPORT
 
index dafeb42825015688a21471b65c6232ef8aec73cb..63e510370051b075a5b0a3a12f3b9d5ab4d8e555 100644 (file)
@@ -20,8 +20,8 @@
     Boston, MA 02111-1307, USA.
 */
 
-#ifndef KSVG_SVGAnimationElementImpl_H
-#define KSVG_SVGAnimationElementImpl_H
+#ifndef SVGAnimationElement_H
+#define SVGAnimationElement_H
 #ifdef SVG_SUPPORT
 
 #include "SVGExternalResourcesRequired.h"
@@ -83,7 +83,7 @@ namespace WebCore {
         virtual ~SVGAnimationElement();
 
         // 'SVGAnimationElement' functions
-        SVGElement *targetElement() const;
+        SVGElementtargetElement() const;
         
         virtual bool isValid() const { return SVGTests::isValid(); }
 
@@ -93,24 +93,21 @@ namespace WebCore {
         double getSimpleDuration(ExceptionCode&) const;
     
         virtual void parseMappedAttribute(MappedAttribute *attr);
-        virtual bool rendererIsNeeded(RenderStyle *) { return false; }
+        virtual bool rendererIsNeeded(RenderStyle*) { return false; }
 
         virtual void closeRenderer();
 
         // Helpers
         virtual void handleTimerEvent(double timePercentage) = 0;
 
-        double parseClockValue(const DeprecatedString &data) const;
+        double parseClockValue(const String&) const;
 
         String targetAttribute() const;
-        void setTargetAttribute(StringImpl *value);
+        void setTargetAttribute(const String&);
 
-        static void setTargetAttribute(SVGElement *target,
-                                       StringImpl *name,
-                                       StringImpl *value,
-                                       EAttributeType type = ATTRIBUTETYPE_AUTO);
+        static void setTargetAttribute(SVGElement* target, const String& name, const String& value, EAttributeType = ATTRIBUTETYPE_AUTO);
 
-        DeprecatedString attributeName() const;
+        String attributeName() const;
 
         bool connected() const;
 
@@ -127,7 +124,7 @@ namespace WebCore {
         bool isIndefinite(double value) const;
 
     protected:
-        mutable SVGElement *m_targetElement;
+        mutable SVGElementm_targetElement;
 
         ANIMATED_PROPERTY_FORWARD_DECLARATIONS(SVGExternalResourcesRequired, bool, ExternalResourcesRequired, externalResourcesRequired)
 
@@ -144,12 +141,12 @@ namespace WebCore {
         unsigned m_accumulate : 1; // EAccumulateMode
         unsigned m_attributeType : 2; // EAttributeType
         
-        DeprecatedString m_to;
-        DeprecatedString m_by;
-        DeprecatedString m_from;
-        DeprecatedString m_href;
-        DeprecatedString m_repeatDur;
-        DeprecatedString m_attributeName;
+        String m_to;
+        String m_by;
+        String m_from;
+        String m_href;
+        String m_repeatDur;
+        String m_attributeName;
 
         double m_max;
         double m_min;
@@ -167,6 +164,6 @@ namespace WebCore {
 } // namespace WebCore
 
 #endif // SVG_SUPPORT
-#endif // KSVG_SVGAnimationElementImpl_H
+#endif // SVGAnimationElement_H
 
 // vim:ts=4:noet
index ab0ff8a8271c1f6d0820ff57e6caceda23c0be16..260e90f4509ee78a5ae542ceafd2dd20dc113304 100644 (file)
@@ -353,12 +353,10 @@ SVGMatrix *SVGSVGElement::getCTM() const
 SVGMatrix *SVGSVGElement::getScreenCTM() const
 {
     SVGMatrix *mat = SVGStyledLocatableElement::getScreenCTM();
-    if(mat)
-    {
+    if(mat) {
         mat->translate(x()->value(), y()->value());
 
-        if(attributes()->getNamedItem(SVGNames::viewBoxAttr))
-        {
+        if (attributes()->getNamedItem(SVGNames::viewBoxAttr)) {
             RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(width()->value(), height()->value());
             mat->multiply(viewBox.get());
         }
@@ -369,15 +367,10 @@ SVGMatrix *SVGSVGElement::getScreenCTM() const
 
 RenderObject* SVGSVGElement::createRenderer(RenderArena* arena, RenderStyle*)
 {
-    RenderSVGContainer *rootContainer = new (arena) RenderSVGContainer(this);
+    RenderSVGContainerrootContainer = new (arena) RenderSVGContainer(this);
 
     // FIXME: all this setup should be done after attributesChanged, not here.
-    float _x = x()->value();
-    float _y = y()->value();
-    float _width = width()->value();
-    float _height = height()->value();
-
-    rootContainer->setViewport(FloatRect(_x, _y, _width, _height));
+    rootContainer->setViewport(FloatRect(x()->value(), y()->value(), width()->value(), height()->value()));
     rootContainer->setViewBox(viewBox());
     rootContainer->setAlign(KCAlign(preserveAspectRatio()->align() - 1));
     rootContainer->setSlice(preserveAspectRatio()->meetOrSlice() == SVGPreserveAspectRatio::SVG_MEETORSLICE_SLICE);
@@ -385,6 +378,18 @@ RenderObject* SVGSVGElement::createRenderer(RenderArena* arena, RenderStyle*)
     return rootContainer;
 }
 
+void SVGSVGElement::insertedIntoDocument()
+{
+    document()->accessSVGExtensions()->addTimeContainer(this);
+    SVGStyledLocatableElement::insertedIntoDocument();
+}
+
+void SVGSVGElement::removedFromDocument()
+{
+    document()->accessSVGExtensions()->removeTimeContainer(this);
+    SVGStyledLocatableElement::removedFromDocument();
+}
+
 void SVGSVGElement::setZoomAndPan(unsigned short zoomAndPan)
 {
     SVGZoomAndPan::setZoomAndPan(zoomAndPan);
index b3d51e90f84f3ab1bfcb8490c66b7479be737bc9..706089c519cc6edcaa13762237b292f19bcf9eef 100644 (file)
@@ -122,6 +122,9 @@ namespace WebCore
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject* createRenderer(RenderArena *arena, RenderStyle *style);
+        
+        virtual void insertedIntoDocument();
+        virtual void removedFromDocument();
 
         // 'virtual SVGZoomAndPan functions
         virtual void setZoomAndPan(unsigned short zoomAndPan);
index d216506d2b62912435481442c2e68cbb085793f0..a985c84adb5a406442880f905e2e9178ce4684a9 100644 (file)
@@ -54,9 +54,8 @@ void SVGSetElement::handleTimerEvent(double timePercentage)
 
     // Commit change now...
     if (m_savedTo.isEmpty()) {
-        String attr(targetAttribute());
-        m_savedTo = attr.deprecatedString();
-        setTargetAttribute(String(m_to).impl());
+        m_savedTo = targetAttribute().deprecatedString();
+        setTargetAttribute(m_to);
     }
 
     // End condition.
@@ -65,7 +64,7 @@ void SVGSetElement::handleTimerEvent(double timePercentage)
         m_connected = false;
 
         if (!isFrozen())
-            setTargetAttribute(String(m_savedTo).impl());
+            setTargetAttribute(m_savedTo);
 
         m_savedTo = DeprecatedString();
     }
index b5bd2fe9aa3a59af3420b4ccacb5cca864292cfa..5c117981e207a5a1da72d84c71a92ff49bd37012 100644 (file)
@@ -53,16 +53,17 @@ bool SVGURIReference::parseMappedAttribute(MappedAttribute *attr)
     return false;
 }
 
-DeprecatedString SVGURIReference::getTarget(const DeprecatedString &url)
+String SVGURIReference::getTarget(const String& url)
 {
-    if (url.startsWith("url(")) { // URI References, ie. fill:url(#target)
-        unsigned int start = url.find('#') + 1;
-        unsigned int end = url.findRev(')');
+    DeprecatedString urlDeprecated = url.deprecatedString(); // FIXME: Needed until findRev exists for String
+    if (urlDeprecated.startsWith("url(")) { // URI References, ie. fill:url(#target)
+        unsigned int start = urlDeprecated.find('#') + 1;
+        unsigned int end = urlDeprecated.findRev(')');
 
-        return url.mid(start, end - start);
+        return urlDeprecated.mid(start, end - start);
     } else if (url.find('#') > -1) { // format is #target
         unsigned int start = url.find('#') + 1;
-        return url.mid(start, url.length() - start);
+        return url.substring(start, url.length() - start);
     } else // Normal Reference, ie. style="color-profile:changeColor"
         return url;
 }
index 41fb695f9de22751501d4f1dd52b3eca9bdedba6..7c2f60a16851cfc4713a4f66671ddae8e36ae17e 100644 (file)
@@ -25,7 +25,6 @@
 #ifdef SVG_SUPPORT
 
 #include "SVGElement.h"
-#include "DeprecatedString.h"
 
 namespace WebCore {
 
@@ -37,10 +36,10 @@ namespace WebCore {
         virtual ~SVGURIReference();
 
         // 'SVGURIReference' functions
-        bool parseMappedAttribute(MappedAttribute *attr);
+        bool parseMappedAttribute(MappedAttribute*);
 
         // Helpers
-        static DeprecatedString getTarget(const DeprecatedString &url);
+        static String getTarget(const String& url);
 
     protected:
         virtual const SVGElement* contextElement() const = 0;