zombie_dreams/
zombie_dreams.rs

1use crossterm::event::{self, *};
2use std::io;
3use tui_gradient_block::{
4    handle_args, structs::border_symbols::SegmentSet,
5};
6use tui_rule::create_raw_spans;
7fn main() -> io::Result<()> {
8    let arg = handle_args!();
9    let style = SegmentSet::from_ratatui_set(arg);
10    let mut terminal = ratatui::init();
11    let app_result = run(&mut terminal, style);
12    ratatui::restore();
13    app_result
14}
15fn run(
16    terminal: &mut ratatui::DefaultTerminal,
17    set: SegmentSet,
18) -> io::Result<()> {
19    use ratatui::{text::Line, layout::{Constraint, Direction, Layout}};
20    use tui_gradient_block::{
21        gradient_block::GradientBlock,
22        theme_presets::cool::t_zombie_dreams,
23    };
24    let theme = t_zombie_dreams::full();
25    let blocks = vec![
26        GradientBlock::new()
27            .with_gradient(theme.double_corners_left)
28            .with_set(set.clone()),
29        GradientBlock::new().title_top(Line::from(tui_rule::generate_gradient_text!("Zombie Dreams", theme.right.top)).centered())
30            .with_gradient(theme.misc1)
31            .with_set(set.clone()),
32        GradientBlock::new()
33            .with_gradient(theme.double_corners_right)
34            .with_set(set.clone()),
35    ];
36
37    loop {
38        terminal.draw(|f| {
39            let base = Layout::new(
40                Direction::Horizontal,
41                [
42                    Constraint::Percentage(33),
43                    Constraint::Percentage(33),
44                    Constraint::Percentage(34),
45                ],
46            )
47            .vertical_margin(1)
48            .horizontal_margin(1)
49            .spacing(3)
50            .split(f.area());
51            for (block, area) in blocks.iter().zip(base.iter()) {
52                f.render_widget(block, *area);
53            }
54        })?;
55        let event = event::read()?;
56
57        if let Event::Key(key_event) = event {
58            if key_event.kind == KeyEventKind::Press {
59                if let KeyCode::Char('q') = key_event.code {
60                    break Ok(());
61                }
62            }
63        }
64    }
65}