use crate::Assets;
use crate::resources;
use crate::Context;
use std::collections::HashMap;
#[derive(Clone, Debug)]
pub struct BrandResources {
pub wordmark: resources::Image,
pub logo: resources::Image,
pub app_icon: resources::Image,
pub error: resources::Image,
pub illustrations: Illustrations,
}
impl BrandResources {
pub const QUALITY: f32 = 8.0;
pub fn new(
logo: resources::Image,
wordmark: resources::Image,
app_icon: resources::Image,
error: resources::Image,
illustrations: Illustrations
) -> Self {
BrandResources { logo, wordmark, app_icon, error, illustrations }
}
pub fn default(assets: &mut Assets) -> Self {
BrandResources {
logo: assets.add_svg(&assets.load_file("brand/logo.svg").unwrap(), Self::QUALITY),
wordmark: assets.add_svg(&assets.load_file("brand/wordmark.svg").unwrap(), Self::QUALITY),
app_icon: assets.add_svg(&assets.load_file("brand/app_icon.svg").unwrap(), Self::QUALITY),
error: assets.add_svg(&assets.load_file("brand/error.svg").unwrap(), Self::QUALITY),
illustrations: Illustrations::default(),
}
}
}
#[derive(Clone, Debug)]
pub struct Illustrations(pub HashMap<String, resources::Image>);
impl Illustrations {
pub const QUALITY: f32 = 8.0;
pub fn get(&self, name: &str) -> Option<resources::Image> {
self.0.get(name).cloned()
}
pub fn remove(&mut self, name: &str) {
self.0.remove(name);
}
pub fn insert(&mut self, ctx: &mut Context, name: &str, path: &str) {
let mut illustration: Option<resources::Image> = None;
if path.ends_with(".png") { illustration = Some(ctx.assets.add_image(image::load_from_memory(&ctx.assets.load_file(path).unwrap()).unwrap().into()))}
if path.ends_with(".svg") { illustration = Some(ctx.assets.add_svg(&ctx.assets.load_file(path).unwrap(), 2.0)) }
if let Some(i) = illustration {self.0.insert(name.to_string(), i);}
}
}
impl Default for Illustrations {
fn default() -> Self {
Illustrations(HashMap::new())
}
}