summaryrefslogtreecommitdiff
path: root/src/image.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-12 10:35:42 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-12 10:35:42 +0100
commit2271d67f8f5fe65882e74622ad01c075102725b1 (patch)
tree8753166a1940ea75aed3371ccc4f463465b4e0f7 /src/image.rs
parentc38d55614af0226be8eb3f3e1500da8b7be2fec8 (diff)
Faster image rendering
Diffstat (limited to 'src/image.rs')
-rw-r--r--src/image.rs8
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)
}
- })
+ }))
}
}