Support for different color config precisions (#RGB format)
Support for #RGB is claimed in docs.
This commit is contained in:
parent
2e2b3e549f
commit
7226ef2c15
24
src/draw.c
24
src/draw.c
@ -34,6 +34,8 @@ struct window_x11 *win;
|
||||
|
||||
PangoFontDescription *pango_fdesc;
|
||||
|
||||
#define UINT_MAX_N(bits) (1 << (bits-1) | (( 1 << (bits-1) ) - 1))
|
||||
|
||||
void draw_setup(void)
|
||||
{
|
||||
x_setup();
|
||||
@ -42,13 +44,16 @@ void draw_setup(void)
|
||||
pango_fdesc = pango_font_description_from_string(settings.font);
|
||||
}
|
||||
|
||||
static struct color hex_to_color(uint32_t hexValue)
|
||||
static struct color hex_to_color(uint32_t hexValue, int dpc)
|
||||
{
|
||||
const int bpc = 4 * dpc;
|
||||
const unsigned single_max = UINT_MAX_N(bpc);
|
||||
|
||||
struct color ret;
|
||||
ret.r = ((hexValue >> 24) & 0xFF) / (double)0xFF;
|
||||
ret.g = ((hexValue >> 16) & 0xFF) / (double)0xFF;
|
||||
ret.b = ((hexValue >> 8) & 0xFF) / (double)0xFF;
|
||||
ret.a = ((hexValue) & 0xFF) / (double)0xFF;
|
||||
ret.r = ((hexValue >> 3 * bpc) & single_max) / (double)single_max;
|
||||
ret.g = ((hexValue >> 2 * bpc) & single_max) / (double)single_max;
|
||||
ret.b = ((hexValue >> 1 * bpc) & single_max) / (double)single_max;
|
||||
ret.a = ((hexValue) & single_max) / (double)single_max;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -62,12 +67,15 @@ static struct color string_to_color(const char *str)
|
||||
}
|
||||
|
||||
switch (strlen(str+1)) {
|
||||
case 6: return hex_to_color((val << 8) | 0xFF);
|
||||
case 8: return hex_to_color(val);
|
||||
case 3: return hex_to_color((val << 4) | 0xF, 1);
|
||||
case 6: return hex_to_color((val << 8) | 0xFF, 2);
|
||||
case 4: return hex_to_color(val, 1);
|
||||
case 8: return hex_to_color(val, 2);
|
||||
}
|
||||
|
||||
/* return black on error */
|
||||
LOG_W("Invalid color string: '%s'", str);
|
||||
return hex_to_color(0xFF);
|
||||
return hex_to_color(0xF, 1);
|
||||
}
|
||||
|
||||
static inline double color_apply_delta(double base, double delta)
|
||||
|
Loading…
x
Reference in New Issue
Block a user