diff options
author | Ms2ger <Ms2ger@gmail.com> | 2015-10-26 11:43:23 +0100 |
---|---|---|
committer | Ms2ger <Ms2ger@gmail.com> | 2015-10-26 11:43:23 +0100 |
commit | b1f4bf617d02ce62ca6d67a2a0a4c3b0c90683a5 (patch) | |
tree | 143ac93247dcc94abf8c76564f87a028b658c217 /components/layout | |
parent | a5a4ef7d7038e75a0fecd928459b30543570014e (diff) | |
download | servo-b1f4bf617d02ce62ca6d67a2a0a4c3b0c90683a5.tar.gz servo-b1f4bf617d02ce62ca6d67a2a0a4c3b0c90683a5.zip |
Pass all the data layout needs from canvas elements at once.
Diffstat (limited to 'components/layout')
-rw-r--r-- | components/layout/construct.rs | 3 | ||||
-rw-r--r-- | components/layout/fragment.rs | 11 | ||||
-rw-r--r-- | components/layout/wrapper.rs | 29 |
3 files changed, 11 insertions, 32 deletions
diff --git a/components/layout/construct.rs b/components/layout/construct.rs index 2ed8f286db0..7d3a0b748b0 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -327,7 +327,8 @@ impl<'a> FlowConstructor<'a> { } Some(NodeTypeId::Element(ElementTypeId::HTMLElement( HTMLElementTypeId::HTMLCanvasElement))) => { - SpecificFragmentInfo::Canvas(box CanvasFragmentInfo::new(node)) + let data = node.canvas_data().unwrap(); + SpecificFragmentInfo::Canvas(box CanvasFragmentInfo::new(node, data)) } _ => { // This includes pseudo-elements. diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index 0364e4a2300..ce0047e3ce9 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -28,6 +28,7 @@ use msg::constellation_msg::PipelineId; use net_traits::image::base::Image; use net_traits::image_cache_task::UsePlaceholder; use rustc_serialize::{Encodable, Encoder}; +use script::dom::htmlcanvaselement::HTMLCanvasData; use std::borrow::ToOwned; use std::cmp::{max, min}; use std::collections::LinkedList; @@ -308,13 +309,13 @@ pub struct CanvasFragmentInfo { } impl CanvasFragmentInfo { - pub fn new(node: &ThreadSafeLayoutNode) -> CanvasFragmentInfo { + pub fn new(node: &ThreadSafeLayoutNode, data: HTMLCanvasData) -> CanvasFragmentInfo { CanvasFragmentInfo { replaced_image_fragment_info: ReplacedImageFragmentInfo::new(node, - Some(Au::from_px(node.canvas_width() as i32)), - Some(Au::from_px(node.canvas_height() as i32))), - renderer_id: node.canvas_renderer_id(), - ipc_renderer: node.canvas_ipc_renderer() + Some(Au::from_px(data.width as i32)), + Some(Au::from_px(data.height as i32))), + renderer_id: data.renderer_id, + ipc_renderer: data.ipc_renderer .map(|renderer| Arc::new(Mutex::new(renderer))), } } diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index e2c0bd89f19..438f63ec753 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -30,13 +30,11 @@ #![allow(unsafe_code)] -use canvas_traits::CanvasMsg; use context::SharedLayoutContext; use data::{LayoutDataFlags, LayoutDataWrapper, PrivateLayoutData}; use gfx::display_list::OpaqueNode; use gfx::text::glyph::CharIndex; use incremental::RestyleDamage; -use ipc_channel::ipc::IpcSender; use msg::constellation_msg::PipelineId; use opaque_node::OpaqueNodeMethods; use script::dom::attr::AttrValue; @@ -47,7 +45,7 @@ use script::dom::bindings::js::LayoutJS; use script::dom::characterdata::LayoutCharacterDataHelpers; use script::dom::element; use script::dom::element::{Element, LayoutElementHelpers, RawLayoutElementHelpers}; -use script::dom::htmlcanvaselement::LayoutHTMLCanvasElementHelpers; +use script::dom::htmlcanvaselement::{LayoutHTMLCanvasElementHelpers, HTMLCanvasData}; use script::dom::htmliframeelement::HTMLIFrameElement; use script::dom::htmlimageelement::LayoutHTMLImageElementHelpers; use script::dom::htmlinputelement::{HTMLInputElement, LayoutHTMLInputElementHelpers}; @@ -945,31 +943,10 @@ impl<'ln> ThreadSafeLayoutNode<'ln> { } } - pub fn canvas_renderer_id(&self) -> Option<usize> { + pub fn canvas_data(&self) -> Option<HTMLCanvasData> { unsafe { let canvas_element = self.get_jsmanaged().downcast(); - canvas_element.and_then(|elem| elem.get_renderer_id()) - } - } - - pub fn canvas_ipc_renderer(&self) -> Option<IpcSender<CanvasMsg>> { - unsafe { - let canvas_element = self.get_jsmanaged().downcast(); - canvas_element.and_then(|elem| elem.get_ipc_renderer()) - } - } - - pub fn canvas_width(&self) -> u32 { - unsafe { - let canvas_element = self.get_jsmanaged().downcast(); - canvas_element.unwrap().get_canvas_width() - } - } - - pub fn canvas_height(&self) -> u32 { - unsafe { - let canvas_element = self.get_jsmanaged().downcast(); - canvas_element.unwrap().get_canvas_height() + canvas_element.map(|canvas| canvas.data()) } } |