diff options
Diffstat (limited to 'tiny_skia')
-rw-r--r-- | tiny_skia/src/lib.rs | 25 | ||||
-rw-r--r-- | tiny_skia/src/window/compositor.rs | 9 |
2 files changed, 29 insertions, 5 deletions
diff --git a/tiny_skia/src/lib.rs b/tiny_skia/src/lib.rs index 758921d4..a42f1de4 100644 --- a/tiny_skia/src/lib.rs +++ b/tiny_skia/src/lib.rs @@ -29,7 +29,7 @@ pub use geometry::Geometry; use crate::core::renderer; use crate::core::{ - Background, Color, Font, Pixels, Point, Rectangle, Transformation, + Background, Color, Font, Pixels, Point, Rectangle, Size, Transformation, }; use crate::engine::Engine; use crate::graphics::compositor; @@ -405,3 +405,26 @@ impl core::svg::Renderer for Renderer { impl compositor::Default for Renderer { type Compositor = window::Compositor; } + +impl renderer::Headless for Renderer { + fn new(default_font: Font, default_text_size: Pixels) -> Self { + Self::new(default_font, default_text_size) + } + + fn screenshot( + &mut self, + size: Size<u32>, + scale_factor: f32, + background_color: Color, + ) -> Vec<u8> { + let viewport = + Viewport::with_physical_size(size, f64::from(scale_factor)); + + window::compositor::screenshot::<&str>( + self, + &viewport, + background_color, + &[], + ) + } +} diff --git a/tiny_skia/src/window/compositor.rs b/tiny_skia/src/window/compositor.rs index 153af6d5..6c144be0 100644 --- a/tiny_skia/src/window/compositor.rs +++ b/tiny_skia/src/window/compositor.rs @@ -121,12 +121,11 @@ impl crate::graphics::Compositor for Compositor { fn screenshot<T: AsRef<str>>( &mut self, renderer: &mut Self::Renderer, - surface: &mut Self::Surface, viewport: &Viewport, background_color: Color, overlay: &[T], ) -> Vec<u8> { - screenshot(renderer, surface, viewport, background_color, overlay) + screenshot(renderer, viewport, background_color, overlay) } } @@ -212,7 +211,6 @@ pub fn present<T: AsRef<str>>( pub fn screenshot<T: AsRef<str>>( renderer: &mut Renderer, - surface: &mut Surface, viewport: &Viewport, background_color: Color, overlay: &[T], @@ -222,6 +220,9 @@ pub fn screenshot<T: AsRef<str>>( let mut offscreen_buffer: Vec<u32> = vec![0; size.width as usize * size.height as usize]; + let mut clip_mask = tiny_skia::Mask::new(size.width, size.height) + .expect("Create clip mask"); + renderer.draw( &mut tiny_skia::PixmapMut::from_bytes( bytemuck::cast_slice_mut(&mut offscreen_buffer), @@ -229,7 +230,7 @@ pub fn screenshot<T: AsRef<str>>( size.height, ) .expect("Create offscreen pixel map"), - &mut surface.clip_mask, + &mut clip_mask, viewport, &[Rectangle::with_size(Size::new( size.width as f32, |