diff options
| author | 2023-06-10 13:18:42 -0700 | |
|---|---|---|
| committer | 2023-07-12 08:59:07 +0200 | |
| commit | af386fd0a3de432337ee9cdaa4d3661e98bd4105 (patch) | |
| tree | bffedaee67922de5f4825ad640643de5883acb19 | |
| parent | 9f2be29a286d435b3d1daa8025a74063c50713cb (diff) | |
| download | iced-af386fd0a3de432337ee9cdaa4d3661e98bd4105.tar.gz iced-af386fd0a3de432337ee9cdaa4d3661e98bd4105.tar.bz2 iced-af386fd0a3de432337ee9cdaa4d3661e98bd4105.zip | |
Upgrade resvg to 0.34 and tiny_skia to 0.10
Diffstat (limited to '')
| -rw-r--r-- | tiny_skia/Cargo.toml | 4 | ||||
| -rw-r--r-- | tiny_skia/src/backend.rs | 10 | ||||
| -rw-r--r-- | tiny_skia/src/raster.rs | 6 | ||||
| -rw-r--r-- | tiny_skia/src/text.rs | 35 | ||||
| -rw-r--r-- | tiny_skia/src/vector.rs | 48 | ||||
| -rw-r--r-- | wgpu/Cargo.toml | 2 | ||||
| -rw-r--r-- | wgpu/src/image/vector.rs | 31 | 
7 files changed, 85 insertions, 51 deletions
| diff --git a/tiny_skia/Cargo.toml b/tiny_skia/Cargo.toml index 431f324b..0de7e4c3 100644 --- a/tiny_skia/Cargo.toml +++ b/tiny_skia/Cargo.toml @@ -11,7 +11,7 @@ geometry = ["iced_graphics/geometry"]  [dependencies]  raw-window-handle = "0.5"  softbuffer = "0.2" -tiny-skia = "0.9" +tiny-skia = "0.10"  bytemuck = "1"  rustc-hash = "1.1"  kurbo = "0.9" @@ -34,5 +34,5 @@ version = "1.6.1"  features = ["std"]  [dependencies.resvg] -version = "0.32" +version = "0.34"  optional = true diff --git a/tiny_skia/src/backend.rs b/tiny_skia/src/backend.rs index e0134220..a8add70b 100644 --- a/tiny_skia/src/backend.rs +++ b/tiny_skia/src/backend.rs @@ -753,7 +753,15 @@ fn adjust_clip_mask(clip_mask: &mut tiny_skia::Mask, bounds: Rectangle) {      let path = {          let mut builder = tiny_skia::PathBuilder::new(); -        builder.push_rect(bounds.x, bounds.y, bounds.width, bounds.height); +        builder.push_rect( +            tiny_skia::Rect::from_xywh( +                bounds.x, +                bounds.y, +                bounds.width, +                bounds.height, +            ) +            .unwrap(), +        );          builder.finish().unwrap()      }; diff --git a/tiny_skia/src/raster.rs b/tiny_skia/src/raster.rs index 3887ec8d..74b21d4a 100644 --- a/tiny_skia/src/raster.rs +++ b/tiny_skia/src/raster.rs @@ -2,6 +2,7 @@ use crate::core::image as raster;  use crate::core::{Rectangle, Size};  use crate::graphics; +use bytemuck::cast;  use rustc_hash::{FxHashMap, FxHashSet};  use std::cell::RefCell;  use std::collections::hash_map; @@ -80,9 +81,8 @@ impl Cache {              for (i, pixel) in image.pixels().enumerate() {                  let [r, g, b, a] = pixel.0; -                buffer[i] = tiny_skia::ColorU8::from_rgba(b, g, r, a) -                    .premultiply() -                    .get(); +                buffer[i] = cast(tiny_skia::ColorU8::from_rgba(b, g, r, a) +                    .premultiply());              }              entry.insert(Some(Entry { diff --git a/tiny_skia/src/text.rs b/tiny_skia/src/text.rs index 8f494650..58f7d145 100644 --- a/tiny_skia/src/text.rs +++ b/tiny_skia/src/text.rs @@ -3,6 +3,7 @@ use crate::core::font::{self, Font};  use crate::core::text::{Hit, LineHeight, Shaping};  use crate::core::{Color, Pixels, Point, Rectangle, Size}; +use bytemuck::cast;  use rustc_hash::{FxHashMap, FxHashSet};  use std::borrow::Cow;  use std::cell::RefCell; @@ -288,14 +289,15 @@ impl GlyphCache {                      for _y in 0..image.placement.height {                          for _x in 0..image.placement.width { -                            buffer[i] = tiny_skia::ColorU8::from_rgba( -                                b, -                                g, -                                r, -                                image.data[i], -                            ) -                            .premultiply() -                            .get(); +                            buffer[i] = cast( +                                tiny_skia::ColorU8::from_rgba( +                                    b, +                                    g, +                                    r, +                                    image.data[i], +                                ) +                                .premultiply(), +                            );                              i += 1;                          } @@ -307,14 +309,15 @@ impl GlyphCache {                      for _y in 0..image.placement.height {                          for _x in 0..image.placement.width {                              // TODO: Blend alpha -                            buffer[i >> 2] = tiny_skia::ColorU8::from_rgba( -                                image.data[i + 2], -                                image.data[i + 1], -                                image.data[i], -                                image.data[i + 3], -                            ) -                            .premultiply() -                            .get(); +                            buffer[i >> 2] = cast( +                                tiny_skia::ColorU8::from_rgba( +                                    image.data[i + 2], +                                    image.data[i + 1], +                                    image.data[i], +                                    image.data[i + 3], +                                ) +                                .premultiply(), +                            );                              i += 4;                          } 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 diff --git a/wgpu/Cargo.toml b/wgpu/Cargo.toml index 15db5b5d..ecec7d02 100644 --- a/wgpu/Cargo.toml +++ b/wgpu/Cargo.toml @@ -55,7 +55,7 @@ version = "1.0"  optional = true  [dependencies.resvg] -version = "0.32" +version = "0.34"  optional = true  [dependencies.tracing] diff --git a/wgpu/src/image/vector.rs b/wgpu/src/image/vector.rs index 6b9be651..5bfc1836 100644 --- a/wgpu/src/image/vector.rs +++ b/wgpu/src/image/vector.rs @@ -114,16 +114,27 @@ impl Cache {                  // It would be cool to be able to smooth resize the `svg` example.                  let mut img = tiny_skia::Pixmap::new(width, height)?; -                resvg::render( -                    tree, -                    if width > height { -                        resvg::FitTo::Width(width) -                    } else { -                        resvg::FitTo::Height(height) -                    }, -                    tiny_skia::Transform::default(), -                    img.as_mut(), -                )?; +                let tree_size = tree.size.to_int_size(); +                let target_size; +                if width > height { +                    target_size = tree_size.scale_to_width(width); +                } else { +                    target_size = tree_size.scale_to_height(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 img.as_mut());                  let mut rgba = img.take(); | 
