midnight_blurple/
midnight_blurple.rs1use 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}