diff options
-rw-r--r-- | components/layout/display_list/builder.rs | 24 | ||||
-rw-r--r-- | components/layout/fragment.rs | 11 | ||||
-rw-r--r-- | components/layout_2020/dom.rs | 3 | ||||
-rw-r--r-- | components/layout_2020/replaced.rs | 29 | ||||
-rw-r--r-- | components/script/dom/htmlcanvaselement.rs | 4 | ||||
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 2 | ||||
-rw-r--r-- | components/shared/script_layout/lib.rs | 4 |
7 files changed, 41 insertions, 36 deletions
diff --git a/components/layout/display_list/builder.rs b/components/layout/display_list/builder.rs index 0721c50ac87..c09169d25f4 100644 --- a/components/layout/display_list/builder.rs +++ b/components/layout/display_list/builder.rs @@ -1944,20 +1944,18 @@ impl Fragment { let image_key = match canvas_fragment_info.source { CanvasFragmentSource::WebGL(image_key) => image_key, CanvasFragmentSource::WebGPU(image_key) => image_key, - CanvasFragmentSource::Image(ref ipc_renderer) => match *ipc_renderer { - Some(ref ipc_renderer) => { - let ipc_renderer = ipc_renderer.lock().unwrap(); - let (sender, receiver) = ipc::channel().unwrap(); - ipc_renderer - .send(CanvasMsg::FromLayout( - FromLayoutMsg::SendData(sender), - canvas_fragment_info.canvas_id, - )) - .unwrap(); - receiver.recv().unwrap().image_key - }, - None => return, + CanvasFragmentSource::Image(ref ipc_renderer) => { + let ipc_renderer = ipc_renderer.lock().unwrap(); + let (sender, receiver) = ipc::channel().unwrap(); + ipc_renderer + .send(CanvasMsg::FromLayout( + FromLayoutMsg::SendData(sender), + canvas_fragment_info.canvas_id, + )) + .unwrap(); + receiver.recv().unwrap().image_key }, + CanvasFragmentSource::Empty => return, }; let base = create_base_display_item(state); diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index 444323154f1..1cb25cefc7a 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -353,8 +353,10 @@ impl InlineAbsoluteFragmentInfo { #[derive(Clone)] pub enum CanvasFragmentSource { WebGL(ImageKey), - Image(Option<Arc<Mutex<IpcSender<CanvasMsg>>>>), + Image(Arc<Mutex<IpcSender<CanvasMsg>>>), WebGPU(ImageKey), + /// Transparent black + Empty, } #[derive(Clone)] @@ -369,10 +371,11 @@ impl CanvasFragmentInfo { pub fn new(data: HTMLCanvasData) -> CanvasFragmentInfo { let source = match data.source { HTMLCanvasDataSource::WebGL(texture_id) => CanvasFragmentSource::WebGL(texture_id), - HTMLCanvasDataSource::Image(ipc_sender) => CanvasFragmentSource::Image( - ipc_sender.map(|renderer| Arc::new(Mutex::new(renderer))), - ), + HTMLCanvasDataSource::Image(ipc_sender) => { + CanvasFragmentSource::Image(Arc::new(Mutex::new(ipc_sender))) + }, HTMLCanvasDataSource::WebGPU(image_key) => CanvasFragmentSource::WebGPU(image_key), + HTMLCanvasDataSource::Empty => CanvasFragmentSource::Empty, }; CanvasFragmentInfo { diff --git a/components/layout_2020/dom.rs b/components/layout_2020/dom.rs index c602153cc60..205d2db5c2a 100644 --- a/components/layout_2020/dom.rs +++ b/components/layout_2020/dom.rs @@ -149,9 +149,10 @@ where 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)))) + CanvasSource::Image(Arc::new(Mutex::new(ipc_sender))) }, HTMLCanvasDataSource::WebGPU(image_key) => CanvasSource::WebGPU(image_key), + HTMLCanvasDataSource::Empty => CanvasSource::Empty, }; Some(( CanvasInfo { diff --git a/components/layout_2020/replaced.rs b/components/layout_2020/replaced.rs index 208fe6eb986..f0e4648a5a9 100644 --- a/components/layout_2020/replaced.rs +++ b/components/layout_2020/replaced.rs @@ -94,8 +94,10 @@ impl NaturalSizes { #[derive(Serialize)] pub(crate) enum CanvasSource { WebGL(ImageKey), - Image(Option<Arc<Mutex<IpcSender<CanvasMsg>>>>), + Image(Arc<Mutex<IpcSender<CanvasMsg>>>), WebGPU(ImageKey), + /// transparent black + Empty, } impl fmt::Debug for CanvasSource { @@ -107,6 +109,7 @@ impl fmt::Debug for CanvasSource { CanvasSource::WebGL(_) => "WebGL", CanvasSource::Image(_) => "Image", CanvasSource::WebGPU(_) => "WebGPU", + CanvasSource::Empty => "Empty", } ) } @@ -376,20 +379,18 @@ impl ReplacedContent { let image_key = match canvas_info.source { CanvasSource::WebGL(image_key) => image_key, CanvasSource::WebGPU(image_key) => image_key, - CanvasSource::Image(ref ipc_renderer) => match *ipc_renderer { - Some(ref ipc_renderer) => { - let ipc_renderer = ipc_renderer.lock().unwrap(); - let (sender, receiver) = ipc::channel().unwrap(); - ipc_renderer - .send(CanvasMsg::FromLayout( - FromLayoutMsg::SendData(sender), - canvas_info.canvas_id, - )) - .unwrap(); - receiver.recv().unwrap().image_key - }, - None => return vec![], + CanvasSource::Image(ref ipc_renderer) => { + let ipc_renderer = ipc_renderer.lock().unwrap(); + let (sender, receiver) = ipc::channel().unwrap(); + ipc_renderer + .send(CanvasMsg::FromLayout( + FromLayoutMsg::SendData(sender), + canvas_info.canvas_id, + )) + .unwrap(); + receiver.recv().unwrap().image_key }, + CanvasSource::Empty => return vec![], }; vec![Fragment::Image(ImageFragment { base: self.base_fragment_info.into(), diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index f58acb028ee..839c233cb1e 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -137,12 +137,12 @@ impl LayoutHTMLCanvasElementHelpers for LayoutDom<'_, HTMLCanvasElement> { let source = unsafe { match self.unsafe_get().context.borrow_for_layout().as_ref() { Some(CanvasContext::Context2d(context)) => { - HTMLCanvasDataSource::Image(Some(context.to_layout().get_ipc_renderer())) + HTMLCanvasDataSource::Image(context.to_layout().get_ipc_renderer()) }, Some(CanvasContext::WebGL(context)) => context.to_layout().canvas_data_source(), Some(CanvasContext::WebGL2(context)) => context.to_layout().canvas_data_source(), Some(CanvasContext::WebGPU(context)) => context.to_layout().canvas_data_source(), - None => HTMLCanvasDataSource::Image(None), + None => HTMLCanvasDataSource::Empty, } }; diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 19175cdeb5c..c2fafc4f596 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -665,7 +665,7 @@ impl WebGLRenderingContext { HTMLCanvasElementOrOffscreenCanvas::HTMLCanvasElement(ref canvas) => { document_from_node(&**canvas) }, - HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(ref canvas) => { + HTMLCanvasElementOrOffscreenCanvas::OffscreenCanvas(ref _canvas) => { // TODO: Support retrieving image pixels here for OffscreenCanvas return Ok(None); }, diff --git a/components/shared/script_layout/lib.rs b/components/shared/script_layout/lib.rs index 3969cc332fb..67f95327453 100644 --- a/components/shared/script_layout/lib.rs +++ b/components/shared/script_layout/lib.rs @@ -116,8 +116,10 @@ pub enum LayoutElementType { pub enum HTMLCanvasDataSource { WebGL(ImageKey), - Image(Option<IpcSender<CanvasMsg>>), + Image(IpcSender<CanvasMsg>), WebGPU(ImageKey), + /// transparent black + Empty, } pub struct HTMLCanvasData { |