use crate::{geometry::Rect, id::Id};
#[derive(Debug, Clone, Copy)]
pub struct InputItem {
pub(crate) id: Id,
pub(crate) size: (u32, u32),
}
impl InputItem {
#[inline]
pub fn new(size: (u32, u32)) -> Self {
Self {
id: Id::new(),
size,
}
}
#[inline]
pub fn size(&self) -> (u32, u32) {
self.size
}
#[inline]
pub fn id(&self) -> Id {
self.id
}
pub(crate) fn area(&self) -> u32 {
self.size.0 * self.size.1
}
}
#[derive(Debug, Clone, Copy)]
pub struct OutputItem {
pub(crate) id: Id,
pub(crate) rect: Rect,
}
impl OutputItem {
#[inline]
pub fn id(&self) -> Id {
self.id
}
#[inline]
pub fn position(&self) -> (u32, u32) {
self.rect.pos
}
#[inline]
pub fn size(&self) -> (u32, u32) {
self.rect.size
}
#[inline]
pub fn min(&self) -> (u32, u32) {
self.rect.pos
}
#[inline]
pub fn max(&self) -> (u32, u32) {
self.rect.max()
}
}
#[derive(Debug, Clone)]
pub struct PackOutput {
pub(crate) buckets: Vec<Bucket>,
}
impl PackOutput {
#[inline]
pub fn buckets(&self) -> &[Bucket] {
&self.buckets
}
}
#[derive(Debug, Clone)]
pub struct Bucket {
pub(crate) size: (u32, u32),
pub(crate) items: Vec<OutputItem>,
}
impl Bucket {
#[inline]
pub fn size(&self) -> (u32, u32) {
self.size
}
#[inline]
pub fn items(&self) -> &[OutputItem] {
&self.items
}
}