3d rotation with [0, 0, 0] direction vector should not be applied
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 30 Oct 2012 09:43:46 +0000 (09:43 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 30 Oct 2012 09:43:46 +0000 (09:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=100733

Patch by Zoltan Nyul <zoltan.nyul@intel.com> on 2012-10-30
Reviewed by Levi Weintraub.

Source/WebCore:

As stated in the specification (http://dev.w3.org/csswg/css3-3d-transforms/#transform-functions),
a direction vector that cannot be normalized, such as [0, 0, 0], will cause the rotation to not be applied,
but webkit applies it with [1, 0, 0] direction vector.

Test: transforms/3d/general/3dtransform-values.html

* platform/graphics/transforms/TransformationMatrix.cpp:
(WebCore::TransformationMatrix::rotate3d):

LayoutTests:

Add test for 3d rotation with [0, 0, 0] direction vector.

* transforms/3d/general/3dtransform-values-expected.txt:
* transforms/3d/general/3dtransform-values.html:

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

LayoutTests/ChangeLog
LayoutTests/transforms/3d/general/3dtransform-values-expected.txt
LayoutTests/transforms/3d/general/3dtransform-values.html
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp

index 04906a5..920c804 100644 (file)
@@ -1,3 +1,15 @@
+2012-10-30  Zoltan Nyul  <zoltan.nyul@intel.com>
+
+        3d rotation with [0, 0, 0] direction vector should not be applied
+        https://bugs.webkit.org/show_bug.cgi?id=100733
+
+        Reviewed by Levi Weintraub.
+
+        Add test for 3d rotation with [0, 0, 0] direction vector.
+
+        * transforms/3d/general/3dtransform-values-expected.txt:
+        * transforms/3d/general/3dtransform-values.html:
+
 2012-10-30  Kangil Han  <kangil.han@samsung.com>
 
         [EFL][DRT] Bitmap should show whole view area.
index b2c9698..321d233 100644 (file)
@@ -1,6 +1,7 @@
 transform "translate3d(0, 0, 10px)" expected "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)" : PASS
 transform "translateZ(10px)" expected "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)" : PASS
 transform "rotate3d(0, 1, 0, 180deg)" expected "matrix3d(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1)" : PASS
+transform "rotate3d(0, 0, 0, 180deg)" expected "matrix3d(1, 0, 0, 1, 0, 0)" : PASS
 transform "translate3d(0, 0, 10px)" expected "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)" : PASS
 transform "translate3d(0, 0, 10%)" expected "none" : PASS
 transform "translate3d(0, 0, 10)" expected "none" : PASS
index 3875aac..78883c5 100644 (file)
@@ -29,6 +29,7 @@
       { 'transform' : 'translate3d(0, 0, 10px)', 'result' : 'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)' },
       { 'transform' : 'translateZ(10px)', 'result' : 'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)' },
       { 'transform' : 'rotate3d(0, 1, 0, 180deg)', 'result' : 'matrix3d(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1)' },
+      { 'transform' : 'rotate3d(0, 0, 0, 180deg)', 'result' : 'matrix3d(1, 0, 0, 1, 0, 0)' },
       { 'transform' : 'translate3d(0, 0, 10px)', 'result' : 'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)' },
       { 'transform' : 'translate3d(0, 0, 10%)', 'result' : 'none' }, // percentage values not allowed in the z param
       { 'transform' : 'translate3d(0, 0, 10)', 'result' : 'none' }, // must have units for the z param
index 19f6408..db7f8a2 100644 (file)
@@ -1,3 +1,19 @@
+2012-10-30  Zoltan Nyul  <zoltan.nyul@intel.com>
+
+        3d rotation with [0, 0, 0] direction vector should not be applied
+        https://bugs.webkit.org/show_bug.cgi?id=100733
+
+        Reviewed by Levi Weintraub.
+
+        As stated in the specification (http://dev.w3.org/csswg/css3-3d-transforms/#transform-functions),
+        a direction vector that cannot be normalized, such as [0, 0, 0], will cause the rotation to not be applied,
+        but webkit applies it with [1, 0, 0] direction vector.
+
+        Test: transforms/3d/general/3dtransform-values.html
+
+        * platform/graphics/transforms/TransformationMatrix.cpp:
+        (WebCore::TransformationMatrix::rotate3d):
+
 2012-10-30  Yury Semikhatsky  <yurys@chromium.org>
 
         Memory instrumentation: report actual object address for CachedResourceClients
index 495b15f..ba6fe72 100644 (file)
@@ -727,24 +727,22 @@ TransformationMatrix& TransformationMatrix::scale3d(double sx, double sy, double
 
 TransformationMatrix& TransformationMatrix::rotate3d(double x, double y, double z, double angle)
 {
-    // Angles are in degrees. Switch to radians.
-    angle = deg2rad(angle);
-
-    double sinTheta = sin(angle);
-    double cosTheta = cos(angle);
-    
     // Normalize the axis of rotation
     double length = sqrt(x * x + y * y + z * z);
     if (length == 0) {
-        // bad vector, just use something reasonable
-        x = 0;
-        y = 0;
-        z = 1;
+        // A direction vector that cannot be normalized, such as [0, 0, 0], will cause the rotation to not be applied. 
+        return *this;
     } else if (length != 1) {
         x /= length;
         y /= length;
         z /= length;
     }
+
+    // Angles are in degrees. Switch to radians.
+    angle = deg2rad(angle);
+
+    double sinTheta = sin(angle);
+    double cosTheta = cos(angle);
     
     TransformationMatrix mat;