use super::types::PixelRect;
use crate::Color;
#[derive(Clone, Debug)]
pub(crate) enum UiCmd {
Clear { color: Color },
Rect {
rect: PixelRect,
color: Color,
clip: PixelRect,
corner_radius: f32,
},
RectOutline {
rect: PixelRect,
color: Color,
thickness: u32,
clip: PixelRect,
corner_radius: f32,
},
Line {
x0: f32,
y0: f32,
x1: f32,
y1: f32,
color: Color,
thickness: f32,
bounds: PixelRect,
},
BlitRgba {
src_idx: u32,
src_w: u32,
src_h: u32,
dst_x: i32,
dst_y: i32,
dst_w: u32,
dst_h: u32,
clip: PixelRect,
channel: u32,
},
PlotLine {
values_idx: u32,
count: u32,
rect: PixelRect,
clip: PixelRect,
x_min: f32,
x_max: f32,
y_min: f32,
y_max: f32,
color: Color,
fill: bool,
explicit_xy: bool,
antialias_samples: u32,
line_width: f32,
},
Glyphs {
glyph_idx: u32,
atlas_idx: u32,
count: u32,
clip: PixelRect,
atlas_w: u32,
atlas_h: u32,
},
}
#[derive(Default)]
pub(crate) struct UiCmdList {
pub(crate) cmds: Vec<UiCmd>,
}
impl UiCmdList {
pub(crate) fn clear_all(&mut self) {
self.cmds.clear();
}
pub(crate) fn push(&mut self, cmd: UiCmd) {
self.cmds.push(cmd);
}
}
#[inline]
pub(super) const fn div_ceil(n: u32, d: u32) -> u32 {
n.div_ceil(d)
}
#[inline]
pub(super) fn clip_words(clip: PixelRect) -> [i32; 4] {
[clip.x, clip.y, clip.w as i32, clip.h as i32]
}