Graphics/Color/
Palette.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use crate::LVGL;

#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Color_type {
    Red,
    Pink,
    Purple,
    Deep_purple,
    Indigo,
    Blue,
    Light_blue,
    Cyan,
    Teal,
    Green,
    Light_green,
    Lime,
    Yellow,
    Amber,
    Orange,
    Deep_orange,
    Brown,
    Blue_grey,
    Grey,
}

impl Color_type {
    fn Into_LVGL_palette_color(self) -> u32 {
        match self {
            Color_type::Red => LVGL::lv_palette_t_LV_PALETTE_RED,
            Color_type::Pink => LVGL::lv_palette_t_LV_PALETTE_PINK,
            Color_type::Purple => LVGL::lv_palette_t_LV_PALETTE_PURPLE,
            Color_type::Deep_purple => LVGL::lv_palette_t_LV_PALETTE_DEEP_PURPLE,
            Color_type::Indigo => LVGL::lv_palette_t_LV_PALETTE_INDIGO,
            Color_type::Blue => LVGL::lv_palette_t_LV_PALETTE_BLUE,
            Color_type::Light_blue => LVGL::lv_palette_t_LV_PALETTE_LIGHT_BLUE,
            Color_type::Cyan => LVGL::lv_palette_t_LV_PALETTE_CYAN,
            Color_type::Teal => LVGL::lv_palette_t_LV_PALETTE_TEAL,
            Color_type::Green => LVGL::lv_palette_t_LV_PALETTE_GREEN,
            Color_type::Light_green => LVGL::lv_palette_t_LV_PALETTE_LIGHT_GREEN,
            Color_type::Lime => LVGL::lv_palette_t_LV_PALETTE_LIME,
            Color_type::Yellow => LVGL::lv_palette_t_LV_PALETTE_YELLOW,
            Color_type::Amber => LVGL::lv_palette_t_LV_PALETTE_AMBER,
            Color_type::Orange => LVGL::lv_palette_t_LV_PALETTE_ORANGE,
            Color_type::Deep_orange => LVGL::lv_palette_t_LV_PALETTE_DEEP_ORANGE,
            Color_type::Brown => LVGL::lv_palette_t_LV_PALETTE_BROWN,
            Color_type::Blue_grey => LVGL::lv_palette_t_LV_PALETTE_BLUE_GREY,
            Color_type::Grey => LVGL::lv_palette_t_LV_PALETTE_GREY,
        }
    }
}

#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Level_type {
    Tone_50 = -5,
    Tone_100 = -4,
    Tone_200 = -3,
    Tone_300 = -2,
    Tone_400 = -1,
    Tone_500 = 0,
    Tone_600 = 1,
    Tone_700 = 2,
    Tone_800 = 3,
    Tone_900 = 4,
}

impl Level_type {
    pub const Main: Level_type = Level_type::Tone_500;
}

pub fn Get(Color: Color_type, Level: Level_type) -> super::Color_type {
    let Color = Color.Into_LVGL_palette_color();

    let Level = Level as i8;

    let Color = unsafe {
        match Level {
            -5..=-1 => LVGL::lv_palette_lighten(Color, -Level as u8),
            0 => LVGL::lv_palette_main(Color),
            1..=4 => LVGL::lv_palette_darken(Color, Level as u8),
            _ => unreachable!(),
        }
    };

    super::Color_type::From_LVGL_color(Color)
}