#[derive(Debug, Clone, Copy)]
pub struct FragmentNode {
pub node: ItemFragment,
pub placement: Placement,
}
impl FragmentNode {
pub fn new(item: ItemFragment) -> Self {
FragmentNode {
node: item,
placement: Placement::default(),
}
}
}
impl From<ItemFragment> for FragmentNode {
fn from(value: ItemFragment) -> Self {
Self::new(value)
}
}
#[derive(Debug, Clone, Copy)]
pub enum ItemFragment {
Fragment(Fragment),
LineBreak,
}
impl ItemFragment {
pub fn width(&self) -> f32 {
match self {
ItemFragment::Fragment(frag) => frag.width,
ItemFragment::LineBreak => 0.0,
}
}
pub fn height(&self) -> f32 {
match self {
ItemFragment::Fragment(frag) => frag.height,
ItemFragment::LineBreak => 0.0,
}
}
pub fn is_line_break(&self) -> bool {
matches!(self, ItemFragment::LineBreak)
}
}
#[derive(Debug, Clone, Copy)]
pub struct Fragment {
pub width: f32,
pub height: f32,
}
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct Placement {
pub offset: (f32, f32),
pub line_index: usize,
}