use sdl3::{
pixels::Color,
render::{Canvas, FPoint, FRect},
video::Window,
};
pub fn simple_ui_button(
rect: &FRect,
color: Color,
canvas: &mut Canvas<Window>,
point: &FPoint,
pressed: bool,
scale: f32,
text: &str,
) -> bool {
let color_ = canvas.draw_color();
canvas.set_draw_color(color);
canvas.draw_rect(*rect).unwrap();
for (i, ch) in text.chars().collect::<Vec<char>>().iter().enumerate() {
draw_letter(canvas, rect.x + 7.0 + (i as f32 * 10.), rect.y + 10., *ch);
}
canvas.set_draw_color(color_);
let x0 = rect.x * scale;
let y0 = rect.y * scale;
let x1 = (rect.x + rect.w) * scale;
let y1 = (rect.y + rect.h) * scale;
pressed && x0 <= point.x && point.x <= x1 && y0 <= point.y && point.y <= y1
}
fn draw_letter(canvas: &mut Canvas<Window>, x: f32, y: f32, ch: char) {
match ch {
'A' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 0., y + 10.),
FPoint::new(x + 0., y + 5.),
FPoint::new(x + 2.5, y + 0.),
FPoint::new(x + 5., y + 5.),
FPoint::new(x + 5., y + 10.),
FPoint::new(x + 5., y + 5.),
FPoint::new(x + 0., y + 5.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'D' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 0., y + 10.),
FPoint::new(x + 2.5, y + 10.),
FPoint::new(x + 5., y + 5.),
FPoint::new(x + 2.5, y + 0.),
FPoint::new(x + 0., y + 0.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'E' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 5., y + 0.),
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 0., y + 5.),
FPoint::new(x + 5., y + 5.),
FPoint::new(x + 0., y + 5.),
FPoint::new(x + 0., y + 10.),
FPoint::new(x + 5., y + 10.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'L' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 0., y + 10.),
FPoint::new(x + 5., y + 10.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'O' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 0., y + 10.),
FPoint::new(x + 5., y + 10.),
FPoint::new(x + 5., y + 0.),
FPoint::new(x + 0., y + 0.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'R' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 0., y + 10.),
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 5., y + 0.),
FPoint::new(x + 5., y + 5.),
FPoint::new(x + 0., y + 5.),
FPoint::new(x + 5., y + 10.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'S' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 5., y + 0.),
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 0., y + 5.),
FPoint::new(x + 5., y + 5.),
FPoint::new(x + 5., y + 10.),
FPoint::new(x + 0., y + 10.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'T' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 2.5, y + 0.),
FPoint::new(x + 2.5, y + 10.),
FPoint::new(x + 2.5, y + 0.),
FPoint::new(x + 5., y + 0.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
'V' => {
let v: Vec<FPoint> = vec![
FPoint::new(x + 0., y + 0.),
FPoint::new(x + 2.5, y + 10.),
FPoint::new(x + 5., y + 0.),
];
canvas.draw_lines(v.as_slice()).unwrap();
}
_ => {}
}
}