#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum AtlasKind {
Mono,
Color,
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct Rect {
pub origin_px: [f32; 2],
pub size_px: [f32; 2],
pub color: [f32; 4],
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct GlyphDraw {
pub origin_px: [f32; 2],
pub size_px: [f32; 2],
pub atlas: AtlasKind,
pub src_min_px: [f32; 2],
pub src_max_px: [f32; 2],
pub color: [f32; 4],
}
impl GlyphDraw {
pub fn crop_src_x(&mut self, t0: f32, t1: f32) {
let (min, max) = crop(self.src_min_px[0], self.src_max_px[0], t0, t1);
self.src_min_px[0] = min;
self.src_max_px[0] = max;
}
pub fn crop_src_y(&mut self, t0: f32, t1: f32) {
let (min, max) = crop(self.src_min_px[1], self.src_max_px[1], t0, t1);
self.src_min_px[1] = min;
self.src_max_px[1] = max;
}
}
fn crop(min: f32, max: f32, t0: f32, t1: f32) -> (f32, f32) {
let span = max - min;
(span.mul_add(t0, min), span.mul_add(t1, min))
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum DecoKind {
Solid,
Dotted,
Dashed,
Curly,
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct Decoration {
pub origin_px: [f32; 2],
pub size_px: [f32; 2],
pub color: [f32; 4],
pub kind: DecoKind,
pub thickness_px: f32,
pub period_px: f32,
}
#[derive(Debug, Default, PartialEq)]
pub struct RowPaint {
pub rects: Vec<Rect>,
pub glyphs: Vec<GlyphDraw>,
pub decos: Vec<Decoration>,
}
impl RowPaint {
pub fn clear(&mut self) {
self.rects.clear();
self.glyphs.clear();
self.decos.clear();
}
}