diff options
Diffstat (limited to 'components/script/dom/canvasrenderingcontext2d.rs')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 21 |
1 files changed, 20 insertions, 1 deletions
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) { |