diff options
Diffstat (limited to 'components/script/dom/canvasrenderingcontext2d.rs')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 54 |
1 files changed, 45 insertions, 9 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 891c2d49b87..7ac2fac20d3 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -45,6 +45,7 @@ use util::str::DOMString; use url::Url; use util::vec::byte_swap; +// https://html.spec.whatwg.org/multipage/#canvasrenderingcontext2d #[dom_struct] pub struct CanvasRenderingContext2D { reflector_: Reflector, @@ -164,7 +165,7 @@ impl CanvasRenderingContext2D { // The rectangle (sx, sy, sw, sh) from the source image // is copied on the rectangle (dx, dy, dh, dw) of the destination canvas // - // https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-drawimage + // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage fn draw_html_canvas_element(&self, canvas: JSRef<HTMLCanvasElement>, sx: f64, sy: f64, sw: f64, sh: f64, @@ -312,10 +313,12 @@ impl LayoutCanvasRenderingContext2DHelpers for LayoutJS<CanvasRenderingContext2D // // FIXME: this behavior should might be generated by some annotattions to idl. impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> { + // https://html.spec.whatwg.org/multipage/#dom-context-2d-canvas fn Canvas(self) -> Temporary<HTMLCanvasElement> { Temporary::new(self.canvas) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-scale fn Scale(self, x: f64, y: f64) { if !(x.is_finite() && y.is_finite()) { return; @@ -325,6 +328,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.update_transform() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-translate fn Translate(self, x: f64, y: f64) { if !(x.is_finite() && y.is_finite()) { return; @@ -334,6 +338,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.update_transform() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-transform fn Transform(self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64) { if !(a.is_finite() && b.is_finite() && c.is_finite() && d.is_finite() && e.is_finite() && f.is_finite()) { @@ -349,6 +354,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.update_transform() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-settransform fn SetTransform(self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64) { if !(a.is_finite() && b.is_finite() && c.is_finite() && d.is_finite() && e.is_finite() && f.is_finite()) { @@ -364,10 +370,12 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.update_transform() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalalpha fn GlobalAlpha(self) -> f64 { self.global_alpha.get() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-globalalpha fn SetGlobalAlpha(self, alpha: f64) { if !alpha.is_finite() || alpha > 1.0 || alpha < 0.0 { return; @@ -377,41 +385,48 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.renderer.send(CanvasMsg::SetGlobalAlpha(alpha as f32)).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) { self.renderer.send(CanvasMsg::FillRect(rect)).unwrap(); } } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-clearrect fn ClearRect(self, x: f64, y: f64, width: f64, height: f64) { if let Some(rect) = self.create_drawable_rect(x, y, width, height) { self.renderer.send(CanvasMsg::ClearRect(rect)).unwrap(); } } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokerect fn StrokeRect(self, x: f64, y: f64, width: f64, height: f64) { if let Some(rect) = self.create_drawable_rect(x, y, width, height) { self.renderer.send(CanvasMsg::StrokeRect(rect)).unwrap(); } } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-beginpath fn BeginPath(self) { self.renderer.send(CanvasMsg::BeginPath).unwrap(); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-closepath fn ClosePath(self) { self.renderer.send(CanvasMsg::ClosePath).unwrap(); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-fill fn Fill(self, _: CanvasWindingRule) { self.renderer.send(CanvasMsg::Fill).unwrap(); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-stroke fn Stroke(self) { self.renderer.send(CanvasMsg::Stroke).unwrap(); } - // https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-drawimage + // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage fn DrawImage(self, image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D, dx: f64, dy: f64) -> Fallible<()> { if !(dx.is_finite() && dy.is_finite()) { @@ -453,7 +468,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLImageElement(image) => { let image = image.root(); let image_element = image.r(); - // https://html.spec.whatwg.org/multipage/embedded-content.html#img-error + // https://html.spec.whatwg.org/multipage/#img-error // If the image argument is an HTMLImageElement object that is in the broken state, // then throw an InvalidStateError exception let (image_data, image_size) = match self.fetch_image_data(&image_element) { @@ -473,7 +488,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } } - // https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-drawimage + // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage fn DrawImage_(self, image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D, dx: f64, dy: f64, dw: f64, dh: f64) -> Fallible<()> { if !(dx.is_finite() && dy.is_finite() && @@ -512,7 +527,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLImageElement(image) => { let image = image.root(); let image_element = image.r(); - // https://html.spec.whatwg.org/multipage/embedded-content.html#img-error + // https://html.spec.whatwg.org/multipage/#img-error // If the image argument is an HTMLImageElement object that is in the broken state, // then throw an InvalidStateError exception let (image_data, image_size) = match self.fetch_image_data(&image_element) { @@ -529,7 +544,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } } - // https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-drawimage + // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage fn DrawImage__(self, image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D, sx: f64, sy: f64, sw: f64, sh: f64, dx: f64, dy: f64, dw: f64, dh: f64) -> Fallible<()> { @@ -556,7 +571,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLImageElement(image) => { let image = image.root(); let image_element = image.r(); - // https://html.spec.whatwg.org/multipage/embedded-content.html#img-error + // https://html.spec.whatwg.org/multipage/#img-error // If the image argument is an HTMLImageElement object that is in the broken state, // then throw an InvalidStateError exception let (image_data, image_size) = match self.fetch_image_data(&image_element) { @@ -571,6 +586,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-moveto fn MoveTo(self, x: f64, y: f64) { if !(x.is_finite() && y.is_finite()) { return; @@ -579,6 +595,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.renderer.send(CanvasMsg::MoveTo(Point2D(x as f32, y as f32))).unwrap(); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-lineto fn LineTo(self, x: f64, y: f64) { if !(x.is_finite() && y.is_finite()) { return; @@ -587,6 +604,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.renderer.send(CanvasMsg::LineTo(Point2D(x as f32, y as f32))).unwrap(); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-quadraticcurveto fn QuadraticCurveTo(self, cpx: f64, cpy: f64, x: f64, y: f64) { if !(cpx.is_finite() && cpy.is_finite() && x.is_finite() && y.is_finite()) { @@ -597,6 +615,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> Point2D(x as f32, y as f32))).unwrap(); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-beziercurveto fn BezierCurveTo(self, cp1x: f64, cp1y: f64, cp2x: f64, cp2y: f64, x: f64, y: f64) { if !(cp1x.is_finite() && cp1y.is_finite() && cp2x.is_finite() && cp2y.is_finite() && x.is_finite() && y.is_finite()) { @@ -608,6 +627,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> Point2D(x as f32, y as f32))).unwrap(); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-arc fn Arc(self, x: Finite<f64>, y: Finite<f64>, r: Finite<f64>, start: Finite<f64>, end: Finite<f64>, ccw: bool) -> Fallible<()> { let x = *x; @@ -625,6 +645,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> Ok(()) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-arcto fn ArcTo(self, cp1x: f64, cp1y: f64, cp2x: f64, cp2y: f64, r: f64) -> Fallible<()> { if !([cp1x, cp1y, cp2x, cp2y, r].iter().all(|x| x.is_finite())) { return Ok(()); @@ -648,15 +669,17 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.image_smoothing_enabled.set(value); } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle fn StrokeStyle(self) -> StringOrCanvasGradientOrCanvasPattern { // FIXME(pcwalton, #4761): This is not spec-compliant. See: // - // https://html.spec.whatwg.org/multipage/scripting.html#serialisation-of-a-colour + // https://html.spec.whatwg.org/multipage/#serialisation-of-a-colour let mut result = String::new(); self.stroke_color.get().to_css(&mut result).unwrap(); StringOrCanvasGradientOrCanvasPattern::eString(result) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle fn SetStrokeStyle(self, value: StringOrCanvasGradientOrCanvasPattern) { match value { StringOrCanvasGradientOrCanvasPattern::eString(string) => { @@ -676,15 +699,17 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle fn FillStyle(self) -> StringOrCanvasGradientOrCanvasPattern { // FIXME(pcwalton, #4761): This is not spec-compliant. See: // - // https://html.spec.whatwg.org/multipage/scripting.html#serialisation-of-a-colour + // https://html.spec.whatwg.org/multipage/#serialisation-of-a-colour let mut result = String::new(); self.stroke_color.get().to_css(&mut result).unwrap(); StringOrCanvasGradientOrCanvasPattern::eString(result) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-strokestyle fn SetFillStyle(self, value: StringOrCanvasGradientOrCanvasPattern) { match value { StringOrCanvasGradientOrCanvasPattern::eString(string) => { @@ -705,6 +730,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-createimagedata fn CreateImageData(self, sw: f64, sh: f64) -> Fallible<Temporary<ImageData>> { if !(sw.is_finite() && sh.is_finite()) { return Err(NotSupported); @@ -717,10 +743,12 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> Ok(ImageData::new(self.global.root().r(), sw.abs().to_u32().unwrap(), sh.abs().to_u32().unwrap(), None)) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-createimagedata fn CreateImageData_(self, imagedata: JSRef<ImageData>) -> Fallible<Temporary<ImageData>> { Ok(ImageData::new(self.global.root().r(), imagedata.Width(), imagedata.Height(), None)) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-getimagedata fn GetImageData(self, sx: Finite<f64>, sy: Finite<f64>, sw: Finite<f64>, sh: Finite<f64>) -> Fallible<Temporary<ImageData>> { let sx = *sx; let sy = *sy; @@ -740,6 +768,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> Ok(ImageData::new(self.global.root().r(), sw.abs().to_u32().unwrap(), sh.abs().to_u32().unwrap(), Some(data))) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata fn PutImageData(self, imagedata: JSRef<ImageData>, dx: Finite<f64>, dy: Finite<f64>) { let dx = *dx; let dy = *dy; @@ -758,6 +787,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.renderer.send(CanvasMsg::PutImageData(data, image_data_rect, dirty_rect)).unwrap() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata fn PutImageData_(self, imagedata: JSRef<ImageData>, dx: Finite<f64>, dy: Finite<f64>, dirtyX: Finite<f64>, dirtyY: Finite<f64>, dirtyWidth: Finite<f64>, dirtyHeight: Finite<f64>) { let dx = *dx; @@ -782,6 +812,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> self.renderer.send(CanvasMsg::PutImageData(data, image_data_rect, dirty_rect)).unwrap() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-createlineargradient fn CreateLinearGradient(self, x0: Finite<f64>, y0: Finite<f64>, x1: Finite<f64>, y1: Finite<f64>) -> Fallible<Temporary<CanvasGradient>> { let x0 = *x0; @@ -796,6 +827,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> CanvasGradientStyle::Linear(LinearGradientStyle::new(x0, y0, x1, y1, Vec::new())))) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-createradialgradient fn CreateRadialGradient(self, x0: Finite<f64>, y0: Finite<f64>, r0: Finite<f64>, x1: Finite<f64>, y1: Finite<f64>, r1: Finite<f64>) -> Fallible<Temporary<CanvasGradient>> { let x0 = *x0; @@ -812,10 +844,12 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> CanvasGradientStyle::Radial(RadialGradientStyle::new(x0, y0, r0, x1, y1, r1, Vec::new())))) } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-linewidth fn LineWidth(self) -> f64 { self.line_width.get() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-linewidth fn SetLineWidth(self, width: f64) { if !width.is_finite() || width <= 0.0 { return; @@ -855,10 +889,12 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-miterlimit fn MiterLimit(self) -> f64 { self.miter_limit.get() } + // https://html.spec.whatwg.org/multipage/#dom-context-2d-miterlimit fn SetMiterLimit(self, limit: f64) { if !limit.is_finite() || limit <= 0.0 { return; |