feat: render fixed time
This commit is contained in:
48
src/main.rs
48
src/main.rs
@@ -12,6 +12,8 @@ use crossterm::{
|
|||||||
terminal::{self, ClearType},
|
terminal::{self, ClearType},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mod symbols;
|
||||||
|
|
||||||
fn main() -> io::Result<()> {
|
fn main() -> io::Result<()> {
|
||||||
let mut stdout = io::stdout();
|
let mut stdout = io::stdout();
|
||||||
|
|
||||||
@@ -61,17 +63,47 @@ fn main() -> io::Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn render_frame() -> io::Result<()> {
|
fn render_frame() -> io::Result<()> {
|
||||||
let mut stdout = io::stdout();
|
|
||||||
let (width, height) = terminal::size()?;
|
let (width, height) = terminal::size()?;
|
||||||
|
|
||||||
// Render red X at middle of screen
|
// Display centered 16:20 in white
|
||||||
queue!(
|
let text_width = 6 + 7 + 6 + 7 + 6;
|
||||||
stdout,
|
let text_height = 5;
|
||||||
cursor::MoveTo(width / 2, height / 2),
|
let color = Color::White;
|
||||||
style::SetForegroundColor(Color::Red)
|
|
||||||
)?;
|
|
||||||
|
|
||||||
write!(stdout, "X")?;
|
let x = width / 2 - text_width / 2;
|
||||||
|
let y = height / 2 - text_height / 2;
|
||||||
|
|
||||||
|
draw_symbol('1', x - 0 + 0 * 7, y, color)?;
|
||||||
|
draw_symbol('6', x - 0 + 1 * 7, y, color)?;
|
||||||
|
draw_symbol(':', x - 1 + 2 * 7, y, color)?;
|
||||||
|
draw_symbol('2', x - 2 + 3 * 7, y, color)?;
|
||||||
|
draw_symbol('0', x - 2 + 4 * 7, y, color)?;
|
||||||
|
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn draw_symbol(symbol: char, x: u16, y: u16, color: Color) -> io::Result<()> {
|
||||||
|
let mut stdout = io::stdout();
|
||||||
|
|
||||||
|
let data = symbols::symbol_to_render_data(symbol);
|
||||||
|
|
||||||
|
for oy in 0..data.len() {
|
||||||
|
for ox in 0..data[oy].len() {
|
||||||
|
if data[oy][ox] {
|
||||||
|
let cx = ox as u16;
|
||||||
|
let cy = oy as u16;
|
||||||
|
|
||||||
|
// Render cursor at position by setting background color and using space
|
||||||
|
queue!(
|
||||||
|
stdout,
|
||||||
|
cursor::MoveTo(x + cx, y + cy),
|
||||||
|
style::SetBackgroundColor(color)
|
||||||
|
)?;
|
||||||
|
write!(stdout, " ")?;
|
||||||
|
queue!(stdout, style::ResetColor)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|||||||
160
src/symbols.rs
Normal file
160
src/symbols.rs
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
pub fn symbol_to_render_data(ch: char) -> [[bool; 6]; 5] {
|
||||||
|
match ch {
|
||||||
|
'1' => ONE,
|
||||||
|
'2' => TWO,
|
||||||
|
'3' => THREE,
|
||||||
|
'4' => FOUR,
|
||||||
|
'5' => FIVE,
|
||||||
|
'6' => SIX,
|
||||||
|
'7' => SEVEN,
|
||||||
|
'8' => EIGHT,
|
||||||
|
'9' => NINE,
|
||||||
|
'0' => ZERO,
|
||||||
|
':' => DIV,
|
||||||
|
'-' => DASH,
|
||||||
|
' ' => SPACE,
|
||||||
|
'A' => A,
|
||||||
|
'P' => P,
|
||||||
|
'M' => M,
|
||||||
|
_ => ERR,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const O: bool = false;
|
||||||
|
const X: bool = true;
|
||||||
|
|
||||||
|
const ONE: [[bool; 6]; 5] = [
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const TWO: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, O, O],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const THREE: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const FOUR: [[bool; 6]; 5] = [
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const FIVE: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, O, O],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const SIX: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, O, O],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const SEVEN: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const EIGHT: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const NINE: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[O, O, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const ZERO: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const DIV: [[bool; 6]; 5] = [
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, X, X, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, X, X, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
];
|
||||||
|
|
||||||
|
const DASH: [[bool; 6]; 5] = [
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, X, X, X, X, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
];
|
||||||
|
|
||||||
|
const ERR: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, O, O],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, O, O],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const SPACE: [[bool; 6]; 5] = [
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
[O, O, O, O, O, O],
|
||||||
|
];
|
||||||
|
|
||||||
|
const A: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
];
|
||||||
|
|
||||||
|
const P: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, X, X],
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, O, O, O],
|
||||||
|
[X, X, O, O, O, O],
|
||||||
|
];
|
||||||
|
|
||||||
|
const M: [[bool; 6]; 5] = [
|
||||||
|
[X, X, X, X, X, X],
|
||||||
|
[X, X, O, X, O, X],
|
||||||
|
[X, X, O, X, O, X],
|
||||||
|
[X, X, O, X, O, X],
|
||||||
|
[X, X, O, X, O, X],
|
||||||
|
];
|
||||||
Reference in New Issue
Block a user