diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index cd02eb18f0e..b7dc0b73dbc 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -355,6 +355,20 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.update_transform() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-rotate + fn Rotate(self, angle: f64) { + if angle == 0.0 || !angle.is_finite() { + return; + } + + let (sin, cos) = (angle.sin(), angle.cos()); + let transform = self.state.borrow().transform; + self.state.borrow_mut().transform = transform.mul(&Matrix2D::new(cos as f32, sin as f32, + -sin as f32, cos as f32, + 0.0, 0.0)); + self.update_transform() + } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-translate fn Translate(self, x: f64, y: f64) { if !(x.is_finite() && y.is_finite()) { diff --git a/components/script/dom/webidls/CanvasRenderingContext2D.webidl b/components/script/dom/webidls/CanvasRenderingContext2D.webidl index 447afc745f5..0511824ac93 100644 --- a/components/script/dom/webidls/CanvasRenderingContext2D.webidl +++ b/components/script/dom/webidls/CanvasRenderingContext2D.webidl @@ -32,7 +32,7 @@ interface CanvasRenderingContext2D { // transformations (default transform is the identity matrix) // attribute SVGMatrix currentTransform; void scale(unrestricted double x, unrestricted double y); - //void rotate(unrestricted double angle); + void rotate(unrestricted double angle); void translate(unrestricted double x, unrestricted double y); void transform(unrestricted double a, unrestricted double b, diff --git a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.order.html.ini b/tests/wpt/metadata/2dcontext/transformations/2d.transformation.order.html.ini deleted file mode 100644 index a263b319a67..00000000000 --- a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.order.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.transformation.order.html] - type: testharness - [Transformations are applied in the right order] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.direction.html.ini b/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.direction.html.ini deleted file mode 100644 index 9de526626a8..00000000000 --- a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.direction.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.transformation.rotate.direction.html] - type: testharness - [rotate() is clockwise] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.nonfinite.html.ini b/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.nonfinite.html.ini deleted file mode 100644 index bc9a6afb294..00000000000 --- a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.nonfinite.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.transformation.rotate.nonfinite.html] - type: testharness - [rotate() with Infinity/NaN is ignored] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.radians.html.ini b/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.radians.html.ini deleted file mode 100644 index 572010938a9..00000000000 --- a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.radians.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.transformation.rotate.radians.html] - type: testharness - [rotate() uses radians] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.wrap.html.ini b/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.wrap.html.ini deleted file mode 100644 index 31ddd50de23..00000000000 --- a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.wrap.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.transformation.rotate.wrap.html] - type: testharness - [rotate() wraps large positive values correctly] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.wrapnegative.html.ini b/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.wrapnegative.html.ini deleted file mode 100644 index ba64eb83421..00000000000 --- a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.wrapnegative.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.transformation.rotate.wrapnegative.html] - type: testharness - [rotate() wraps large negative values correctly] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.zero.html.ini b/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.zero.html.ini deleted file mode 100644 index ddfed08dbc8..00000000000 --- a/tests/wpt/metadata/2dcontext/transformations/2d.transformation.rotate.zero.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.transformation.rotate.zero.html] - type: testharness - [rotate() by 0 does nothing] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index b0048beb2f8..85bfed3afd1 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -6828,9 +6828,6 @@ [CanvasRenderingContext2D interface: attribute currentTransform] expected: FAIL - [CanvasRenderingContext2D interface: operation rotate(unrestricted double)] - expected: FAIL - [CanvasRenderingContext2D interface: operation resetTransform()] expected: FAIL @@ -6960,12 +6957,6 @@ [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "currentTransform" with the proper type (6)] expected: FAIL - [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "rotate" with the proper type (8)] - expected: FAIL - - [CanvasRenderingContext2D interface: calling rotate(unrestricted double) on document.createElement("canvas").getContext("2d") with too few arguments must throw TypeError] - expected: FAIL - [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "resetTransform" with the proper type (12)] expected: FAIL