diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2020-03-05 19:16:28 +0100 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2020-03-06 13:23:07 +0100 |
commit | f0e30f5b0ccdf262d65507702935ae3dd4a698b5 (patch) | |
tree | f55ab1d78bbff880558946fe61113a2ed6d0468f /components/layout_2020/dom_traversal.rs | |
parent | 0bd794aed783260652313144ec3e74590db12b7b (diff) | |
download | servo-f0e30f5b0ccdf262d65507702935ae3dd4a698b5.tar.gz servo-f0e30f5b0ccdf262d65507702935ae3dd4a698b5.zip |
Canvas rendering for layout 2020
Update test expectations with layout 2020 canvas support
Diffstat (limited to 'components/layout_2020/dom_traversal.rs')
-rw-r--r-- | components/layout_2020/dom_traversal.rs | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/components/layout_2020/dom_traversal.rs b/components/layout_2020/dom_traversal.rs index e67f06eb7f9..1a3a969919c 100644 --- a/components/layout_2020/dom_traversal.rs +++ b/components/layout_2020/dom_traversal.rs @@ -5,7 +5,7 @@ use crate::context::LayoutContext; use crate::element_data::{LayoutBox, LayoutDataForElement}; use crate::geom::PhysicalSize; -use crate::replaced::ReplacedContent; +use crate::replaced::{CanvasInfo, CanvasSource, ReplacedContent}; use crate::style_ext::{Display, DisplayGeneratingBox, DisplayInside, DisplayOutside}; use crate::wrapper::GetRawData; use atomic_refcell::{AtomicRefCell, AtomicRefMut}; @@ -14,9 +14,10 @@ use net_traits::image::base::Image as NetImage; use script_layout_interface::wrapper_traits::{ LayoutNode, ThreadSafeLayoutElement, ThreadSafeLayoutNode, }; +use script_layout_interface::HTMLCanvasDataSource; use servo_arc::Arc as ServoArc; use std::marker::PhantomData as marker; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use style::dom::{OpaqueNode, TNode}; use style::properties::ComputedValues; use style::selector_parser::PseudoElement; @@ -354,6 +355,7 @@ pub(crate) trait NodeExt<'dom>: 'dom + Copy + LayoutNode + Send + Sync { /// Returns the image if it’s loaded, and its size in image pixels /// adjusted for `image_density`. fn as_image(self) -> Option<(Option<Arc<NetImage>>, PhysicalSize<f64>)>; + fn as_canvas(self) -> Option<(CanvasInfo, PhysicalSize<f64>)>; fn first_child(self) -> Option<Self>; fn next_sibling(self) -> Option<Self>; fn parent_node(self) -> Option<Self>; @@ -399,6 +401,24 @@ where Some((resource, PhysicalSize::new(width, height))) } + fn as_canvas(self) -> Option<(CanvasInfo, PhysicalSize<f64>)> { + let node = self.to_threadsafe(); + let canvas_data = node.canvas_data()?; + let source = match canvas_data.source { + HTMLCanvasDataSource::WebGL(texture_id) => CanvasSource::WebGL(texture_id), + HTMLCanvasDataSource::Image(ipc_sender) => { + CanvasSource::Image(ipc_sender.map(|renderer| Arc::new(Mutex::new(renderer)))) + }, + }; + Some(( + CanvasInfo { + source, + canvas_id: canvas_data.canvas_id, + }, + PhysicalSize::new(canvas_data.width.into(), canvas_data.height.into()), + )) + } + fn first_child(self) -> Option<Self> { TNode::first_child(&self) } |