acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

color.md (5595B)

      1 ```eval_rst
      2 .. include:: /header.rst
      3 :github_url: |github_link_base|/overview/color.md
      4 ```
      5 # Colors
      6 
      7 The color module handles all color-related functions like changing color depth, creating colors from hex code, converting between color depths, mixing colors, etc.
      8 
      9 The type `lv_color_t` is used to store a color. Its fields are set according to `LV_COLOR_DEPTH` in `lv_conf.h`. (See below)
     10 
     11 You may set `LV_COLOR_16_SWAP` in `lv_conf.h` to swap bytes of *RGB565* colors. You may need this when sending 16-bit colors via a byte-oriented interface like SPI. As 16-bit numbers are stored in little-endian format (lower byte at the lower address), the interface will send the lower byte first. However, displays usually need the higher byte first. A mismatch in the byte order will result in highly distorted colors.
     12 
     13 ## Creating colors
     14 
     15 ### RGB
     16 Create colors from Red, Green and Blue channel values:
     17 ```c
     18 //All channels are 0-255
     19 lv_color_t c = lv_color_make(red, green, blue);
     20 
     21 //From hex code 0x000000..0xFFFFFF interpreted as RED + GREEN + BLUE
     22 lv_color_t c = lv_color_hex(0x123456);
     23 
     24 //From 3 digits. Same as lv_color_hex(0x112233)
     25 lv_color_t c = lv_color_hex3(0x123);
     26 ```
     27 
     28 ### HSV
     29 Create colors from Hue, Saturation and Value values:
     30 
     31 ```c
     32 //h = 0..359, s = 0..100, v = 0..100
     33 lv_color_t c = lv_color_hsv_to_rgb(h, s, v);
     34 
     35 //All channels are 0-255
     36 lv_color_hsv_t c_hsv = lv_color_rgb_to_hsv(r, g, b);
     37 
     38 
     39 //From lv_color_t variable
     40 lv_color_hsv_t c_hsv = lv_color_to_hsv(color);
     41 ```
     42 
     43 ### Palette
     44 LVGL includes [Material Design's palette](https://vuetifyjs.com/en/styles/colors/#material-colors) of colors. In this system all named colors have a nominal main color as well as four darker and five lighter variants.
     45 
     46 The names of the colors are as follows:
     47 - `LV_PALETTE_RED`
     48 - `LV_PALETTE_PINK`
     49 - `LV_PALETTE_PURPLE`
     50 - `LV_PALETTE_DEEP_PURPLE`
     51 - `LV_PALETTE_INDIGO`
     52 - `LV_PALETTE_BLUE`
     53 - `LV_PALETTE_LIGHT_BLUE`
     54 - `LV_PALETTE_CYAN`
     55 - `LV_PALETTE_TEAL`
     56 - `LV_PALETTE_GREEN`
     57 - `LV_PALETTE_LIGHT_GREEN`
     58 - `LV_PALETTE_LIME`
     59 - `LV_PALETTE_YELLOW`
     60 - `LV_PALETTE_AMBER`
     61 - `LV_PALETTE_ORANGE`
     62 - `LV_PALETTE_DEEP_ORANGE`
     63 - `LV_PALETTE_BROWN`
     64 - `LV_PALETTE_BLUE_GREY`
     65 - `LV_PALETTE_GREY`
     66 
     67 
     68 To get the main color use `lv_color_t c = lv_palette_main(LV_PALETTE_...)`.
     69 
     70 For the lighter variants of a palette color use `lv_color_t c = lv_palette_lighten(LV_PALETTE_..., v)`. `v` can be 1..5.
     71 For the darker variants of a palette color use `lv_color_t c = lv_palette_darken(LV_PALETTE_..., v)`. `v` can be 1..4.
     72 
     73 ### Modify and mix colors
     74 The following functions can modify a color:
     75 ```c
     76 // Lighten a color. 0: no change, 255: white
     77 lv_color_t c = lv_color_lighten(c, lvl);
     78 
     79 // Darken a color. 0: no change, 255: black
     80 lv_color_t c = lv_color_darken(lv_color_t c, lv_opa_t lvl);
     81 
     82 // Lighten or darken a color. 0: black, 128: no change 255: white
     83 lv_color_t c = lv_color_change_lightness(lv_color_t c, lv_opa_t lvl);
     84 
     85 
     86 // Mix two colors with a given ratio 0: full c2, 255: full c1, 128: half c1 and half c2
     87 lv_color_t c = lv_color_mix(c1, c2, ratio);
     88 ```
     89 
     90 ### Built-in colors
     91 `lv_color_white()` and `lv_color_black()` return `0xFFFFFF` and `0x000000` respectively.
     92 
     93 ## Opacity
     94 To describe opacity the `lv_opa_t` type is created from `uint8_t`. Some special purpose defines are also introduced:
     95 
     96 - `LV_OPA_TRANSP` Value: 0, means no opacity making the color completely transparent
     97 - `LV_OPA_10` Value: 25, means the color covers only a little
     98 - `LV_OPA_20 ... OPA_80` follow logically
     99 - `LV_OPA_90` Value: 229, means the color near completely covers
    100 - `LV_OPA_COVER` Value: 255, means the color completely covers (full opacity)
    101 
    102 You can also use the `LV_OPA_*` defines in `lv_color_mix()` as a mixing *ratio*.
    103 
    104 
    105 ## Color types
    106 The following variable types are defined by the color module:
    107 
    108 - `lv_color1_t` Monochrome color. Also has R, G, B fields for compatibility but they are always the same value (1 byte)
    109 - `lv_color8_t` A structure to store R (3 bit),G (3 bit),B (2 bit) components for 8-bit colors (1 byte)
    110 - `lv_color16_t` A structure to store R (5 bit),G (6 bit),B (5 bit) components for 16-bit colors (2 byte)
    111 - `lv_color32_t` A structure to store R (8 bit),G (8 bit), B (8 bit) components for 24-bit colors (4 byte)
    112 - `lv_color_t` Equal to `lv_color1/8/16/24_t` depending on the configured color depth setting
    113 - `lv_color_int_t` `uint8_t`, `uint16_t` or `uint32_t` depending on the color depth setting. Used to build color arrays from plain numbers.
    114 - `lv_opa_t` A simple `uint8_t` type to describe opacity.
    115 
    116 The `lv_color_t`, `lv_color1_t`, `lv_color8_t`, `lv_color16_t` and `lv_color32_t` types have four fields:
    117 
    118 - `ch.red` red channel
    119 - `ch.green` green channel
    120 - `ch.blue` blue channel
    121 - `full*` red + green + blue as one number
    122 
    123 You can set the current color depth in *lv_conf.h*, by setting the `LV_COLOR_DEPTH` define to 1 (monochrome), 8, 16 or 32.
    124 
    125 
    126 ### Convert color
    127 You can convert a color from the current color depth to another. The converter functions return with a number, so you have to use the `full` field to map a converted color back into a structure:
    128 
    129 ```c
    130 lv_color_t c;
    131 c.red   = 0x38;
    132 c.green = 0x70;
    133 c.blue  = 0xCC;
    134 
    135 lv_color1_t c1;
    136 c1.full = lv_color_to1(c);	/*Return 1 for light colors, 0 for dark colors*/
    137 
    138 lv_color8_t c8;
    139 c8.full = lv_color_to8(c);	/*Give a 8 bit number with the converted color*/
    140 
    141 lv_color16_t c16;
    142 c16.full = lv_color_to16(c); /*Give a 16 bit number with the converted color*/
    143 
    144 lv_color32_t c24;
    145 c32.full = lv_color_to32(c);	/*Give a 32 bit number with the converted color*/
    146 ```
    147 
    148 
    149 ## API
    150 
    151 
    152 ```eval_rst
    153 
    154 .. doxygenfile:: lv_color.h
    155   :project: lvgl
    156 
    157 ```