From 6ed0d5edfb63a26459f8e04c8d6b9adae5595a10 Mon Sep 17 00:00:00 2001 From: jake <77554505+brxken128@users.noreply.github.com> Date: Thu, 7 Mar 2024 18:22:04 +0000 Subject: [PATCH] [ENG-1668] Update `resvg` and related code (#2177) deps: update `resvg` and related code --- crates/images/Cargo.toml | 4 ++-- crates/images/src/svg.rs | 25 +++++++++++-------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/crates/images/Cargo.toml b/crates/images/Cargo.toml index fb8612b2d..030cca381 100644 --- a/crates/images/Cargo.toml +++ b/crates/images/Cargo.toml @@ -15,7 +15,7 @@ heif = ["dep:libheif-rs", "dep:libheif-sys"] [dependencies] image = { workspace = true } once_cell = { workspace = true } -rspc = { workspace = true, optional = true } # error conversion +rspc = { workspace = true, optional = true } # error conversion specta = { workspace = true, optional = true } serde = { workspace = true, optional = true, features = ["derive"] } thiserror = { workspace = true } @@ -25,7 +25,7 @@ bincode = { version = "2.0.0-rc.3", features = [ "derive", "alloc", ], optional = true } -resvg = "0.36.0" +resvg = "0.40.0" # both of these added *default* bindgen features in 0.22.0 and 2.0.0 respectively # this broke builds as we build our own liibheif, so i disabled their default features diff --git a/crates/images/src/svg.rs b/crates/images/src/svg.rs index 1e6441497..108be6290 100644 --- a/crates/images/src/svg.rs +++ b/crates/images/src/svg.rs @@ -6,7 +6,7 @@ use resvg::{ tiny_skia::{self}, usvg, }; -use usvg::{fontdb, TreeParsing, TreeTextToPath}; +use usvg::fontdb; #[derive(PartialEq, Eq)] pub struct SvgHandler {} @@ -20,33 +20,30 @@ impl ImageHandler for SvgHandler { )] fn handle_image(&self, path: &Path) -> Result { let data = self.get_data(path)?; - let rtree = usvg::Tree::from_data(&data, &usvg::Options::default()).map(|mut tree| { - let mut fontdb = fontdb::Database::new(); - fontdb.load_system_fonts(); - tree.convert_text(&fontdb); - resvg::Tree::from_usvg(&tree) - })?; + let mut fontdb = fontdb::Database::new(); + fontdb.load_system_fonts(); + let rtree = usvg::Tree::from_data(&data, &usvg::Options::default(), &fontdb)?; let (scaled_w, scaled_h) = - scale_dimensions(rtree.size.width(), rtree.size.height(), SVG_TARGET_PX); + scale_dimensions(rtree.size().width(), rtree.size().height(), SVG_TARGET_PX); - let size = if rtree.size.width() > rtree.size.height() { - rtree.size.to_int_size().scale_to_width(scaled_w) + let size = if rtree.size().width() > rtree.size().height() { + rtree.size().to_int_size().scale_to_width(scaled_w) } else { - rtree.size.to_int_size().scale_to_height(scaled_h) + rtree.size().to_int_size().scale_to_height(scaled_h) } .ok_or(Error::InvalidLength)?; let transform = tiny_skia::Transform::from_scale( - size.width() as f32 / rtree.size.width(), - size.height() as f32 / rtree.size.height(), + size.width() as f32 / rtree.size().width(), + size.height() as f32 / rtree.size().height(), ); let Some(mut pixmap) = tiny_skia::Pixmap::new(size.width(), size.height()) else { return Err(Error::Pixbuf); }; - rtree.render(transform, &mut pixmap.as_mut()); + resvg::render(&rtree, transform, &mut pixmap.as_mut()); image::RgbaImage::from_raw(pixmap.width(), pixmap.height(), pixmap.data().into()) .map_or_else(