summaryrefslogtreecommitdiff
path: root/src/image.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-07-20 20:21:56 +0200
committerLaurenz <laurmaedje@gmail.com>2021-07-21 11:28:29 +0200
commit9488b1b850152eb564dbfefc898c962bdac73eb4 (patch)
tree0a99487cddfee1a46b5802dc6b64c81b70e549da /src/image.rs
parent8000783f95ee007d9dda6f1dcc1c42c8e607b122 (diff)
Main context struct
Diffstat (limited to 'src/image.rs')
-rw-r--r--src/image.rs17
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);