diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-12-12 10:35:42 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-12-12 10:35:42 +0100 |
| commit | 2271d67f8f5fe65882e74622ad01c075102725b1 (patch) | |
| tree | 8753166a1940ea75aed3371ccc4f463465b4e0f7 /src/image.rs | |
| parent | c38d55614af0226be8eb3f3e1500da8b7be2fec8 (diff) | |
Faster image rendering
Diffstat (limited to 'src/image.rs')
| -rw-r--r-- | src/image.rs | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/image.rs b/src/image.rs index 235b9ef6..038641a4 100644 --- a/src/image.rs +++ b/src/image.rs @@ -1,6 +1,7 @@ //! Image handling. use std::io; +use std::sync::Arc; use crate::diag::{format_xml_like_error, StrResult}; use crate::util::Buffer; @@ -50,8 +51,9 @@ impl Image { } /// Decode the image. - pub fn decode(&self) -> StrResult<DecodedImage> { - Ok(match self.format { + #[comemo::memoize] + pub fn decode(&self) -> StrResult<Arc<DecodedImage>> { + Ok(Arc::new(match self.format { ImageFormat::Vector(VectorFormat::Svg) => { let opts = usvg::Options::default(); let tree = usvg::Tree::from_data(&self.data, &opts.to_ref()) @@ -64,7 +66,7 @@ impl Image { let dynamic = reader.decode().map_err(format_image_error)?; DecodedImage::Raster(dynamic, format) } - }) + })) } } |
