Enable animVal support for SVGAnimatedRect
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Mar 2012 10:47:05 +0000 (10:47 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Mar 2012 10:47:05 +0000 (10:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=82317

Reviewed by Zoltan Herczeg.

Source/WebCore:

Enable animVal support for SVGAnimatedRect. Very simple now that everything is prepared.
All we have to do is add startAnimValAnimation/etc. methods to SVGAnimatedRectAnimator.

Extended existing tests to cover this.

* svg/SVGAnimatedRect.cpp:
(WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
(WebCore::SVGAnimatedRectAnimator::stopAnimValAnimation):
(WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
(WebCore::SVGAnimatedRectAnimator::animValWillChange):
(WebCore::SVGAnimatedRectAnimator::animValDidChange):
* svg/SVGAnimatedRect.h:
(SVGAnimatedRectAnimator):
* svg/SVGAnimatedType.cpp:
(WebCore::SVGAnimatedType::supportsAnimVal):

LayoutTests:

Extend SVGAnimatedRect tests to cover animVal support.

* svg/animations/script-tests/svgrect-animation-1.js:
(sample1):
(sample2):
(sample3):
* svg/animations/script-tests/svgrect-animation-2.js:
(sample1):
(sample2):
(sample3):
* svg/animations/svgrect-animation-1-expected.txt:
* svg/animations/svgrect-animation-2-expected.txt:

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

LayoutTests/ChangeLog
LayoutTests/svg/animations/script-tests/svgrect-animation-1.js
LayoutTests/svg/animations/script-tests/svgrect-animation-2.js
LayoutTests/svg/animations/svgrect-animation-1-expected.txt
LayoutTests/svg/animations/svgrect-animation-2-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/svg/SVGAnimatedRect.cpp
Source/WebCore/svg/SVGAnimatedRect.h
Source/WebCore/svg/SVGAnimatedType.cpp

index dae1537..8d18eb2 100644 (file)
@@ -1,5 +1,25 @@
 2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>
 
+        Enable animVal support for SVGAnimatedRect
+        https://bugs.webkit.org/show_bug.cgi?id=82317
+
+        Reviewed by Zoltan Herczeg.
+
+        Extend SVGAnimatedRect tests to cover animVal support.
+
+        * svg/animations/script-tests/svgrect-animation-1.js:
+        (sample1):
+        (sample2):
+        (sample3):
+        * svg/animations/script-tests/svgrect-animation-2.js:
+        (sample1):
+        (sample2):
+        (sample3):
+        * svg/animations/svgrect-animation-1-expected.txt:
+        * svg/animations/svgrect-animation-2-expected.txt:
+
+2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>
+
         Not reviewed. Use shouldBe() instead of shouldBeCloseEnough() when testing the baseVal in the SVGAngle tests.
         It doesn't get animated, and thus isn't timing dependant. All other tests are correct.
 
index c264c89..80a963f 100644 (file)
@@ -29,10 +29,10 @@ function sample1() {
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.width", "100");
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.height", "100");
 
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.x", "0");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.y", "0");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.width", "100");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.height", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.x", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.y", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.width", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.height", "100");
 }
 
 function sample2() {
@@ -41,10 +41,10 @@ function sample2() {
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.width", "75");
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.height", "75");
 
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.x", "25");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.y", "25");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.width", "75");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.height", "75");
+    shouldBe("rootSVGElement.viewBox.baseVal.x", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.y", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.width", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.height", "100");
 }
 
 function sample3() {
@@ -53,10 +53,10 @@ function sample3() {
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.width", "50");
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.height", "50");
 
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.x", "50");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.y", "50");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.width", "50");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.height", "50");
+    shouldBe("rootSVGElement.viewBox.baseVal.x", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.y", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.width", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.height", "100");
 }
 
 function executeTest() {
index 8b4c466..fc0b2f8 100644 (file)
@@ -29,10 +29,10 @@ function sample1() {
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.width", "100");
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.height", "100");
 
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.x", "0");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.y", "0");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.width", "100");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.height", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.x", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.y", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.width", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.height", "100");
 }
 
 function sample2() {
@@ -41,10 +41,10 @@ function sample2() {
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.width", "125");
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.height", "125");
 
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.x", "25");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.y", "25");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.width", "125");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.height", "125");
+    shouldBe("rootSVGElement.viewBox.baseVal.x", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.y", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.width", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.height", "100");
 }
 
 function sample3() {
@@ -53,10 +53,10 @@ function sample3() {
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.width", "150");
     shouldBeCloseEnough("rootSVGElement.viewBox.animVal.height", "150");
 
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.x", "50");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.y", "50");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.width", "150");
-    shouldBeCloseEnough("rootSVGElement.viewBox.baseVal.height", "150");
+    shouldBe("rootSVGElement.viewBox.baseVal.x", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.y", "0");
+    shouldBe("rootSVGElement.viewBox.baseVal.width", "100");
+    shouldBe("rootSVGElement.viewBox.baseVal.height", "100");
 }
 
 function executeTest() {
index cd771c3..8723869 100644 (file)
@@ -17,18 +17,18 @@ PASS rootSVGElement.viewBox.animVal.x is 25
 PASS rootSVGElement.viewBox.animVal.y is 25
 PASS rootSVGElement.viewBox.animVal.width is 75
 PASS rootSVGElement.viewBox.animVal.height is 75
-PASS rootSVGElement.viewBox.baseVal.x is 25
-PASS rootSVGElement.viewBox.baseVal.y is 25
-PASS rootSVGElement.viewBox.baseVal.width is 75
-PASS rootSVGElement.viewBox.baseVal.height is 75
+PASS rootSVGElement.viewBox.baseVal.x is 0
+PASS rootSVGElement.viewBox.baseVal.y is 0
+PASS rootSVGElement.viewBox.baseVal.width is 100
+PASS rootSVGElement.viewBox.baseVal.height is 100
 PASS rootSVGElement.viewBox.animVal.x is 50
 PASS rootSVGElement.viewBox.animVal.y is 50
 PASS rootSVGElement.viewBox.animVal.width is 50
 PASS rootSVGElement.viewBox.animVal.height is 50
-PASS rootSVGElement.viewBox.baseVal.x is 50
-PASS rootSVGElement.viewBox.baseVal.y is 50
-PASS rootSVGElement.viewBox.baseVal.width is 50
-PASS rootSVGElement.viewBox.baseVal.height is 50
+PASS rootSVGElement.viewBox.baseVal.x is 0
+PASS rootSVGElement.viewBox.baseVal.y is 0
+PASS rootSVGElement.viewBox.baseVal.width is 100
+PASS rootSVGElement.viewBox.baseVal.height is 100
 PASS rootSVGElement.viewBox.animVal.x is 0
 PASS rootSVGElement.viewBox.animVal.y is 0
 PASS rootSVGElement.viewBox.animVal.width is 100
index bff9cc3..3b67f11 100644 (file)
@@ -17,18 +17,18 @@ PASS rootSVGElement.viewBox.animVal.x is 25
 PASS rootSVGElement.viewBox.animVal.y is 25
 PASS rootSVGElement.viewBox.animVal.width is 125
 PASS rootSVGElement.viewBox.animVal.height is 125
-PASS rootSVGElement.viewBox.baseVal.x is 25
-PASS rootSVGElement.viewBox.baseVal.y is 25
-PASS rootSVGElement.viewBox.baseVal.width is 125
-PASS rootSVGElement.viewBox.baseVal.height is 125
+PASS rootSVGElement.viewBox.baseVal.x is 0
+PASS rootSVGElement.viewBox.baseVal.y is 0
+PASS rootSVGElement.viewBox.baseVal.width is 100
+PASS rootSVGElement.viewBox.baseVal.height is 100
 PASS rootSVGElement.viewBox.animVal.x is 50
 PASS rootSVGElement.viewBox.animVal.y is 50
 PASS rootSVGElement.viewBox.animVal.width is 150
 PASS rootSVGElement.viewBox.animVal.height is 150
-PASS rootSVGElement.viewBox.baseVal.x is 50
-PASS rootSVGElement.viewBox.baseVal.y is 50
-PASS rootSVGElement.viewBox.baseVal.width is 150
-PASS rootSVGElement.viewBox.baseVal.height is 150
+PASS rootSVGElement.viewBox.baseVal.x is 0
+PASS rootSVGElement.viewBox.baseVal.y is 0
+PASS rootSVGElement.viewBox.baseVal.width is 100
+PASS rootSVGElement.viewBox.baseVal.height is 100
 PASS rootSVGElement.viewBox.animVal.x is 0
 PASS rootSVGElement.viewBox.animVal.y is 0
 PASS rootSVGElement.viewBox.animVal.width is 100
index 2cdc2e5..d87743e 100644 (file)
@@ -1,3 +1,26 @@
+2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>
+
+        Enable animVal support for SVGAnimatedRect
+        https://bugs.webkit.org/show_bug.cgi?id=82317
+
+        Reviewed by Zoltan Herczeg.
+
+        Enable animVal support for SVGAnimatedRect. Very simple now that everything is prepared.
+        All we have to do is add startAnimValAnimation/etc. methods to SVGAnimatedRectAnimator.
+
+        Extended existing tests to cover this.
+
+        * svg/SVGAnimatedRect.cpp:
+        (WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
+        (WebCore::SVGAnimatedRectAnimator::stopAnimValAnimation):
+        (WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
+        (WebCore::SVGAnimatedRectAnimator::animValWillChange):
+        (WebCore::SVGAnimatedRectAnimator::animValDidChange):
+        * svg/SVGAnimatedRect.h:
+        (SVGAnimatedRectAnimator):
+        * svg/SVGAnimatedType.cpp:
+        (WebCore::SVGAnimatedType::supportsAnimVal):
+
 2012-03-27  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r112201.
index ab4f5b6..bf71608 100644 (file)
@@ -39,6 +39,31 @@ PassOwnPtr<SVGAnimatedType> SVGAnimatedRectAnimator::constructFromString(const S
     return animatedType.release();
 }
 
+PassOwnPtr<SVGAnimatedType> SVGAnimatedRectAnimator::startAnimValAnimation(const Vector<SVGAnimatedProperty*>& properties)
+{
+    return SVGAnimatedType::createRect(constructFromOneBaseValue<FloatRect, SVGAnimatedRect>(properties));
+}
+
+void SVGAnimatedRectAnimator::stopAnimValAnimation(const Vector<SVGAnimatedProperty*>& properties)
+{
+    SVGAnimatedTypeAnimator::stopAnimValAnimationForType<SVGAnimatedRect>(properties);
+}
+
+void SVGAnimatedRectAnimator::resetAnimValToBaseVal(const Vector<SVGAnimatedProperty*>& properties, SVGAnimatedType* type)
+{
+    resetFromOneBaseValue<FloatRect, SVGAnimatedRect>(properties, type, &SVGAnimatedType::rect);
+}
+
+void SVGAnimatedRectAnimator::animValWillChange(const Vector<SVGAnimatedProperty*>& properties)
+{
+    animValWillChangeForType<SVGAnimatedRect>(properties);
+}
+
+void SVGAnimatedRectAnimator::animValDidChange(const Vector<SVGAnimatedProperty*>& properties)
+{
+    animValDidChangeForType<SVGAnimatedRect>(properties);
+}
+
 void SVGAnimatedRectAnimator::calculateFromAndToValues(OwnPtr<SVGAnimatedType>& from, OwnPtr<SVGAnimatedType>& to, const String& fromString, const String& toString)
 {
     from = constructFromString(fromString);
index 4abb3b7..b9b7340 100644 (file)
@@ -40,12 +40,16 @@ DEFINE_ANIMATED_PROPERTY(AnimatedRect, OwnerType, DOMAttribute, DOMAttribute.loc
 class SVGAnimationElement;
 
 class SVGAnimatedRectAnimator : public SVGAnimatedTypeAnimator {
-
 public:
     SVGAnimatedRectAnimator(SVGAnimationElement*, SVGElement*);
     virtual ~SVGAnimatedRectAnimator() { }
 
     virtual PassOwnPtr<SVGAnimatedType> constructFromString(const String&);
+    virtual PassOwnPtr<SVGAnimatedType> startAnimValAnimation(const Vector<SVGAnimatedProperty*>&);
+    virtual void stopAnimValAnimation(const Vector<SVGAnimatedProperty*>&);
+    virtual void resetAnimValToBaseVal(const Vector<SVGAnimatedProperty*>&, SVGAnimatedType*);
+    virtual void animValWillChange(const Vector<SVGAnimatedProperty*>&);
+    virtual void animValDidChange(const Vector<SVGAnimatedProperty*>&);
 
     virtual void calculateFromAndToValues(OwnPtr<SVGAnimatedType>& fromValue, OwnPtr<SVGAnimatedType>& toValue, const String& fromString, const String& toString);
     virtual void calculateFromAndByValues(OwnPtr<SVGAnimatedType>& fromValue, OwnPtr<SVGAnimatedType>& toValue, const String& fromString, const String& byString);
index f7ae11e..0b8d05a 100644 (file)
@@ -479,6 +479,7 @@ bool SVGAnimatedType::supportsAnimVal(AnimatedPropertyType type)
     case AnimatedNumber:
     case AnimatedNumberList:
     case AnimatedNumberOptionalNumber:
+    case AnimatedRect:
     case AnimatedString:
     case AnimatedTransformList:
         return true;
@@ -487,7 +488,6 @@ bool SVGAnimatedType::supportsAnimVal(AnimatedPropertyType type)
     case AnimatedPath:
     case AnimatedPoints:
     case AnimatedPreserveAspectRatio:
-    case AnimatedRect:
     case AnimatedUnknown:
         return false;
     }