diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-04-09 09:37:44 -0500 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-04-09 09:37:44 -0500 |
commit | 325899bfad2f87e2c46b96bc542110d8f0cada48 (patch) | |
tree | c5093805d08458c80b979b512cf0c1b381290c0d | |
parent | bbe1403b2724e3820bd29b163fd9b81ca31a3bad (diff) | |
parent | 93fa9e607a12f1b32b017bb94d0f01f5a0ea1607 (diff) | |
download | servo-325899bfad2f87e2c46b96bc542110d8f0cada48.tar.gz servo-325899bfad2f87e2c46b96bc542110d8f0cada48.zip |
Auto merge of #5613 - mmatyas:canvas_miterlimit, r=jdm
This exposes some other canvas tests which were marked as PASS before. Two strokeRect related tests are fixed by #5612, and lineCap/lineJoin will have an implementation soon.
15 files changed, 38 insertions, 48 deletions
diff --git a/components/canvas/canvas_paint_task.rs b/components/canvas/canvas_paint_task.rs index 76af23fa44f..150240bc722 100644 --- a/components/canvas/canvas_paint_task.rs +++ b/components/canvas/canvas_paint_task.rs @@ -39,6 +39,7 @@ pub enum CanvasMsg { SetFillStyle(FillOrStrokeStyle), SetStrokeStyle(FillOrStrokeStyle), SetLineWidth(f32), + SetMiterLimit(f32), SetTransform(Matrix2D<f32>), SetGlobalAlpha(f32), Recreate(Size2D<i32>), @@ -202,7 +203,7 @@ impl<'a> CanvasPaintTask<'a> { draw_options: DrawOptions::new(1.0, 0), fill_style: Pattern::Color(ColorPattern::new(color::black())), stroke_style: Pattern::Color(ColorPattern::new(color::black())), - stroke_opts: StrokeOptions::new(1.0, JoinStyle::MiterOrBevel, CapStyle::Butt, 1.0, &[]), + stroke_opts: StrokeOptions::new(1.0, JoinStyle::MiterOrBevel, CapStyle::Butt, 10.0, &[]), path_builder: path_builder, transform: Matrix2D::identity(), } @@ -245,6 +246,7 @@ impl<'a> CanvasPaintTask<'a> { CanvasMsg::SetFillStyle(style) => painter.set_fill_style(style), CanvasMsg::SetStrokeStyle(style) => painter.set_stroke_style(style), CanvasMsg::SetLineWidth(width) => painter.set_line_width(width), + CanvasMsg::SetMiterLimit(limit) => painter.set_miter_limit(limit), CanvasMsg::SetTransform(ref matrix) => painter.set_transform(matrix), CanvasMsg::SetGlobalAlpha(alpha) => painter.set_global_alpha(alpha), CanvasMsg::Recreate(size) => painter.recreate(size), @@ -425,6 +427,10 @@ impl<'a> CanvasPaintTask<'a> { self.stroke_opts.line_width = width; } + fn set_miter_limit(&mut self, limit: f32) { + self.stroke_opts.miter_limit = limit; + } + fn set_transform(&mut self, transform: &Matrix2D<f32>) { self.transform = *transform; self.drawtarget.set_transform(transform) diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 9c7c7a58f2f..17dda025def 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -53,6 +53,7 @@ pub struct CanvasRenderingContext2D { image_smoothing_enabled: Cell<bool>, stroke_color: Cell<RGBA>, line_width: Cell<f64>, + miter_limit: Cell<f64>, fill_color: Cell<RGBA>, transform: Cell<Matrix2D<f32>>, } @@ -75,6 +76,7 @@ impl CanvasRenderingContext2D { image_smoothing_enabled: Cell::new(true), stroke_color: Cell::new(black), line_width: Cell::new(1.0), + miter_limit: Cell::new(10.0), fill_color: Cell::new(black), transform: Cell::new(Matrix2D::identity()), } @@ -816,6 +818,19 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.line_width.set(width); self.renderer.send(CanvasMsg::SetLineWidth(width as f32)).unwrap() } + + fn MiterLimit(self) -> f64 { + self.miter_limit.get() + } + + fn SetMiterLimit(self, limit: f64) { + if !limit.is_finite() || limit <= 0.0 { + return; + } + + self.miter_limit.set(limit); + self.renderer.send(CanvasMsg::SetMiterLimit(limit as f32)).unwrap() + } } #[unsafe_destructor] diff --git a/components/script/dom/webidls/CanvasRenderingContext2D.webidl b/components/script/dom/webidls/CanvasRenderingContext2D.webidl index 6808e3c7d24..4c4b94374f2 100644 --- a/components/script/dom/webidls/CanvasRenderingContext2D.webidl +++ b/components/script/dom/webidls/CanvasRenderingContext2D.webidl @@ -136,7 +136,7 @@ interface CanvasDrawingStyles { attribute unrestricted double lineWidth; // (default 1) //attribute DOMString lineCap; // "butt", "round", "square" (default "butt") //attribute DOMString lineJoin; // "round", "bevel", "miter" (default "miter") - //attribute unrestricted double miterLimit; // (default 10) + attribute unrestricted double miterLimit; // (default 10) // dashed lines //void setLineDash(sequence<unrestricted double> segments); // default empty diff --git a/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.4.html.ini b/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.4.html.ini new file mode 100644 index 00000000000..31169ceaf88 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.4.html.ini @@ -0,0 +1,5 @@ +[2d.strokeRect.zero.4.html] + type: testharness + [strokeRect of Nx0 pixels draws a closed line with no caps] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.5.html.ini b/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.5.html.ini deleted file mode 100644 index b08134d8578..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.5.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.strokeRect.zero.5.html] - type: testharness - [strokeRect of Nx0 pixels draws a closed line with joins] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.cap.closed.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.cap.closed.html.ini new file mode 100644 index 00000000000..20856efda4e --- /dev/null +++ b/tests/wpt/metadata/2dcontext/line-styles/2d.line.cap.closed.html.ini @@ -0,0 +1,5 @@ +[2d.line.cap.closed.html] + type: testharness + [Line caps are not drawn at the corners of an unclosed rectangle] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.bevel.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.bevel.html.ini new file mode 100644 index 00000000000..4f618507159 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.bevel.html.ini @@ -0,0 +1,5 @@ +[2d.line.join.bevel.html] + type: testharness + [lineJoin \'bevel\' is rendered correctly] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.closed.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.closed.html.ini deleted file mode 100644 index 15f8a96aea1..00000000000 --- a/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.closed.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.line.join.closed.html] - type: testharness - [Line joins are drawn at the corner of a closed rectangle] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.miter.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.miter.html.ini deleted file mode 100644 index 9defd450bd7..00000000000 --- a/tests/wpt/metadata/2dcontext/line-styles/2d.line.join.miter.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.line.join.miter.html] - type: testharness - [lineJoin \'miter\' is rendered correctly] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.acute.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.acute.html.ini deleted file mode 100644 index 8a4bb47701b..00000000000 --- a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.acute.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.line.miter.acute.html] - type: testharness - [Miter joins are drawn correctly with acute angles] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.invalid.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.invalid.html.ini deleted file mode 100644 index 90ea3c99711..00000000000 --- a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.invalid.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.line.miter.invalid.html] - type: testharness - [Setting miterLimit to invalid values is ignored] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.obtuse.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.obtuse.html.ini deleted file mode 100644 index 8e0a2db94f8..00000000000 --- a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.obtuse.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.line.miter.obtuse.html] - type: testharness - [Miter joins are drawn correctly with obtuse angles] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.valid.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.valid.html.ini deleted file mode 100644 index 1d0e60231c0..00000000000 --- a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.valid.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.line.miter.valid.html] - type: testharness - [Setting miterLimit to valid values works] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.within.html.ini b/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.within.html.ini deleted file mode 100644 index 2a555ab524e..00000000000 --- a/tests/wpt/metadata/2dcontext/line-styles/2d.line.miter.within.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.line.miter.within.html] - type: testharness - [Miter joins are drawn when the miter limit is not quite exceeded] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index 8fb6bc647dc..7d8dde43332 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -6999,9 +6999,6 @@ [CanvasRenderingContext2D interface: attribute lineJoin] expected: FAIL - [CanvasRenderingContext2D interface: attribute miterLimit] - expected: FAIL - [CanvasRenderingContext2D interface: operation setLineDash([object Object\])] expected: FAIL @@ -7209,9 +7206,6 @@ [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "lineJoin" with the proper type (61)] expected: FAIL - [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "miterLimit" with the proper type (62)] - expected: FAIL - [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "setLineDash" with the proper type (63)] expected: FAIL |