aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/dom_traversal.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2020-03-05 19:16:28 +0100
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2020-03-06 13:23:07 +0100
commitf0e30f5b0ccdf262d65507702935ae3dd4a698b5 (patch)
treef55ab1d78bbff880558946fe61113a2ed6d0468f /components/layout_2020/dom_traversal.rs
parent0bd794aed783260652313144ec3e74590db12b7b (diff)
downloadservo-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.rs24
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)
}