modern_terminal/components/
color_palette.rs1pub 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}