print: Render SVG for correct size

Closes #140

Part-of: <https://gitlab.gnome.org/Incubator/loupe/-/merge_requests/165>
This commit is contained in:
Sophie Herold 2023-04-17 22:38:52 +02:00 • committed by Marge Bot
parent ae5ca76176
commit 587599f50b
4 changed files with 50 additions and 17 deletions

View file

@ -177,6 +177,26 @@ impl Svg {
Ok(())
}
pub fn render_print(
file: &gio::File,
width: i32,
height: i32,
) -> anyhow::Result<cairo::ImageSurface> {
let handle = rsvg::Loader::new().read_file(file, gio::Cancellable::NONE)?;
let renderer = rsvg::CairoRenderer::new(&handle);
let surface = cairo::ImageSurface::create(cairo::Format::ARgb32, width, height)?;
let context = cairo::Context::new(&surface)?;
renderer
.render_document(
&context,
&cairo::Rectangle::new(0., 0., width as f64, height as f64),
)
.context("Failed to render image")?;
drop(context);
Ok(surface)
}
}
pub fn svg_dimensions(renderer: &rsvg::CairoRenderer) -> (u32, u32) {

View file

@ -1,5 +1,5 @@
///! Decodes several image formats
mod formats;
pub mod formats;
pub mod tiling;
pub use formats::ImageDimensionDetails;