aboutsummaryrefslogtreecommitdiff
path: root/defs/colors.h
blob: a3179f850003414062b4793dd0a155d3da38a380 (plain)
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
#ifndef COLORS_H
#define COLORS_H

#include <stddef.h>
#include <stdbool.h>

typedef enum color_mode {
    MODE_NONE, 
    MODE_ANSI16, 
    MODE_ANSI256, 
    MODE_TRUECOLOR 
}color_mode;

typedef enum NamedColor {
    Black,
    Red,
    Green,
    Yellow,
    Blue,
    Magenta,
    Cyan,
    White,
    BrightBlack,
    BrightRed,
    BrightGreen,
    BrightYellow,
    BrightBlue,
    BrightMagenta,
    BrightCyan,
    BrightWhite,
}NamedColor;

typedef struct{
    unsigned char red;
    unsigned char green;
    unsigned char blue;
}rgbcolor;

typedef struct colorconfig {
    enum color_mode mode;
    bool has_solid_color; 
    rgbcolor solid_color;
    bool rainbow_enabled;     //flag
    int saturation;          //default 100
    int brightness;          //default 50
    rgbcolor *rainbow_cache;    //array of rgbcolor malloced
    size_t rainbow_count;
}colorconfig;

typedef enum ColorParseError {
    COLOR_OK,
    COLOR_ERR_FORMAT,
    COLOR_ERR_HEX,
    COLOR_ERR_RGB,
    COLOR_ERR_HSL,
    COLOR_ERR_UNKNOWN_NAME
}ColorParseError;

void colorconfig_init(colorconfig *config);
enum color_mode detect_color_mode(void);
bool enable_windows_ansi(void);
int parse_namedcolors(const char *name, rgbcolor *out_rgb);
ColorParseError parse_color(const char *s, rgbcolor *out);
const char *color_parse_error_message(ColorParseError error);
unsigned char rgb_to_ansi16(rgbcolor rgb);
unsigned char rgb_to_ansi256(rgbcolor rgb);
rgbcolor hsl_to_rgb(unsigned short h, unsigned char s, unsigned char l);
rgbcolor lerp_color_hsv(rgbcolor start, rgbcolor end, float t);
void rgb_to_fg_escape(rgbcolor rgb, color_mode mode, char *out, size_t size);

#endif