bouncinamation/src/ui.rs

58 lines
1.9 KiB
Rust

use tui::{
backend::Backend,
layout::{Constraint, Direction, Layout, Rect},
style::Style,
widgets::{Block, Clear, Paragraph},
Frame,
};
use crate::app::App;
pub fn animation(coordinates: (u16, u16), r: Rect) -> Rect {
let popup_layout = Layout::default()
.direction(Direction::Vertical)
.constraints(
[
Constraint::Length(coordinates.1),
Constraint::Length(9),
Constraint::Min(1),
]
.as_ref(),
)
.split(r);
Layout::default()
.direction(Direction::Horizontal)
.constraints(
[
Constraint::Length(coordinates.0),
Constraint::Length(30),
Constraint::Min(1),
]
.as_ref(),
)
.split(popup_layout[1])[1]
}
pub fn render<B: Backend>(app: &mut App, frame: &mut Frame<'_, B>) {
let app_area = frame.size();
let logo = r#"
⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⡀
⠀⢠⣿⣿⡿⠀⠀⠈⢹⣿⣿⡿⣿⣿⣇⠀⣠⣿⣿⠟⣽⣿⣿⠇⠀⠀⢹⣿⣿⣿
⠀⢸⣿⣿⡇⠀⢀⣠⣾⣿⡿⠃⢹⣿⣿⣶⣿⡿⠋⢰⣿⣿⡿⠀⠀⣠⣼⣿⣿⠏
⠀⣿⣿⣿⣿⣿⣿⠿⠟⠋⠁⠀⠀⢿⣿⣿⠏⠀⠀⢸⣿⣿⣿⣿⣿⡿⠟⠋⠁⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣸⣟⣁⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⣠⣴⣶⣾⣿⣿⣻⡟⣻⣿⢻⣿⡟⣛⢻⣿⡟⣛⣿⡿⣛⣛⢻⣿⣿⣶⣦⣄⡀⠀
⠉⠛⠻⠿⠿⠿⠷⣼⣿⣿⣼⣿⣧⣭⣼⣿⣧⣭⣿⣿⣬⡭⠾⠿⠿⠿⠛⠉⠀
"#;
let block = Paragraph::new(logo)
.alignment(tui::layout::Alignment::Center)
.block(Block::default().style(Style::default()));
let area = animation(app.coordinates, app_area);
frame.render_widget(Clear, area);
frame.render_widget(block, area);
}