From a4a7b254368ee675d231b41a29e6c52b6aea3b97 Mon Sep 17 00:00:00 2001 From: adelin-b Date: Wed, 24 Jun 2020 17:38:30 +0200 Subject: [PATCH] config: add shadow-hex option This allows the user to specify the shadow color via a single option, instead of specifying red, green and blue separately. --- man/picom.1.asciidoc | 3 +++ picom.sample.conf | 3 +++ src/config.c | 1 + src/config.h | 1 + src/config_libconfig.c | 23 +++++++++++++++++++++++ 5 files changed, 31 insertions(+) diff --git a/man/picom.1.asciidoc b/man/picom.1.asciidoc index f4a53d03..da386094 100644 --- a/man/picom.1.asciidoc +++ b/man/picom.1.asciidoc @@ -151,6 +151,9 @@ OPTIONS *--shadow-exclude* 'CONDITION':: Specify a list of conditions of windows that should have no shadow. +*--shadow-hex* 'STRING':: + Color of shadow using hex string ('#000000') + *--fade-exclude* 'CONDITION':: Specify a list of conditions of windows that should not be faded. diff --git a/picom.sample.conf b/picom.sample.conf index 192fa108..fd888a28 100644 --- a/picom.sample.conf +++ b/picom.sample.conf @@ -44,6 +44,9 @@ shadow-offset-y = -7; # Blue color value of shadow (0.0 - 1.0, defaults to 0). # shadow-blue = 0 +# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue) +# shadow-hex = "#000000" + # Do not paint shadows on shaped windows. Note shaped windows # here means windows setting its shape through X Shape extension. # Those using ARGB background is beyond our control. diff --git a/src/config.c b/src/config.c index a88bc025..df3b2c83 100644 --- a/src/config.c +++ b/src/config.c @@ -515,6 +515,7 @@ char *parse_config(options_t *opt, const char *config_file, bool *shadow_enable, .sw_opti = false, .use_damage = true, + .shadow_hex = "#000000", .shadow_red = 0.0, .shadow_green = 0.0, .shadow_blue = 0.0, diff --git a/src/config.h b/src/config.h index cd32add2..831f550f 100644 --- a/src/config.h +++ b/src/config.h @@ -140,6 +140,7 @@ typedef struct options { // === Shadow === /// Red, green and blue tone of the shadow. double shadow_red, shadow_green, shadow_blue; + char *shadow_hex; int shadow_radius; int shadow_offset_x, shadow_offset_y; double shadow_opacity; diff --git a/src/config_libconfig.c b/src/config_libconfig.c index 659ff867..929c31f6 100644 --- a/src/config_libconfig.c +++ b/src/config_libconfig.c @@ -21,6 +21,21 @@ #pragma GCC diagnostic error "-Wunused-parameter" +/** + * Hex color to rgb + */ +struct color hex_to_rgb(const char *hex) { + struct color rgb; + // Ignore the # in front of the string + const char *sane_hex = hex + 1; + int hex_color = (int)strtol(sane_hex, NULL, 16); + rgb.red = (float)(hex_color >> 16) / 256; + rgb.green = (float)((hex_color & 0x00ff00) >> 8) / 256; + rgb.blue = (float)(hex_color & 0x0000ff) / 256; + + return rgb; +} + /** * Wrapper of libconfig's config_lookup_int. * @@ -410,6 +425,14 @@ char *parse_config_libconfig(options_t *opt, const char *config_file, bool *shad config_lookup_float(&cfg, "shadow-green", &opt->shadow_green); // --shadow-blue config_lookup_float(&cfg, "shadow-blue", &opt->shadow_blue); + // --shadow-hex + if (config_lookup_string(&cfg, "shadow-hex", &sval)) { + struct color rgb; + rgb = hex_to_rgb(sval); + opt->shadow_red = rgb.red; + opt->shadow_green = rgb.green; + opt->shadow_blue = rgb.blue; + } // --shadow-exclude-reg if (config_lookup_string(&cfg, "shadow-exclude-reg", &sval)) opt->shadow_exclude_reg_str = strdup(sval);