use derive_builder::Builder;
use tessera_ui::{Color, ComputedData, Dp, Px, tessera};
use crate::pipelines::CheckmarkCommand;
#[derive(Builder, Clone)]
#[builder(pattern = "owned")]
pub struct CheckmarkArgs {
#[builder(default = "Color::new(0.0, 0.6, 0.0, 1.0)")]
pub color: Color,
#[builder(default = "5.0")]
pub stroke_width: f32,
#[builder(default = "1.0")]
pub progress: f32,
#[builder(default = "[2.0, 2.0]")]
pub padding: [f32; 2],
#[builder(default = "Dp(20.0)")]
pub size: Dp,
}
impl std::fmt::Debug for CheckmarkArgs {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("CheckmarkArgs")
.field("color", &self.color)
.field("stroke_width", &self.stroke_width)
.field("progress", &self.progress)
.field("padding", &self.padding)
.field("size", &self.size)
.finish()
}
}
impl Default for CheckmarkArgs {
fn default() -> Self {
CheckmarkArgsBuilder::default().build().unwrap()
}
}
#[tessera]
pub fn checkmark(args: impl Into<CheckmarkArgs>) {
let args: CheckmarkArgs = args.into();
let size_px = args.size.to_px();
let command = CheckmarkCommand {
color: args.color,
stroke_width: args.stroke_width,
progress: args.progress,
padding: args.padding,
};
measure(Box::new(move |input| {
input.metadata_mut().push_draw_command(command);
Ok(ComputedData {
width: Px::new(size_px.to_f32() as i32),
height: Px::new(size_px.to_f32() as i32),
})
}));
}