use presentar_core::widget::Canvas;
use presentar_core::{Color, Constraints, Point, RecordingCanvas, Rect, Size};
fn main() {
println!("=== Presentar Core Widget Demo ===\n");
let origin = Point::new(0.0, 0.0);
let size = Size::new(200.0, 100.0);
let rect = Rect::new(origin.x, origin.y, size.width, size.height);
println!(
"Rect: ({}, {}) {}x{}",
rect.x, rect.y, rect.width, rect.height
);
let red = Color::RED;
let blue = Color::BLUE;
let custom = Color::from_hex("#6366f1").expect("valid hex color");
println!("Red: rgba({}, {}, {}, {})", red.r, red.g, red.b, red.a);
println!(
"Blue: rgba({}, {}, {}, {})",
blue.r, blue.g, blue.b, blue.a
);
println!(
"Custom: rgba({:.2}, {:.2}, {:.2}, {:.2})",
custom.r, custom.g, custom.b, custom.a
);
let white = Color::WHITE;
let black = Color::BLACK;
let contrast = white.contrast_ratio(&black);
println!("White/Black contrast ratio: {contrast:.1}:1 (WCAG AAA requires 7:1)");
let constraints = Constraints::new(0.0, 800.0, 0.0, 600.0);
let desired = Size::new(1000.0, 400.0);
let bounded = constraints.constrain(desired);
println!(
"\nConstrained {}x{} to {}x{}",
desired.width, desired.height, bounded.width, bounded.height
);
let mut canvas = RecordingCanvas::new();
canvas.fill_rect(rect, red);
canvas.draw_text(
"Hello, Presentar!",
Point::new(10.0, 30.0),
&presentar_core::widget::TextStyle {
size: 16.0,
color: white,
weight: presentar_core::widget::FontWeight::Bold,
..Default::default()
},
);
canvas.fill_circle(Point::new(100.0, 50.0), 20.0, blue);
println!(
"\nRecordingCanvas captured {} draw commands:",
canvas.command_count()
);
for (i, cmd) in canvas.commands().iter().enumerate() {
println!(" [{i}] {cmd:?}");
}
println!("\nDone.");
}