mirror of
https://github.com/spacedriveapp/spacedrive
synced 2024-07-02 10:03:28 +00:00
[ENG-1668] Update resvg
and related code (#2177)
deps: update `resvg` and related code
This commit is contained in:
parent
71272d5976
commit
6ed0d5edfb
|
@ -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
|
||||
|
|
|
@ -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<DynamicImage> {
|
||||
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(
|
||||
|
|
Loading…
Reference in a new issue