diff --git a/components/canvas/canvas_paint_task.rs b/components/canvas/canvas_paint_task.rs index f2e8323d6a262..6f9898c4c26b4 100644 --- a/components/canvas/canvas_paint_task.rs +++ b/components/canvas/canvas_paint_task.rs @@ -9,7 +9,6 @@ use geom::size::Size2D; use servo_util::task::spawn_named; use std::comm; -use std::sync::Arc; #[deriving(Clone)] pub enum CanvasMsg { @@ -17,7 +16,7 @@ pub enum CanvasMsg { ClearRect(Rect), StrokeRect(Rect), Recreate(Size2D), - SendPixelContents(Sender>>), + SendPixelContents(Sender>), Close, } @@ -31,7 +30,7 @@ pub struct CanvasPaintTask { impl CanvasPaintTask { fn new(size: Size2D) -> CanvasPaintTask { CanvasPaintTask { - drawtarget: CanvasPaintTask::create_with_data(size), + drawtarget: CanvasPaintTask::create(size), fill_color: ColorPattern::new(Color::new(0., 0., 0., 1.)), stroke_color: ColorPattern::new(Color::new(0., 0., 0., 1.)), stroke_opts: StrokeOptions::new(1.0, 1.0), @@ -71,20 +70,17 @@ impl CanvasPaintTask { self.drawtarget.stroke_rect(rect, &self.stroke_color, &self.stroke_opts, &drawopts); } - fn create_with_data(size: Size2D) -> DrawTarget { - DrawTarget::new_with_data(BackendType::Skia, - Vec::from_elem((size.width * size.height * 4) as uint, 0u8), - 0, - size, - size.width * 4, - SurfaceFormat::B8G8R8A8) + fn create(size: Size2D) -> DrawTarget { + DrawTarget::new(BackendType::Skia, size, SurfaceFormat::B8G8R8A8) } fn recreate(&mut self, size: Size2D) { - self.drawtarget = CanvasPaintTask::create_with_data(size); + self.drawtarget = CanvasPaintTask::create(size); } - fn send_pixel_contents(&mut self, chan: Sender>>) { - chan.send(self.drawtarget.data.clone().unwrap()); + fn send_pixel_contents(&mut self, chan: Sender>) { + self.drawtarget.snapshot().get_data_surface().with_data(|element| { + chan.send(element.to_vec()); + }) } } diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs index 70b8b409edb1f..54725d122b090 100644 --- a/components/layout/display_list_builder.rs +++ b/components/layout/display_list_builder.rs @@ -875,11 +875,11 @@ impl FragmentDisplayListBuilding for Fragment { let height = canvas_fragment_info.replaced_image_fragment_info .computed_block_size.map_or(0, |h| to_px(h) as uint); - let (sender, receiver) = channel::>>(); + let (sender, receiver) = channel::>(); let canvas_data = match canvas_fragment_info.renderer { Some(ref renderer) => { renderer.deref().lock().send(SendPixelContents(sender)); - (*receiver.recv()).clone() + receiver.recv() }, None => Vec::from_elem(width * height * 4, 0xFFu8) };