use super::canvas::Canvas;
pub fn draw(cp: u32, canvas: &mut Canvas) -> bool {
if !(0x2800..=0x28FF).contains(&cp) {
return false;
}
let width = canvas.width() as i32;
let height = canvas.height() as i32;
let mut w = (width / 4).min(height / 8);
let mut x_spacing = width / 4;
let mut y_spacing = height / 8;
let mut x_margin = x_spacing / 2;
let mut y_margin = y_spacing / 2;
let mut x_px_left = width - 2 * x_margin - x_spacing - 2 * w;
let mut y_px_left = height - 2 * y_margin - 3 * y_spacing - 4 * w;
if x_px_left >= 2 && y_px_left >= 4 && w == 0 {
w += 1;
x_px_left -= 2;
y_px_left -= 4;
}
if x_px_left >= 2 && x_margin == 0 {
x_margin = 1;
x_px_left -= 2;
}
if y_px_left >= 2 && y_margin == 0 {
y_margin = 1;
y_px_left -= 2;
}
if x_px_left >= 1 {
x_spacing += 1;
x_px_left -= 1;
}
if y_px_left >= 3 {
y_spacing += 1;
y_px_left -= 3;
}
if x_px_left >= 2 {
x_margin += 1;
x_px_left -= 2;
}
if y_px_left >= 2 {
y_margin += 1;
y_px_left -= 2;
}
if x_px_left >= 2 && y_px_left >= 4 {
w += 1;
}
let x = [x_margin, x_margin + w + x_spacing];
let y = [
y_margin,
y_margin + w + y_spacing,
y_margin + 2 * (w + y_spacing),
y_margin + 3 * (w + y_spacing),
];
let bits = (cp & 0xFF) as u8;
let dots = [
(0x01u8, 0usize, 0usize), (0x02, 0, 1), (0x04, 0, 2), (0x40, 0, 3), (0x08, 1, 0), (0x10, 1, 1), (0x20, 1, 2), (0x80, 1, 3), ];
for (mask, col, row) in dots {
if bits & mask != 0 {
let cx = x[col];
let cy = y[row];
canvas.rect(cx, cy, cx + w, cy + w, 0xFF);
}
}
true
}