modern_terminal/components/
color_palette.rs

1pub struct ColorPalette {}
2
3impl ColorPalette {
4    pub fn new() -> ColorPalette {
5        ColorPalette {}
6    }
7}
8
9impl crate::core::render::Render for ColorPalette {
10    fn render(
11        &self,
12        options: &crate::core::render::Options,
13    ) -> crate::core::segment::RenderedSegments {
14        let columns = match options.columns {
15            Some(columns) => columns,
16            None => crate::core::render::DEFAULT_COLUMNS,
17        };
18        let rows = match options.rows {
19            Some(rows) => rows,
20            None => crate::core::render::DEFAULT_ROWS,
21        };
22
23        let mut rendered_segments = Vec::new();
24        rendered_segments.reserve(rows);
25
26        for row in 0..(rows) {
27            let mut segment = crate::core::segment::Segment::new();
28            segment.portions.reserve(columns);
29
30            for column in 0..(columns) {
31                let col_r = (column as f64) / ((columns - 1) as f64);
32                let row_r = (row as f64) / ((rows - 1) as f64);
33
34                let (r, g, b) = crate::core::color::model::hsl_to_rgb(
35                    360.0 * col_r,
36                    1.0,
37                    0.1 + 0.7 * row_r,
38                );
39
40                segment.add_style(crate::core::style::Style::Background(
41                    format!("rgb({}, {}, {})", r, g, b),
42                ));
43                segment.add_text(" ");
44            }
45
46            rendered_segments.push(segment.render(
47                crate::core::segment::SegmentPadding::None,
48                options.storage,
49            ));
50        }
51
52        rendered_segments
53    }
54}