From 1d022398045e83da1f2ce5215f553bad7857e44e Mon Sep 17 00:00:00 2001 From: David Zbarsky Date: Wed, 5 Aug 2015 20:38:48 -0400 Subject: [PATCH] Respect the composition op when drawing images --- components/canvas/canvas_paint_task.rs | 21 ++++++++++++------- .../2d.composite.canvas.lighter.html.ini | 5 ----- .../2d.composite.image.lighter.html.ini | 5 ----- ...2d.composite.uncovered.image.copy.html.ini | 5 ----- ....uncovered.image.destination-atop.html.ini | 5 ----- ...te.uncovered.image.destination-in.html.ini | 5 ----- ...mposite.uncovered.image.source-in.html.ini | 5 ----- ...posite.uncovered.image.source-out.html.ini | 5 ----- ...omposite.uncovered.nocontext.copy.html.ini | 5 ----- ...overed.nocontext.destination-atop.html.ini | 5 ----- ...ncovered.nocontext.destination-in.html.ini | 5 ----- ...ite.uncovered.nocontext.source-in.html.ini | 5 ----- ...te.uncovered.nocontext.source-out.html.ini | 5 ----- .../2d.drawImage.composite.html.ini | 5 ----- 14 files changed, 14 insertions(+), 72 deletions(-) delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.canvas.lighter.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.image.lighter.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.copy.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-atop.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-in.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-in.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-out.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.copy.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-atop.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-in.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-in.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-out.html.ini delete mode 100644 tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini diff --git a/components/canvas/canvas_paint_task.rs b/components/canvas/canvas_paint_task.rs index b316b5bcd7a..c2921561c49 100644 --- a/components/canvas/canvas_paint_task.rs +++ b/components/canvas/canvas_paint_task.rs @@ -381,11 +381,13 @@ impl<'a> CanvasPaintTask<'a> { self.draw_with_shadow(&rect, |new_draw_target: &DrawTarget| { write_image(&new_draw_target, image_data, source_rect.size, dest_rect, - smoothing_enabled, self.state.draw_options.alpha); + smoothing_enabled, self.state.draw_options.composition, + self.state.draw_options.alpha); }); } else { write_image(&self.drawtarget, image_data, source_rect.size, dest_rect, - smoothing_enabled, self.state.draw_options.alpha); + smoothing_enabled, self.state.draw_options.composition, + self.state.draw_options.alpha); } } @@ -402,12 +404,14 @@ impl<'a> CanvasPaintTask<'a> { self.draw_with_shadow(&rect, |new_draw_target: &DrawTarget| { write_image(&new_draw_target, image_data, source_rect.size, dest_rect, - smoothing_enabled, self.state.draw_options.alpha); + smoothing_enabled, self.state.draw_options.composition, + self.state.draw_options.alpha); }); } else { // Writes on target canvas write_image(&self.drawtarget, image_data, image_size, dest_rect, - smoothing_enabled, self.state.draw_options.alpha); + smoothing_enabled, self.state.draw_options.composition, + self.state.draw_options.alpha); } } @@ -631,7 +635,7 @@ impl<'a> CanvasPaintTask<'a> { Size2D::new(source_rect.size.width, source_rect.size.height)); write_pixels(&self.drawtarget, &imagedata, image_data_rect.size, source_rect, - dest_rect, true, self.state.draw_options.alpha) + dest_rect, true, self.state.draw_options.composition, self.state.draw_options.alpha) } fn set_shadow_offset_x(&mut self, value: f64) { @@ -728,6 +732,7 @@ fn write_image(draw_target: &DrawTarget, image_size: Size2D, dest_rect: Rect, smoothing_enabled: bool, + composition_op: CompositionOp, global_alpha: f32) { if image_data.len() == 0 { return @@ -735,7 +740,8 @@ fn write_image(draw_target: &DrawTarget, let image_rect = Rect::new(Point2D::zero(), image_size); // rgba -> bgra byte_swap(&mut image_data); - write_pixels(&draw_target, &image_data, image_size, image_rect, dest_rect, smoothing_enabled, global_alpha); + write_pixels(&draw_target, &image_data, image_size, image_rect, + dest_rect, smoothing_enabled, composition_op, global_alpha); } /// It writes image data to the target @@ -749,6 +755,7 @@ fn write_pixels(draw_target: &DrawTarget, source_rect: Rect, dest_rect: Rect, smoothing_enabled: bool, + composition_op: CompositionOp, global_alpha: f32) { // From spec https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage // When scaling up, if the imageSmoothingEnabled attribute is set to true, the user agent should attempt @@ -767,7 +774,7 @@ fn write_pixels(draw_target: &DrawTarget, image_size, image_size.width * 4, SurfaceFormat::B8G8R8A8); let draw_surface_options = DrawSurfaceOptions::new(filter, true); - let draw_options = DrawOptions::new(global_alpha, CompositionOp::Over, AntialiasMode::None); + let draw_options = DrawOptions::new(global_alpha, composition_op, AntialiasMode::None); draw_target.draw_surface(source_surface, dest_rect.to_azfloat(), diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.canvas.lighter.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.canvas.lighter.html.ini deleted file mode 100644 index 8e4e7a3ddca..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.canvas.lighter.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.canvas.lighter.html] - type: testharness - [Canvas test: 2d.composite.canvas.lighter] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.image.lighter.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.image.lighter.html.ini deleted file mode 100644 index f822eec7bcc..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.image.lighter.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.image.lighter.html] - type: testharness - [Canvas test: 2d.composite.image.lighter] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.copy.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.copy.html.ini deleted file mode 100644 index 9df43f40d14..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.copy.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.image.copy.html] - type: testharness - [drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-atop.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-atop.html.ini deleted file mode 100644 index ee8680e2c12..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-atop.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.image.destination-atop.html] - type: testharness - [drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-in.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-in.html.ini deleted file mode 100644 index 97bf4477445..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.destination-in.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.image.destination-in.html] - type: testharness - [drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-in.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-in.html.ini deleted file mode 100644 index d302a5baaaf..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-in.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.image.source-in.html] - type: testharness - [drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-out.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-out.html.ini deleted file mode 100644 index a9e0eb4862e..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.image.source-out.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.image.source-out.html] - type: testharness - [drawImage() draws pixels not covered by the source object as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.copy.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.copy.html.ini deleted file mode 100644 index f74bd40b4f6..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.copy.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.nocontext.copy.html] - type: testharness - [drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-atop.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-atop.html.ini deleted file mode 100644 index ca9cef53b42..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-atop.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.nocontext.destination-atop.html] - type: testharness - [drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-in.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-in.html.ini deleted file mode 100644 index 3959a65a60d..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.destination-in.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.nocontext.destination-in.html] - type: testharness - [drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-in.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-in.html.ini deleted file mode 100644 index 76362784c2a..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-in.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.nocontext.source-in.html] - type: testharness - [drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-out.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-out.html.ini deleted file mode 100644 index 929be71efea..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.nocontext.source-out.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.nocontext.source-out.html] - type: testharness - [drawImage() of a canvas with no context draws pixels as (0,0,0,0), and does not leave the pixels unchanged.] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini deleted file mode 100644 index 59f9d248c37..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/2d.drawImage.composite.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.drawImage.composite.html] - type: testharness - [Canvas test: 2d.drawImage.composite] - expected: FAIL -