diff options
author | Mátyás Mustoha <mmatyas@inf.u-szeged.hu> | 2015-04-20 13:16:45 +0200 |
---|---|---|
committer | Mátyás Mustoha <mmatyas@inf.u-szeged.hu> | 2015-04-22 20:54:27 +0200 |
commit | a8343a07509ed48673268d1fdcb30c798d3b19f8 (patch) | |
tree | 4a3b5bd515d616456d2b91fac3c49c96fd5354d1 | |
parent | 8efd70b01b0ff9b42722e6b9d88940f6944ebba2 (diff) | |
download | servo-a8343a07509ed48673268d1fdcb30c798d3b19f8.tar.gz servo-a8343a07509ed48673268d1fdcb30c798d3b19f8.zip |
Canvas: implement global composition and blending.
31 files changed, 221 insertions, 127 deletions
diff --git a/components/canvas/canvas_msg.rs b/components/canvas/canvas_msg.rs index cfdea3c2af2..6399302161b 100644 --- a/components/canvas/canvas_msg.rs +++ b/components/canvas/canvas_msg.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use canvas_paint_task::{FillOrStrokeStyle, LineCapStyle, LineJoinStyle}; +use canvas_paint_task::{FillOrStrokeStyle, LineCapStyle, LineJoinStyle, CompositionOrBlending}; use geom::matrix2d::Matrix2D; use geom::point::Point2D; use geom::rect::Rect; @@ -46,6 +46,7 @@ pub enum Canvas2dMsg { SetLineJoin(LineJoinStyle), SetMiterLimit(f32), SetGlobalAlpha(f32), + SetGlobalComposition(CompositionOrBlending), SetTransform(Matrix2D<f32>), } diff --git a/components/canvas/canvas_paint_task.rs b/components/canvas/canvas_paint_task.rs index eefc55e8d91..79dc45415c5 100644 --- a/components/canvas/canvas_paint_task.rs +++ b/components/canvas/canvas_paint_task.rs @@ -4,8 +4,9 @@ use azure::azure::AzFloat; use azure::azure_hl::{DrawTarget, SurfaceFormat, BackendType, StrokeOptions, DrawOptions, Pattern}; -use azure::azure_hl::{ColorPattern, PathBuilder, JoinStyle, CapStyle, DrawSurfaceOptions, Filter}; +use azure::azure_hl::{ColorPattern, PathBuilder, DrawSurfaceOptions, Filter}; use azure::azure_hl::{GradientStop, LinearGradientPattern, RadialGradientPattern, ExtendMode}; +use azure::azure_hl::{JoinStyle, CapStyle, CompositionOp}; use canvas_msg::{CanvasMsg, Canvas2dMsg, CanvasCommonMsg}; use geom::matrix2d::Matrix2D; use geom::point::Point2D; @@ -244,6 +245,7 @@ impl<'a> CanvasPaintTask<'a> { Canvas2dMsg::SetMiterLimit(limit) => painter.set_miter_limit(limit), Canvas2dMsg::SetTransform(ref matrix) => painter.set_transform(matrix), Canvas2dMsg::SetGlobalAlpha(alpha) => painter.set_global_alpha(alpha), + Canvas2dMsg::SetGlobalComposition(op) => painter.set_global_composition(op), Canvas2dMsg::GetImageData(dest_rect, canvas_size, chan) => painter.get_image_data(dest_rect, canvas_size, chan), Canvas2dMsg::PutImageData(imagedata, image_data_rect, dirty_rect) => painter.put_image_data(imagedata, image_data_rect, dirty_rect), @@ -477,6 +479,10 @@ impl<'a> CanvasPaintTask<'a> { self.state.draw_options.alpha = alpha; } + fn set_global_composition(&mut self, op: CompositionOrBlending) { + self.state.draw_options.set_composition_op(op.to_azure_style()); + } + fn create(size: Size2D<i32>) -> DrawTarget { DrawTarget::new(BackendType::Skia, size, SurfaceFormat::B8G8R8A8) } @@ -715,6 +721,185 @@ impl LineJoinStyle { } } +#[derive(Copy, Clone, PartialEq)] +pub enum CompositionStyle { + SrcIn, + SrcOut, + SrcOver, + SrcAtop, + DestIn, + DestOut, + DestOver, + DestAtop, + Copy, + Lighter, + Xor, +} + +impl CompositionStyle { + fn to_azure_style(&self) -> CompositionOp { + match *self { + CompositionStyle::SrcIn => CompositionOp::In, + CompositionStyle::SrcOut => CompositionOp::Out, + CompositionStyle::SrcOver => CompositionOp::Over, + CompositionStyle::SrcAtop => CompositionOp::Atop, + CompositionStyle::DestIn => CompositionOp::DestIn, + CompositionStyle::DestOut => CompositionOp::DestOut, + CompositionStyle::DestOver => CompositionOp::DestOver, + CompositionStyle::DestAtop => CompositionOp::DestAtop, + CompositionStyle::Copy => CompositionOp::Source, + CompositionStyle::Lighter => CompositionOp::Add, + CompositionStyle::Xor => CompositionOp::Xor, + } + } + + pub fn from_str(string: &str) -> Option<CompositionStyle> { + match string { + "source-in" => Some(CompositionStyle::SrcIn), + "source-out" => Some(CompositionStyle::SrcOut), + "source-over" => Some(CompositionStyle::SrcOver), + "source-atop" => Some(CompositionStyle::SrcAtop), + "destination-in" => Some(CompositionStyle::DestIn), + "destination-out" => Some(CompositionStyle::DestOut), + "destination-over" => Some(CompositionStyle::DestOver), + "destination-atop" => Some(CompositionStyle::DestAtop), + "copy" => Some(CompositionStyle::Copy), + "lighter" => Some(CompositionStyle::Lighter), + "xor" => Some(CompositionStyle::Xor), + _ => None + } + } + + pub fn to_str(&self) -> &str { + match *self { + CompositionStyle::SrcIn => "source-in", + CompositionStyle::SrcOut => "source-out", + CompositionStyle::SrcOver => "source-over", + CompositionStyle::SrcAtop => "source-atop", + CompositionStyle::DestIn => "destination-in", + CompositionStyle::DestOut => "destination-out", + CompositionStyle::DestOver => "destination-over", + CompositionStyle::DestAtop => "destination-atop", + CompositionStyle::Copy => "copy", + CompositionStyle::Lighter => "lighter", + CompositionStyle::Xor => "xor", + } + } +} + +#[derive(Copy, Clone, PartialEq)] +pub enum BlendingStyle { + Multiply, + Screen, + Overlay, + Darken, + Lighten, + ColorDodge, + ColorBurn, + HardLight, + SoftLight, + Difference, + Exclusion, + Hue, + Saturation, + Color, + Luminosity, +} + +impl BlendingStyle { + fn to_azure_style(&self) -> CompositionOp { + match *self { + BlendingStyle::Multiply => CompositionOp::Multiply, + BlendingStyle::Screen => CompositionOp::Screen, + BlendingStyle::Overlay => CompositionOp::Overlay, + BlendingStyle::Darken => CompositionOp::Darken, + BlendingStyle::Lighten => CompositionOp::Lighten, + BlendingStyle::ColorDodge => CompositionOp::ColorDodge, + BlendingStyle::ColorBurn => CompositionOp::ColorBurn, + BlendingStyle::HardLight => CompositionOp::HardLight, + BlendingStyle::SoftLight => CompositionOp::SoftLight, + BlendingStyle::Difference => CompositionOp::Difference, + BlendingStyle::Exclusion => CompositionOp::Exclusion, + BlendingStyle::Hue => CompositionOp::Hue, + BlendingStyle::Saturation => CompositionOp::Saturation, + BlendingStyle::Color => CompositionOp::Color, + BlendingStyle::Luminosity => CompositionOp::Luminosity, + } + } + + pub fn from_str(string: &str) -> Option<BlendingStyle> { + match string { + "multiply" => Some(BlendingStyle::Multiply), + "screen" => Some(BlendingStyle::Screen), + "overlay" => Some(BlendingStyle::Overlay), + "darken" => Some(BlendingStyle::Darken), + "lighten" => Some(BlendingStyle::Lighten), + "color-dodge" => Some(BlendingStyle::ColorDodge), + "color-burn" => Some(BlendingStyle::ColorBurn), + "hard-light" => Some(BlendingStyle::HardLight), + "soft-light" => Some(BlendingStyle::SoftLight), + "difference" => Some(BlendingStyle::Difference), + "exclusion" => Some(BlendingStyle::Exclusion), + "hue" => Some(BlendingStyle::Hue), + "saturation" => Some(BlendingStyle::Saturation), + "color" => Some(BlendingStyle::Color), + "luminosity" => Some(BlendingStyle::Luminosity), + _ => None + } + } + + pub fn to_str(&self) -> &str { + match *self { + BlendingStyle::Multiply => "multiply", + BlendingStyle::Screen => "screen", + BlendingStyle::Overlay => "overlay", + BlendingStyle::Darken => "darken", + BlendingStyle::Lighten => "lighten", + BlendingStyle::ColorDodge => "color-dodge", + BlendingStyle::ColorBurn => "color-burn", + BlendingStyle::HardLight => "hard-light", + BlendingStyle::SoftLight => "soft-light", + BlendingStyle::Difference => "difference", + BlendingStyle::Exclusion => "exclusion", + BlendingStyle::Hue => "hue", + BlendingStyle::Saturation => "saturation", + BlendingStyle::Color => "color", + BlendingStyle::Luminosity => "luminosity", + } + } +} + +#[derive(Copy, Clone, PartialEq)] +pub enum CompositionOrBlending { + Composition(CompositionStyle), + Blending(BlendingStyle), +} + +impl CompositionOrBlending { + fn to_azure_style(&self) -> CompositionOp { + match *self { + CompositionOrBlending::Composition(op) => op.to_azure_style(), + CompositionOrBlending::Blending(op) => op.to_azure_style(), + } + } + + pub fn default() -> CompositionOrBlending { + CompositionOrBlending::Composition(CompositionStyle::SrcOver) + } + + pub fn from_str(string: &str) -> Option<CompositionOrBlending> { + if let Some(op) = CompositionStyle::from_str(string) { + return Some(CompositionOrBlending::Composition(op)); + } + + if let Some(op) = BlendingStyle::from_str(string) { + return Some(CompositionOrBlending::Blending(op)); + } + + None + } +} + /// Used by drawImage to get rid of the extra pixels of the image data that /// won't be copied to the canvas /// image_data: Color pixel data of the image diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 10e13c90a5b..0d261092bb4 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -35,7 +35,7 @@ use dom::bindings::utils::{Reflectable, Reflector, WindowProxyHandler}; use script_task::ScriptChan; use canvas::canvas_paint_task::{CanvasGradientStop, LinearGradientStyle, RadialGradientStyle}; -use canvas::canvas_paint_task::{LineCapStyle, LineJoinStyle}; +use canvas::canvas_paint_task::{LineCapStyle, LineJoinStyle, CompositionOrBlending}; use cssparser::RGBA; use encoding::types::EncodingRef; use geom::matrix2d::Matrix2D; @@ -270,7 +270,7 @@ no_jsmanaged_fields!(RGBA); no_jsmanaged_fields!(Matrix2D<T>); no_jsmanaged_fields!(StorageType); no_jsmanaged_fields!(CanvasGradientStop, LinearGradientStyle, RadialGradientStyle); -no_jsmanaged_fields!(LineCapStyle, LineJoinStyle); +no_jsmanaged_fields!(LineCapStyle, LineJoinStyle, CompositionOrBlending); impl JSTraceable for Box<ScriptChan+Send> { #[inline] diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 9f3ae840060..f6111739d8b 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -30,7 +30,7 @@ use geom::size::Size2D; use canvas::canvas_msg::{CanvasMsg, Canvas2dMsg, CanvasCommonMsg}; use canvas::canvas_paint_task::{CanvasPaintTask, FillOrStrokeStyle}; use canvas::canvas_paint_task::{LinearGradientStyle, RadialGradientStyle}; -use canvas::canvas_paint_task::{LineCapStyle, LineJoinStyle}; +use canvas::canvas_paint_task::{LineCapStyle, LineJoinStyle, CompositionOrBlending}; use net_traits::image::base::Image; use net_traits::image_cache_task::{ImageResponseMsg, Msg}; @@ -61,6 +61,7 @@ pub struct CanvasRenderingContext2D { #[jstraceable] struct CanvasContextState { global_alpha: f64, + global_composition: CompositionOrBlending, image_smoothing_enabled: bool, stroke_color: RGBA, line_width: f64, @@ -81,6 +82,7 @@ impl CanvasContextState { }; CanvasContextState { global_alpha: 1.0, + global_composition: CompositionOrBlending::default(), image_smoothing_enabled: true, stroke_color: black, line_width: 1.0, @@ -421,6 +423,23 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetGlobalAlpha(alpha as f32))).unwrap() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalcompositeoperation + fn GlobalCompositeOperation(self) -> DOMString { + let state = self.state.borrow(); + match state.global_composition { + CompositionOrBlending::Composition(op) => op.to_str().to_owned(), + CompositionOrBlending::Blending(op) => op.to_str().to_owned(), + } + } + + // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalcompositeoperation + fn SetGlobalCompositeOperation(self, op_str: DOMString) { + if let Some(op) = CompositionOrBlending::from_str(&op_str) { + self.state.borrow_mut().global_composition = op; + self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetGlobalComposition(op))).unwrap() + } + } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-fillrect fn FillRect(self, x: f64, y: f64, width: f64, height: f64) { if let Some(rect) = self.create_drawable_rect(x, y, width, height) { diff --git a/components/script/dom/webidls/CanvasRenderingContext2D.webidl b/components/script/dom/webidls/CanvasRenderingContext2D.webidl index 268a129003d..447afc745f5 100644 --- a/components/script/dom/webidls/CanvasRenderingContext2D.webidl +++ b/components/script/dom/webidls/CanvasRenderingContext2D.webidl @@ -50,7 +50,7 @@ interface CanvasRenderingContext2D { // compositing attribute unrestricted double globalAlpha; // (default 1.0) - // attribute DOMString globalCompositeOperation; // (default source-over) + attribute DOMString globalCompositeOperation; // (default source-over) // image smoothing attribute boolean imageSmoothingEnabled; // (default true) diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.casesensitive.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.casesensitive.html.ini deleted file mode 100644 index 1468279d320..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.casesensitive.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.casesensitive.html] - type: testharness - [Canvas test: 2d.composite.operation.casesensitive] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.clear.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.clear.html.ini deleted file mode 100644 index 8ddda3e4602..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.clear.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.clear.html] - type: testharness - [Canvas test: 2d.composite.operation.clear] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.darker.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.darker.html.ini deleted file mode 100644 index 77c1dfc146d..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.darker.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.darker.html] - type: testharness - [Canvas test: 2d.composite.operation.darker] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.default.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.default.html.ini deleted file mode 100644 index 4eeb2613121..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.default.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.default.html] - type: testharness - [Canvas test: 2d.composite.operation.default] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.highlight.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.highlight.html.ini deleted file mode 100644 index 78655d8a483..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.highlight.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.highlight.html] - type: testharness - [Canvas test: 2d.composite.operation.highlight] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.nullsuffix.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.nullsuffix.html.ini deleted file mode 100644 index a4606d7552e..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.nullsuffix.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.nullsuffix.html] - type: testharness - [Canvas test: 2d.composite.operation.nullsuffix] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.over.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.over.html.ini deleted file mode 100644 index 995fd951428..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.over.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.over.html] - type: testharness - [Canvas test: 2d.composite.operation.over] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.unrecognised.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.unrecognised.html.ini deleted file mode 100644 index 1233f669734..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.operation.unrecognised.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.operation.unrecognised.html] - type: testharness - [Canvas test: 2d.composite.operation.unrecognised] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-atop.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-atop.html.ini deleted file mode 100644 index a7e384149a2..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-atop.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.solid.destination-atop.html] - type: testharness - [Canvas test: 2d.composite.solid.destination-atop] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-in.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-in.html.ini deleted file mode 100644 index 322f1503513..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-in.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.solid.destination-in.html] - type: testharness - [Canvas test: 2d.composite.solid.destination-in] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-out.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-out.html.ini deleted file mode 100644 index 7346214d9e0..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-out.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.solid.destination-out.html] - type: testharness - [Canvas test: 2d.composite.solid.destination-out] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-over.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-over.html.ini deleted file mode 100644 index 2db42d95dca..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.destination-over.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.solid.destination-over.html] - type: testharness - [Canvas test: 2d.composite.solid.destination-over] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.lighter.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.lighter.html.ini deleted file mode 100644 index 9666e52886e..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.lighter.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.solid.lighter.html] - type: testharness - [Canvas test: 2d.composite.solid.lighter] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.source-out.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.source-out.html.ini deleted file mode 100644 index 6c0784f3fb7..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.source-out.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.solid.source-out.html] - type: testharness - [Canvas test: 2d.composite.solid.source-out] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.xor.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.xor.html.ini deleted file mode 100644 index 417c11463fd..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.solid.xor.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.solid.xor.html] - type: testharness - [Canvas test: 2d.composite.solid.xor] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.transparent.lighter.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.transparent.lighter.html.ini deleted file mode 100644 index 0050fcee30c..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.transparent.lighter.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.transparent.lighter.html] - type: testharness - [Canvas test: 2d.composite.transparent.lighter] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.copy.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.copy.html.ini deleted file mode 100644 index 7dc0b0df511..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.copy.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.fill.copy.html] - type: testharness - [fill() 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.fill.destination-atop.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.destination-atop.html.ini deleted file mode 100644 index 9b2d545fc8c..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.destination-atop.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.fill.destination-atop.html] - type: testharness - [fill() 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.fill.destination-in.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.destination-in.html.ini deleted file mode 100644 index c7d1065df1c..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.destination-in.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.fill.destination-in.html] - type: testharness - [fill() 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.fill.source-in.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.source-in.html.ini deleted file mode 100644 index 44e030afd4e..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.source-in.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.fill.source-in.html] - type: testharness - [fill() 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.fill.source-out.html.ini b/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.source-out.html.ini deleted file mode 100644 index 13560b6ca6c..00000000000 --- a/tests/wpt/metadata/2dcontext/compositing/2d.composite.uncovered.fill.source-out.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.composite.uncovered.fill.source-out.html] - type: testharness - [fill() 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/drawing-rectangles-to-the-canvas/2d.strokeRect.globalcomposite.html.ini b/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.globalcomposite.html.ini deleted file mode 100644 index 4fce54347a4..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-rectangles-to-the-canvas/2d.strokeRect.globalcomposite.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.strokeRect.globalcomposite.html] - type: testharness - [strokeRect is not affected by globalCompositeOperation] - expected: FAIL - diff --git a/tests/wpt/metadata/2dcontext/shadows/2d.shadow.composite.1.html.ini b/tests/wpt/metadata/2dcontext/shadows/2d.shadow.composite.1.html.ini new file mode 100644 index 00000000000..dd1d0823ec8 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/shadows/2d.shadow.composite.1.html.ini @@ -0,0 +1,5 @@ +[2d.shadow.composite.1.html] + type: testharness + [Shadows are drawn using globalCompositeOperation] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/shadows/2d.shadow.composite.2.html.ini b/tests/wpt/metadata/2dcontext/shadows/2d.shadow.composite.2.html.ini new file mode 100644 index 00000000000..d440108fa37 --- /dev/null +++ b/tests/wpt/metadata/2dcontext/shadows/2d.shadow.composite.2.html.ini @@ -0,0 +1,5 @@ +[2d.shadow.composite.2.html] + type: testharness + [Shadows are drawn using globalCompositeOperation] + expected: FAIL + diff --git a/tests/wpt/metadata/2dcontext/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html.ini b/tests/wpt/metadata/2dcontext/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html.ini deleted file mode 100644 index 358b2b148b4..00000000000 --- a/tests/wpt/metadata/2dcontext/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[2d.state.saverestore.globalCompositeOperation.html] - type: testharness - [save()/restore() works for globalCompositeOperation] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index f05f34dc130..ffc186782d6 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -6879,9 +6879,6 @@ [CanvasRenderingContext2D interface: operation resetTransform()] expected: FAIL - [CanvasRenderingContext2D interface: attribute globalCompositeOperation] - expected: FAIL - [CanvasRenderingContext2D interface: operation createPattern(CanvasImageSource,DOMString)] expected: FAIL @@ -7017,9 +7014,6 @@ [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "resetTransform" with the proper type (12)] expected: FAIL - [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "globalCompositeOperation" with the proper type (14)] - expected: FAIL - [CanvasRenderingContext2D interface: document.createElement("canvas").getContext("2d") must inherit property "strokeStyle" with the proper type (16)] expected: FAIL |