aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/canvasrenderingcontext2d.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/canvasrenderingcontext2d.rs')
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs21
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) {