diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-07-20 20:21:56 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-07-21 11:28:29 +0200 |
| commit | 9488b1b850152eb564dbfefc898c962bdac73eb4 (patch) | |
| tree | 0a99487cddfee1a46b5802dc6b64c81b70e549da /src/image.rs | |
| parent | 8000783f95ee007d9dda6f1dcc1c42c8e607b122 (diff) | |
Main context struct
Diffstat (limited to 'src/image.rs')
| -rw-r--r-- | src/image.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/image.rs b/src/image.rs index 28283259..d0719ac7 100644 --- a/src/image.rs +++ b/src/image.rs @@ -3,6 +3,7 @@ use std::collections::{hash_map::Entry, HashMap}; use std::fmt::{self, Debug, Formatter}; use std::io::Cursor; +use std::rc::Rc; use image::io::Reader as ImageReader; use image::{DynamicImage, GenericImageView, ImageFormat}; @@ -53,25 +54,27 @@ impl Debug for Image { } /// Caches decoded images. -#[derive(Default)] pub struct ImageCache { - /// Maps from file hashes to ids of decoded images. + loader: Rc<dyn Loader>, images: HashMap<ImageId, Image>, - /// Callback for loaded images. on_load: Option<Box<dyn Fn(ImageId, &Image)>>, } impl ImageCache { /// Create a new, empty image cache. - pub fn new() -> Self { - Self::default() + pub fn new(loader: Rc<dyn Loader>) -> Self { + Self { + loader, + images: HashMap::new(), + on_load: None, + } } /// Load and decode an image file from a path. - pub fn load(&mut self, loader: &mut dyn Loader, file: FileId) -> Option<ImageId> { + pub fn load(&mut self, file: FileId) -> Option<ImageId> { let id = ImageId(file.into_raw()); if let Entry::Vacant(entry) = self.images.entry(id) { - let buffer = loader.load_file(file)?; + let buffer = self.loader.load_file(file)?; let image = Image::parse(&buffer)?; if let Some(callback) = &self.on_load { callback(id, &image); |
