summaryrefslogtreecommitdiffstats
path: root/tiny_skia/src/vector.rs
diff options
context:
space:
mode:
authorLibravatar Alec Deason <alec@tinycountry.com>2023-06-10 13:18:42 -0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-07-12 08:59:07 +0200
commitaf386fd0a3de432337ee9cdaa4d3661e98bd4105 (patch)
treebffedaee67922de5f4825ad640643de5883acb19 /tiny_skia/src/vector.rs
parent9f2be29a286d435b3d1daa8025a74063c50713cb (diff)
downloadiced-af386fd0a3de432337ee9cdaa4d3661e98bd4105.tar.gz
iced-af386fd0a3de432337ee9cdaa4d3661e98bd4105.tar.bz2
iced-af386fd0a3de432337ee9cdaa4d3661e98bd4105.zip
Upgrade resvg to 0.34 and tiny_skia to 0.10
Diffstat (limited to 'tiny_skia/src/vector.rs')
-rw-r--r--tiny_skia/src/vector.rs48
1 files changed, 30 insertions, 18 deletions
diff --git a/tiny_skia/src/vector.rs b/tiny_skia/src/vector.rs
index a3f3c2e3..194fc52d 100644
--- a/tiny_skia/src/vector.rs
+++ b/tiny_skia/src/vector.rs
@@ -1,6 +1,7 @@
use crate::core::svg::{Data, Handle};
use crate::core::{Color, Rectangle, Size};
+use bytemuck::cast;
use resvg::usvg;
use rustc_hash::{FxHashMap, FxHashSet};
@@ -130,30 +131,41 @@ impl Cache {
let mut image = tiny_skia::Pixmap::new(size.width, size.height)?;
- resvg::render(
- tree,
- if size.width > size.height {
- resvg::FitTo::Width(size.width)
- } else {
- resvg::FitTo::Height(size.height)
- },
- tiny_skia::Transform::default(),
- image.as_mut(),
- )?;
+ let tree_size = tree.size.to_int_size();
+ let target_size;
+ if size.width > size.height {
+ target_size = tree_size.scale_to_width(size.width);
+ } else {
+ target_size = tree_size.scale_to_height(size.height);
+ }
+ let transform;
+ if let Some(target_size) = target_size {
+ let tree_size = tree_size.to_size();
+ let target_size = target_size.to_size();
+ transform = tiny_skia::Transform::from_scale(
+ target_size.width() / tree_size.width(),
+ target_size.height() / tree_size.height(),
+ );
+ } else {
+ transform = tiny_skia::Transform::default();
+ }
+
+ resvg::Tree::from_usvg(tree).render(transform, &mut image.as_mut());
if let Some([r, g, b, _]) = key.color {
// Apply color filter
for pixel in
bytemuck::cast_slice_mut::<u8, u32>(image.data_mut())
{
- *pixel = tiny_skia::ColorU8::from_rgba(
- b,
- g,
- r,
- (*pixel >> 24) as u8,
- )
- .premultiply()
- .get();
+ *pixel = cast(
+ tiny_skia::ColorU8::from_rgba(
+ b,
+ g,
+ r,
+ (*pixel >> 24) as u8,
+ )
+ .premultiply(),
+ );
}
} else {
// Swap R and B channels for `softbuffer` presentation