tui_gradient_block/
macros.rs

1#[macro_export]
2macro_rules! get_aligned_position {
3    ($area:expr, $alignment:expr, $text_len:expr, $padding_left:expr, $padding_right:expr) => {
4        match $alignment {
5            Some(prelude::Alignment::Left) => {
6                $area.left().saturating_sub($padding_left + 1)
7            }
8            Some(prelude::Alignment::Right) => ($area.right())
9                .saturating_sub($text_len + 1)
10                .saturating_sub($padding_right),
11            Some(prelude::Alignment::Center) => ($area.left() + $area.width / 2)
12                .saturating_sub($text_len / 2)
13                .saturating_sub($padding_right)
14                .saturating_add($padding_left),
15            None => $area.left().saturating_add($padding_left + 1),
16        }
17    };
18}
19#[macro_export]
20macro_rules! handle_fill {
21    ($fill:expr, $area:expr, $buf:expr) => {
22        Paragraph::new($fill)
23            .wrap(widgets::Wrap { trim: true })
24            .block(Block::default().borders(Borders::ALL))
25            .render($area, $buf);
26    };
27}
28#[macro_export]
29macro_rules! handle_args {
30    () => {{
31        use ratatui::symbols::border::{THICK, ROUNDED, DOUBLE, PLAIN};
32        let style: ratatui::symbols::border::Set;
33        let args: Vec<String> = std::env::args().collect();
34        if args.len() < 2 || args.len() > 2 {
35            eprintln!(
36                "Usage: cargo run --example <example_name> <parameter>"
37            );
38            eprintln!(
39                "Valid parameters are plain, double, thick, and rounded"
40            );
41            std::process::exit(1);
42        }
43
44        let parameter = &args[1];
45        match parameter.to_lowercase().as_str() {
46            "plain" => {
47                style = PLAIN;
48            }
49            "double" => {
50                style = DOUBLE;
51            }
52            "thick" => {
53                style = THICK;
54            }
55            "rounded" | "round" => {
56                style = ROUNDED;
57            }
58            _ => {
59                eprintln!(
60                    "Please enter a valid parameter. Valid parameters are plain, double, thick, and rounded"
61                );
62                std::process::exit(1);
63            }
64        }
65        style
66    }};
67}
68#[macro_export]
69macro_rules! to_ratatui_color {
70    ($c:expr) => {
71        ratatui::style::Color::Rgb(
72            ($c.r * 255.0) as u8,
73            ($c.g * 255.0) as u8,
74            ($c.b * 255.0) as u8,
75        )
76    };
77}
78#[macro_export]
79macro_rules! gen_titles {
80    ($color:expr) => {{
81        use $crate::{
82            structs::title::TitleSet, style::Style, text::Line,
83            to_ratatui_color as to_r_c,
84            widgets::block::Position as P,
85        };
86        let s = Style::new().fg(to_r_c!($color));
87        TitleSet {
88            double_corners_left: (
89                Line::from("Two Corners Left").centered().style(s),
90                P::Top,
91            ),
92            bottom_left: (
93                Line::from("Bottom Left").style(s).centered(),
94                P::Top,
95            ),
96            bottom_right: (
97                Line::from("Bottom Right").centered().style(s),
98                P::Top,
99            ),
100            top_left: (
101                Line::from("Top Left").centered().style(s),
102                P::Top,
103            ),
104            top_right: (
105                Line::from("Top Right").centered().style(s),
106                P::Top,
107            ),
108            horizontal: (
109                Line::from("Horizontal").centered().style(s),
110                P::Top,
111            ),
112            double_corners_right: (
113                Line::from("Two Corners Right")
114                    .centered()
115                    .style(s),
116                P::Top,
117            ),
118            vertical: (
119                Line::from("Vertical").centered().style(s),
120                P::Top,
121            ),
122            left: (Line::from("Left").centered().style(s), P::Top),
123            right: (Line::from("Right").centered().style(s), P::Top),
124            up: (Line::from("Up").centered().style(s), P::Top),
125            down: (Line::from("Down").centered().style(s), P::Top),
126            misc1: (Line::from("Misc 1").centered().style(s), P::Top),
127            misc2: (Line::from("Misc 2").centered().style(s), P::Top),
128        }
129    }};
130}
131
132#[macro_export]
133macro_rules! generate_theme_use {
134    () => {
135        pub use colorgrad::{Color, GradientBuilder};
136        pub use tui_rule::generate_gradient_text;
137        pub use $crate::{
138            gen_titles, gradient_block,
139            structs::{
140                gradient::{
141                    GradientTheme as GT, GradientVariation as GV,
142                },
143                title::TitleSet,
144            },
145            types::G,
146        };
147    };
148}
149#[macro_export]
150macro_rules! generate_from_json {
151    ($path:expr, $returntype:ty) => {{
152        let f = std::fs::File::open($path)?;
153        let gradient: $returntype =
154            serde_json::from_reader(std::io::BufReader::new(f))?;
155        Ok(gradient)
156    }};
157}
158#[macro_export]
159macro_rules! generate_to_json {
160    ($val:expr) => {
161        serde_json::to_string_pretty(&$val).unwrap()
162    };
163}