From 9488b1b850152eb564dbfefc898c962bdac73eb4 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 20 Jul 2021 20:21:56 +0200 Subject: Main context struct --- src/image.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/image.rs') 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, images: HashMap, - /// Callback for loaded images. on_load: Option>, } impl ImageCache { /// Create a new, empty image cache. - pub fn new() -> Self { - Self::default() + pub fn new(loader: Rc) -> 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 { + pub fn load(&mut self, file: FileId) -> Option { 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); -- cgit v1.2.3