#![allow(dead_code)]
pub(crate) mod atlas;
mod cache;
pub mod colr_raster;
use std::sync::Arc;
pub use cache::ImageCache;
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub struct ImageId(u32);
impl ImageId {
fn new(index: u32, alpha: bool) -> Option<Self> {
if index & ID_INDEX_MASK != index {
return None;
}
let mut handle = index & ID_INDEX_MASK;
if alpha {
handle |= ID_ALPHA_BIT
}
Some(Self(handle))
}
pub fn empty() -> Self {
Self(0)
}
fn index(self) -> usize {
(self.0 & ID_INDEX_MASK) as usize
}
pub fn is_empty(self) -> bool {
self.0 == 0
}
}
#[derive(Copy, Clone)]
pub struct ImageLocation {
pub min: (f32, f32),
pub max: (f32, f32),
}
#[derive(Clone)]
pub struct AddImage<'a> {
pub width: u16,
pub height: u16,
pub has_alpha: bool,
pub data: ImageData<'a>,
pub content_type: ContentType,
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum ContentType {
Mask, Color, }
impl<'a> AddImage<'a> {
fn data(&'a self) -> Option<&'a [u8]> {
self.data.data()
}
}
#[derive(Clone)]
pub enum ImageData<'a> {
Borrowed(&'a [u8]),
#[allow(unused)]
Owned(Vec<u8>),
#[allow(unused)]
Shared(Arc<Vec<u8>>),
}
impl<'a> ImageData<'a> {
fn data(&'a self) -> Option<&'a [u8]> {
Some(match self {
Self::Borrowed(data) => data,
Self::Owned(data) => data,
Self::Shared(data) => data,
})
}
}
const ID_INDEX_MASK: u32 = 0x007FFFFF;
const ID_ALPHA_BIT: u32 = 0x00800000;