diff options
| author | 2023-12-11 10:48:07 +0100 | |
|---|---|---|
| committer | 2023-12-11 10:48:41 +0100 | |
| commit | 04e8e529a0e80499b129395664f1806de8102d01 (patch) | |
| tree | 2bf178b0df77d663ad56f5aa87c753a030bdd2af /wgpu/src | |
| parent | 33f92b1be78e2f09290e36f0c9b77af899609bd8 (diff) | |
| download | iced-04e8e529a0e80499b129395664f1806de8102d01.tar.gz iced-04e8e529a0e80499b129395664f1806de8102d01.tar.bz2 iced-04e8e529a0e80499b129395664f1806de8102d01.zip | |
Convert SVG text nodes for in-memory SVGs in `iced_wgpu`
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/image/vector.rs | 37 | 
1 files changed, 17 insertions, 20 deletions
| diff --git a/wgpu/src/image/vector.rs b/wgpu/src/image/vector.rs index f4819095..d9be50d7 100644 --- a/wgpu/src/image/vector.rs +++ b/wgpu/src/image/vector.rs @@ -50,27 +50,15 @@ impl Cache {              return self.svgs.get(&handle.id()).unwrap();          } -        let svg = match handle.data() { -            svg::Data::Path(path) => { -                let mut tree = -                    fs::read_to_string(path).ok().and_then(|contents| { -                        usvg::Tree::from_str( -                            &contents, -                            &usvg::Options::default(), -                        ) +        let mut svg = match handle.data() { +            svg::Data::Path(path) => fs::read_to_string(path) +                .ok() +                .and_then(|contents| { +                    usvg::Tree::from_str(&contents, &usvg::Options::default())                          .ok() -                    }); -                // If there are text nodes in the tree load fonts and convert the text to paths -                if let Some(svg_tree) = &mut tree { -                    if svg_tree.has_text_nodes() { -                        let mut font_system = text::font_system() -                            .write() -                            .expect("Read font system"); -                        svg_tree.convert_text(font_system.raw().db_mut()); -                    } -                } -                tree.map(Svg::Loaded).unwrap_or(Svg::NotFound) -            } +                }) +                .map(Svg::Loaded) +                .unwrap_or(Svg::NotFound),              svg::Data::Bytes(bytes) => {                  match usvg::Tree::from_data(bytes, &usvg::Options::default()) {                      Ok(tree) => Svg::Loaded(tree), @@ -79,6 +67,15 @@ impl Cache {              }          }; +        if let Svg::Loaded(svg) = &mut svg { +            if svg.has_text_nodes() { +                let mut font_system = +                    text::font_system().write().expect("Write font system"); + +                svg.convert_text(font_system.raw().db_mut()); +            } +        } +          let _ = self.svgs.insert(handle.id(), svg);          self.svgs.get(&handle.id()).unwrap()      } | 
