summaryrefslogtreecommitdiffstats
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
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 '')
-rw-r--r--tiny_skia/Cargo.toml4
-rw-r--r--tiny_skia/src/backend.rs10
-rw-r--r--tiny_skia/src/raster.rs6
-rw-r--r--tiny_skia/src/text.rs35
-rw-r--r--tiny_skia/src/vector.rs48
-rw-r--r--wgpu/Cargo.toml2
-rw-r--r--wgpu/src/image/vector.rs31
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();