Skip to content

Commit

Permalink
config: add shadow-hex option
Browse files Browse the repository at this point in the history
This allows the user to specify the shadow color via a single option,
instead of specifying red, green and blue separately.
  • Loading branch information
adelin-b authored and yshui committed Aug 18, 2020
1 parent 6eb6a24 commit a4a7b25
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 0 deletions.
3 changes: 3 additions & 0 deletions man/picom.1.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
3 changes: 3 additions & 0 deletions picom.sample.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions src/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
23 changes: 23 additions & 0 deletions src/config_libconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 <code>config_lookup_int</code>.
*
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit a4a7b25

Please sign in to comment.