diff --git a/Cargo.lock b/Cargo.lock index 66a0310e..3141249b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -953,9 +953,9 @@ dependencies = [ [[package]] name = "data-url" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" [[package]] name = "dconf_rs" @@ -1416,15 +1416,16 @@ dependencies = [ [[package]] name = "fontdb" -version = "0.13.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237ff9f0813bbfc9de836016472e0c9ae7802f174a51594607e5f4ff334cb2f5" +checksum = "020e203f177c0fb250fb19455a252e838d2bbbce1f80f25ecc42402aafa8cd38" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.5.10", + "memmap2 0.8.0", "slotmap", - "ttf-parser 0.18.1", + "tinyvec", + "ttf-parser 0.19.2", ] [[package]] @@ -2061,9 +2062,9 @@ dependencies = [ [[package]] name = "imagesize" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b72ad49b554c1728b1e83254a1b1565aea4161e28dabbfa171fc15fe62299caf" +checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" [[package]] name = "indexmap" @@ -2125,7 +2126,7 @@ dependencies = [ "smart-debug", "syntect", "tempfile", - "tiny-skia 0.9.1", + "tiny-skia 0.11.2", "toml 0.7.8", "two-face", "usvg", @@ -2526,6 +2527,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" +dependencies = [ + "libc", +] + [[package]] name = "memmap2" version = "0.9.0" @@ -3566,9 +3576,9 @@ dependencies = [ [[package]] name = "resvg" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142e83d8ae8c8c639f304698a5567b229ba65caba867bf4387bbc0ae158827cf" +checksum = "cc7980f653f9a7db31acff916a262c3b78c562919263edea29bf41a056e20497" dependencies = [ "gif", "jpeg-decoder", @@ -3576,9 +3586,8 @@ dependencies = [ "pico-args", "png", "rgb", - "svgfilters", "svgtypes", - "tiny-skia 0.9.1", + "tiny-skia 0.11.2", "usvg", ] @@ -3597,19 +3606,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "rosvgtree" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad747e7384940e7bf33b15ba433b7bad9f44c0c6d5287a67c2cb22cd1743d497" -dependencies = [ - "log", - "roxmltree", - "simplecss", - "siphasher", - "svgtypes", -] - [[package]] name = "roxmltree" version = "0.18.1" @@ -3679,17 +3675,17 @@ dependencies = [ [[package]] name = "rustybuzz" -version = "0.7.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162bdf42e261bee271b3957691018634488084ef577dddeb6420a9684cab2a6a" +checksum = "71cd15fef9112a1f94ac64b58d1e4628192631ad6af4dc69997f995459c874e7" dependencies = [ "bitflags 1.3.2", "bytemuck", "smallvec", - "ttf-parser 0.18.1", + "ttf-parser 0.19.2", "unicode-bidi-mirroring", "unicode-ccc", - "unicode-general-category", + "unicode-properties", "unicode-script", ] @@ -4093,21 +4089,11 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "svgfilters" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "639abcebc15fdc2df179f37d6f5463d660c1c79cd552c12343a4600827a04bce" -dependencies = [ - "float-cmp", - "rgb", -] - [[package]] name = "svgtypes" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4b0611e7f3277f68c0fa18e385d9e2d26923691379690039548f867cef02a7" +checksum = "d71499ff2d42f59d26edb21369a308ede691421f79ebc0f001e2b1fd3a7c9e52" dependencies = [ "kurbo", "siphasher", @@ -4287,9 +4273,9 @@ dependencies = [ [[package]] name = "tiny-skia" -version = "0.9.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2986c82f77818c7b9144c70818fdde98db15308e329ae2f7204d767808fd3c" +checksum = "3b72a92a05db376db09fe6d50b7948d106011761c05a6a45e23e17ee9b556222" dependencies = [ "arrayref", "arrayvec", @@ -4297,7 +4283,7 @@ dependencies = [ "cfg-if", "log", "png", - "tiny-skia-path 0.9.0", + "tiny-skia-path 0.11.2", ] [[package]] @@ -4313,9 +4299,9 @@ dependencies = [ [[package]] name = "tiny-skia-path" -version = "0.9.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7acb0ccda1ac91084353a56d0b69b0e29c311fd809d2088b1ed2f9ae1841c47" +checksum = "6ac3865b9708fc7e1961a65c3a4fa55e984272f33092d3c859929f887fceb647" dependencies = [ "arrayref", "bytemuck", @@ -4480,9 +4466,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "ttf-parser" -version = "0.18.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0609f771ad9c6155384897e1df4d948e692667cc0588548b68eb44d052b27633" +checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" [[package]] name = "ttf-parser" @@ -4552,12 +4538,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" -[[package]] -name = "unicode-general-category" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" - [[package]] name = "unicode-ident" version = "1.0.12" @@ -4573,6 +4553,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f91c8b21fbbaa18853c3d0801c78f4fc94cdb976699bb03e832e75f7fd22f0" + [[package]] name = "unicode-script" version = "0.5.5" @@ -4617,9 +4603,9 @@ dependencies = [ [[package]] name = "usvg" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b44e14b7678bcc5947b397991432d0c4e02a103958a0ed5e1b9b961ddd08b21" +checksum = "c51daa774fe9ee5efcf7b4fec13019b8119cda764d9a8b5b06df02bb1445c656" dependencies = [ "base64 0.21.5", "log", @@ -4632,28 +4618,29 @@ dependencies = [ [[package]] name = "usvg-parser" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90c8251d965c2882a636ffcc054340b1f13a6bce68779cb5b2084d8ffc2535be" +checksum = "45c88a5ffaa338f0e978ecf3d4e00d8f9f493e29bed0752e1a808a1db16afc40" dependencies = [ "data-url", "flate2", "imagesize", "kurbo", "log", - "rosvgtree", - "strict-num", + "roxmltree", + "simplecss", + "siphasher", "svgtypes", "usvg-tree", ] [[package]] name = "usvg-text-layout" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c4fed019d1af07bfe0f3bac13d120d7b51bc65b38cb24809cf4ed0b8b631138" +checksum = "4d2374378cb7a3fb8f33894e0fdb8625e1bbc4f25312db8d91f862130b541593" dependencies = [ - "fontdb 0.13.1", + "fontdb 0.15.0", "kurbo", "log", "rustybuzz", @@ -4665,14 +4652,14 @@ dependencies = [ [[package]] name = "usvg-tree" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7371265c467cdae0ccc3655e2e3f310c695fb9f717c0d25187bf3b333f7b5159" +checksum = "6cacb0c5edeaf3e80e5afcf5b0d4004cc1d36318befc9a7c6606507e5d0f4062" dependencies = [ - "kurbo", "rctree", "strict-num", "svgtypes", + "tiny-skia-path 0.11.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index f5430764..ab58dc28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,9 +23,9 @@ html5ever = "0.26.0" image = "0.24.7" clap = { version = "4.3.24", features = ["cargo"] } copypasta = "0.10.0" -resvg = "0.32.0" -usvg = "0.32.0" -tiny-skia = "0.9.1" +resvg = "0.36" +usvg = "0.36" +tiny-skia = "0.11" anyhow = "1.0.75" dirs = "5.0.1" serde = { version = "1.0.193", features = ["derive"] } diff --git a/src/image/mod.rs b/src/image/mod.rs index 48adbc72..d436d934 100644 --- a/src/image/mod.rs +++ b/src/image/mod.rs @@ -208,25 +208,23 @@ impl Image { image } else { let opt = usvg::Options::default(); - let mut rtree = usvg::Tree::from_data(&image_data, &opt).unwrap(); let mut fontdb = usvg::fontdb::Database::new(); fontdb.load_system_fonts(); - rtree.convert_text(&fontdb); - let pixmap_size = rtree.size.to_screen_size(); - let mut pixmap = tiny_skia::Pixmap::new( - (pixmap_size.width() as f32 * hidpi_scale) as u32, - (pixmap_size.height() as f32 * hidpi_scale) as u32, - ) - .context("Couldn't create svg pixmap") - .unwrap(); - resvg::render( - &rtree, - resvg::FitTo::Zoom(hidpi_scale), - tiny_skia::Transform::default(), - pixmap.as_mut(), - ) - .context("Svg failed to render") - .unwrap(); + let mut tree = usvg::Tree::from_data(&image_data, &opt).unwrap(); + tree.size = tree.size.scale_to( + tiny_skia::Size::from_wh( + tree.size.width() * hidpi_scale, + tree.size.height() * hidpi_scale, + ) + .unwrap(), + ); + tree.convert_text(&fontdb); + let rtree = resvg::Tree::from_usvg(&tree); + let mut pixmap = + tiny_skia::Pixmap::new(rtree.size.width() as u32, rtree.size.height() as u32) + .context("Couldn't create svg pixmap") + .unwrap(); + rtree.render(tiny_skia::Transform::default(), &mut pixmap.as_mut()); ImageData::new( ImageBuffer::from_raw(pixmap.width(), pixmap.height(), pixmap.data().into()) .context("Svg buffer has invalid dimensions")