diff options
Diffstat (limited to 'components/script/dom/canvasrenderingcontext2d.rs')
-rw-r--r-- | components/script/dom/canvasrenderingcontext2d.rs | 84 |
1 files changed, 36 insertions, 48 deletions
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 06330b48889..c92c9fcdf29 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -12,7 +12,7 @@ use dom::bindings::codegen::UnionTypes::StringOrCanvasGradientOrCanvasPattern; use dom::bindings::error::Error::{IndexSize, NotSupported, Type, InvalidState, Syntax}; use dom::bindings::error::Fallible; use dom::bindings::global::{GlobalRef, GlobalField}; -use dom::bindings::js::{JS, JSRef, LayoutJS, Rootable, Temporary, Unrooted}; +use dom::bindings::js::{JS, LayoutJS, Root}; use dom::bindings::num::Finite; use dom::bindings::utils::{Reflector, reflect_dom_object}; use dom::canvasgradient::{CanvasGradient, CanvasGradientStyle, ToFillOrStrokeStyle}; @@ -115,20 +115,20 @@ impl CanvasContextState { } impl CanvasRenderingContext2D { - fn new_inherited(global: GlobalRef, canvas: JSRef<HTMLCanvasElement>, size: Size2D<i32>) + fn new_inherited(global: GlobalRef, canvas: &HTMLCanvasElement, size: Size2D<i32>) -> CanvasRenderingContext2D { CanvasRenderingContext2D { reflector_: Reflector::new(), global: GlobalField::from_rooted(&global), renderer: CanvasPaintTask::start(size), - canvas: JS::from_rooted(canvas), + canvas: JS::from_ref(canvas), state: RefCell::new(CanvasContextState::new()), saved_states: RefCell::new(Vec::new()), } } - pub fn new(global: GlobalRef, canvas: JSRef<HTMLCanvasElement>, size: Size2D<i32>) - -> Temporary<CanvasRenderingContext2D> { + pub fn new(global: GlobalRef, canvas: &HTMLCanvasElement, size: Size2D<i32>) + -> Root<CanvasRenderingContext2D> { reflect_dom_object(box CanvasRenderingContext2D::new_inherited(global, canvas, size), global, CanvasRenderingContext2DBinding::Wrap) } @@ -211,7 +211,7 @@ impl CanvasRenderingContext2D { // // https://html.spec.whatwg.org/multipage/#dom-context-2d-drawimage fn draw_html_canvas_element(&self, - canvas: JSRef<HTMLCanvasElement>, + canvas: &HTMLCanvasElement, sx: f64, sy: f64, sw: f64, sh: f64, dx: f64, dy: f64, dw: f64, dh: f64) -> Fallible<()> { // 1. Check the usability of the image argument @@ -235,7 +235,7 @@ impl CanvasRenderingContext2D { CanvasMsg::Canvas2d(Canvas2dMsg::DrawImageSelf(image_size, dest_rect, source_rect, smoothing_enabled)) } else { // Source and target canvases are different let context = match canvas.get_or_init_2d_context() { - Some(context) => context.root(), + Some(context) => context, None => return Err(InvalidState), }; @@ -275,7 +275,7 @@ impl CanvasRenderingContext2D { } fn fetch_image_data(&self, - image_element: &JSRef<HTMLImageElement>) + image_element: &&HTMLImageElement) -> Option<(Vec<u8>, Size2D<f64>)> { let url = match image_element.get_url() { Some(url) => url, @@ -302,7 +302,7 @@ impl CanvasRenderingContext2D { fn request_image_from_cache(&self, url: Url) -> ImageResponse { let canvas = self.canvas.root(); - let window = window_from_node(canvas.r()).root(); + let window = window_from_node(canvas.r()); let window = window.r(); let image_cache = window.image_cache_task(); let (response_chan, response_port) = channel(); @@ -325,11 +325,11 @@ impl CanvasRenderingContext2D { } pub trait CanvasRenderingContext2DHelpers { - fn get_renderer(&self) -> Sender<CanvasMsg>; + fn get_renderer(self) -> Sender<CanvasMsg>; } -impl CanvasRenderingContext2DHelpers for CanvasRenderingContext2D { - fn get_renderer(&self) -> Sender<CanvasMsg> { +impl<'a> CanvasRenderingContext2DHelpers for &'a CanvasRenderingContext2D { + fn get_renderer(self) -> Sender<CanvasMsg> { self.renderer.clone() } } @@ -355,10 +355,10 @@ impl LayoutCanvasRenderingContext2DHelpers for LayoutJS<CanvasRenderingContext2D // Restricted values are guarded in glue code. Therefore we need not add a guard. // // FIXME: this behavior should might be generated by some annotattions to idl. -impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> { +impl<'a> CanvasRenderingContext2DMethods for &'a CanvasRenderingContext2D { // https://html.spec.whatwg.org/multipage/#dom-context-2d-canvas - fn Canvas(self) -> Temporary<HTMLCanvasElement> { - Temporary::from_rooted(self.canvas) + fn Canvas(self) -> Root<HTMLCanvasElement> { + self.canvas.root() } // https://html.spec.whatwg.org/multipage/#dom-context-2d-save @@ -552,8 +552,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> let sy: f64 = 0f64; match image { - HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLCanvasElement(image) => { - let canvas = image.root(); + HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLCanvasElement(canvas) => { let canvas_size = canvas.r().get_size(); let dw: f64 = canvas_size.width as f64; let dh: f64 = canvas_size.height as f64; @@ -564,9 +563,8 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> dx, dy, dw, dh) } HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eCanvasRenderingContext2D(image) => { - let image = image.root(); let context = image.r(); - let canvas = context.Canvas().root(); + let canvas = context.Canvas(); let canvas_size = canvas.r().get_size(); let dw: f64 = canvas_size.width as f64; let dh: f64 = canvas_size.height as f64; @@ -577,7 +575,6 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> dx, dy, dw, dh) } HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLImageElement(image) => { - let image = image.root(); let image_element = image.r(); // https://html.spec.whatwg.org/multipage/#img-error // If the image argument is an HTMLImageElement object that is in the broken state, @@ -615,8 +612,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> let sy: f64 = 0f64; match image { - HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLCanvasElement(image) => { - let canvas = image.root(); + HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLCanvasElement(canvas) => { let canvas_size = canvas.r().get_size(); let sw: f64 = canvas_size.width as f64; let sh: f64 = canvas_size.height as f64; @@ -625,9 +621,8 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> dx, dy, dw, dh) } HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eCanvasRenderingContext2D(image) => { - let image = image.root(); let context = image.r(); - let canvas = context.Canvas().root(); + let canvas = context.Canvas(); let canvas_size = canvas.r().get_size(); let sw: f64 = canvas_size.width as f64; let sh: f64 = canvas_size.height as f64; @@ -636,7 +631,6 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> dx, dy, dw, dh) } HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLImageElement(image) => { - let image = image.root(); let image_element = image.r(); // https://html.spec.whatwg.org/multipage/#img-error // If the image argument is an HTMLImageElement object that is in the broken state, @@ -666,21 +660,18 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> match image { HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLCanvasElement(image) => { - let canvas = image.root(); - return self.draw_html_canvas_element(canvas.r(), + return self.draw_html_canvas_element(image.r(), sx, sy, sw, sh, dx, dy, dw, dh) } HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eCanvasRenderingContext2D(image) => { - let image = image.root(); let context = image.r(); - let canvas = context.Canvas().root(); + let canvas = context.Canvas(); return self.draw_html_canvas_element(canvas.r(), sx, sy, sw, sh, dx, dy, dw, dh) } HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLImageElement(image) => { - let image = image.root(); let image_element = image.r(); // https://html.spec.whatwg.org/multipage/#img-error // If the image argument is an HTMLImageElement object that is in the broken state, @@ -820,7 +811,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> StringOrCanvasGradientOrCanvasPattern::eString(result) }, CanvasFillOrStrokeStyle::Gradient(gradient) => { - StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Unrooted::from_js(gradient)) + StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(gradient.root()) }, } } @@ -840,11 +831,10 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } }, StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(gradient) => { - let gradient_root = gradient.root(); self.state.borrow_mut().stroke_style = CanvasFillOrStrokeStyle::Gradient( - JS::from_rooted(gradient_root.r())); + JS::from_ref(gradient.r())); let msg = CanvasMsg::Canvas2d( - Canvas2dMsg::SetStrokeStyle(gradient_root.r().to_fill_or_stroke_style())); + Canvas2dMsg::SetStrokeStyle(gradient.r().to_fill_or_stroke_style())); self.renderer.send(msg).unwrap(); }, _ => {} @@ -860,7 +850,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> StringOrCanvasGradientOrCanvasPattern::eString(result) }, CanvasFillOrStrokeStyle::Gradient(gradient) => { - StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(Unrooted::from_js(gradient)) + StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(gradient.root()) }, } } @@ -880,22 +870,21 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } } StringOrCanvasGradientOrCanvasPattern::eCanvasGradient(gradient) => { - let gradient_root = gradient.root(); self.state.borrow_mut().fill_style = CanvasFillOrStrokeStyle::Gradient( - JS::from_rooted(gradient_root.r())); + JS::from_rooted(&gradient)); let msg = CanvasMsg::Canvas2d( - Canvas2dMsg::SetFillStyle(gradient_root.r().to_fill_or_stroke_style())); + Canvas2dMsg::SetFillStyle(gradient.r().to_fill_or_stroke_style())); self.renderer.send(msg).unwrap(); } StringOrCanvasGradientOrCanvasPattern::eCanvasPattern(pattern) => { self.renderer.send(CanvasMsg::Canvas2d(Canvas2dMsg::SetFillStyle( - pattern.root().r().to_fill_or_stroke_style()))).unwrap(); + pattern.r().to_fill_or_stroke_style()))).unwrap(); } } } // https://html.spec.whatwg.org/multipage/#dom-context-2d-createimagedata - fn CreateImageData(self, sw: f64, sh: f64) -> Fallible<Temporary<ImageData>> { + fn CreateImageData(self, sw: f64, sh: f64) -> Fallible<Root<ImageData>> { if !(sw.is_finite() && sh.is_finite()) { return Err(NotSupported); } @@ -908,7 +897,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } // https://html.spec.whatwg.org/multipage/#dom-context-2d-createimagedata - fn CreateImageData_(self, imagedata: JSRef<ImageData>) -> Fallible<Temporary<ImageData>> { + fn CreateImageData_(self, imagedata: &ImageData) -> Fallible<Root<ImageData>> { Ok(ImageData::new(self.global.root().r(), imagedata.Width(), imagedata.Height(), None)) } @@ -917,7 +906,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> sx: Finite<f64>, sy: Finite<f64>, sw: Finite<f64>, - sh: Finite<f64>) -> Fallible<Temporary<ImageData>> { + sh: Finite<f64>) -> Fallible<Root<ImageData>> { let sx = *sx; let sy = *sy; let sw = *sw; @@ -938,7 +927,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } // https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata - fn PutImageData(self, imagedata: JSRef<ImageData>, dx: Finite<f64>, dy: Finite<f64>) { + fn PutImageData(self, imagedata: &ImageData, dx: Finite<f64>, dy: Finite<f64>) { let dx = *dx; let dy = *dy; @@ -960,7 +949,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> } // https://html.spec.whatwg.org/multipage/#dom-context-2d-putimagedata - fn PutImageData_(self, imagedata: JSRef<ImageData>, dx: Finite<f64>, dy: Finite<f64>, + fn PutImageData_(self, imagedata: &ImageData, dx: Finite<f64>, dy: Finite<f64>, dirtyX: Finite<f64>, dirtyY: Finite<f64>, dirtyWidth: Finite<f64>, dirtyHeight: Finite<f64>) { let dx = *dx; let dy = *dy; @@ -989,7 +978,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // 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>> { + x1: Finite<f64>, y1: Finite<f64>) -> Fallible<Root<CanvasGradient>> { let x0 = *x0; let y0 = *y0; let x1 = *x1; @@ -1006,7 +995,7 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // 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>> { + -> Fallible<Root<CanvasGradient>> { let x0 = *x0; let y0 = *y0; let r0 = *r0; @@ -1025,10 +1014,9 @@ impl<'a> CanvasRenderingContext2DMethods for JSRef<'a, CanvasRenderingContext2D> // https://html.spec.whatwg.org/multipage/#dom-context-2d-createpattern fn CreatePattern(self, image: HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D, - repetition: DOMString) -> Fallible<Temporary<CanvasPattern>> { + repetition: DOMString) -> Fallible<Root<CanvasPattern>> { match image { HTMLImageElementOrHTMLCanvasElementOrCanvasRenderingContext2D::eHTMLImageElement(image) => { - let image = image.root(); let image_element = image.r(); let url = match image_element.get_url() { |