midnight_blurple/
midnight_blurple.rs

1use crossterm::event::{self, *};
2use std::io;
3use tui_gradient_block::{
4    handle_args, structs::border_symbols::SegmentSet,
5};
6fn main() -> io::Result<()> {
7    let arg = handle_args!();
8    let style = SegmentSet::from_ratatui_set(arg);
9    let mut terminal = ratatui::init();
10    let app_result = run(&mut terminal, style);
11    ratatui::restore();
12    app_result
13}
14fn run(
15    terminal: &mut ratatui::DefaultTerminal,
16    set: SegmentSet,
17) -> io::Result<()> {
18    use ratatui::layout::{Constraint, Direction, Layout};
19    use tui_gradient_block::{
20        gradient_block::GradientBlock,
21        theme_presets::dark::t_midnight_blurple,
22    };
23    let titles = t_midnight_blurple::titles();
24    let theme = t_midnight_blurple::full();
25    let blocks_top = vec![
26        GradientBlock::new()
27            .title(titles.up.0, titles.up.1)
28            .with_gradient(theme.up)
29            .with_set(set.clone()),
30        GradientBlock::new()
31            .title(titles.down.0, titles.down.1)
32            .with_gradient(theme.down)
33            .with_set(set.clone()),
34        GradientBlock::new()
35            .title(titles.left.0, titles.left.1)
36            .with_gradient(theme.left)
37            .with_set(set.clone()),
38        GradientBlock::new()
39            .title(titles.right.0, titles.right.1)
40            .with_gradient(theme.right)
41            .with_set(set.clone()),
42        GradientBlock::new()
43            .title(titles.top_left.0, titles.top_left.1)
44            .with_gradient(theme.top_left)
45            .with_set(set.clone()),
46        GradientBlock::new()
47            .title(titles.top_right.0, titles.top_right.1)
48            .with_gradient(theme.top_right)
49            .with_set(set.clone()),
50        GradientBlock::new()
51            .title(titles.bottom_left.0, titles.bottom_left.1)
52            .with_gradient(theme.bottom_left)
53            .with_set(set.clone()),
54    ];
55    let blocks_bottom = vec![
56        GradientBlock::new()
57            .title(titles.bottom_right.0, titles.bottom_right.1)
58            .with_gradient(theme.bottom_right)
59            .with_set(set.clone()),
60        GradientBlock::new()
61            .title(
62                titles.double_corners_left.0,
63                titles.double_corners_left.1,
64            )
65            .with_gradient(theme.double_corners_left)
66            .with_set(set.clone()),
67        GradientBlock::new()
68            .title(
69                titles.double_corners_right.0,
70                titles.double_corners_right.1,
71            )
72            .with_gradient(theme.double_corners_right)
73            .with_set(set.clone()),
74        GradientBlock::new()
75            .title(titles.vertical.0, titles.vertical.1)
76            .with_gradient(theme.vertical)
77            .with_set(set.clone()),
78        GradientBlock::new()
79            .title(titles.horizontal.0, titles.horizontal.1)
80            .with_gradient(theme.horizontal)
81            .with_set(set.clone()),
82        GradientBlock::new()
83            .title(titles.misc1.0, titles.misc1.1)
84            .with_gradient(theme.misc1)
85            .with_set(set.clone()),
86        GradientBlock::new()
87            .title(titles.misc2.0, titles.misc2.1)
88            .with_gradient(theme.misc2)
89            .with_set(set.clone()),
90    ];
91
92    loop {
93        terminal.draw(|f| {
94            let base = Layout::new(
95                Direction::Vertical,
96                [
97                    Constraint::Percentage(50),
98                    Constraint::Percentage(50),
99                ],
100            )
101            .split(f.area());
102            let top = Layout::new(
103                Direction::Horizontal,
104                [
105                    Constraint::Percentage(14),
106                    Constraint::Percentage(14),
107                    Constraint::Percentage(14),
108                    Constraint::Percentage(14),
109                    Constraint::Percentage(14),
110                    Constraint::Percentage(15),
111                    Constraint::Percentage(15),
112                ],
113            )
114            .split(base[0]);
115            let bottom = Layout::new(
116                Direction::Horizontal,
117                [
118                    Constraint::Percentage(14),
119                    Constraint::Percentage(14),
120                    Constraint::Percentage(14),
121                    Constraint::Percentage(14),
122                    Constraint::Percentage(14),
123                    Constraint::Percentage(15),
124                    Constraint::Percentage(15),
125                ],
126            )
127            .split(base[1]);
128            for (block, area) in blocks_top.iter().zip(top.iter()) {
129                f.render_widget(block, *area);
130            }
131            for (block, area) in
132                blocks_bottom.iter().zip(bottom.iter())
133            {
134                f.render_widget(block, *area);
135            }
136        })?;
137        let event = event::read()?;
138
139        if let Event::Key(key_event) = event {
140            if key_event.kind == KeyEventKind::Press {
141                if let KeyCode::Char('q') = key_event.code {
142                    break Ok(());
143                }
144            }
145        }
146    }
147}