refactor calculate_foreground_color()
split repeated code into separate function.
This commit is contained in:
parent
2ee38ca961
commit
916b8816cb
43
x.c
43
x.c
@ -72,6 +72,17 @@ static color_t x_string_to_color_t(const char *str)
|
||||
return x_color_hex_to_double(val);
|
||||
}
|
||||
|
||||
static double _apply_delta(double base, double delta)
|
||||
{
|
||||
base += delta;
|
||||
if (base > 1)
|
||||
base = 1;
|
||||
if (base < 0)
|
||||
base = 0;
|
||||
|
||||
return base;
|
||||
}
|
||||
|
||||
color_t calculate_foreground_color(color_t bg)
|
||||
{
|
||||
double c_delta = 0.1;
|
||||
@ -80,33 +91,11 @@ color_t calculate_foreground_color(color_t bg)
|
||||
/* do we need to darken or brighten the colors? */
|
||||
bool darken = (bg.r + bg.g + bg.b) / 3 > 0.5;
|
||||
|
||||
if (darken) {
|
||||
if (color.r - c_delta < 0)
|
||||
color.r = 0;
|
||||
else
|
||||
color.r -= c_delta;
|
||||
if (color.g - c_delta < 0)
|
||||
color.g = 0;
|
||||
else
|
||||
color.g -= c_delta;
|
||||
if (color.b - c_delta < 0)
|
||||
color.b = 0;
|
||||
else
|
||||
color.b -= c_delta;
|
||||
} else {
|
||||
if (color.r + c_delta > 1)
|
||||
color.r = 1;
|
||||
else
|
||||
color.r += c_delta;
|
||||
if (color.g + c_delta > 1)
|
||||
color.g = 1;
|
||||
else
|
||||
color.g += c_delta;
|
||||
if (color.b + c_delta > 1)
|
||||
color.g = 1;
|
||||
else
|
||||
color.g += c_delta;
|
||||
}
|
||||
int signedness = darken ? -1 : 1;
|
||||
|
||||
color.r = _apply_delta(color.r, c_delta * signedness);
|
||||
color.g = _apply_delta(color.g, c_delta * signedness);
|
||||
color.b = _apply_delta(color.b, c_delta * signedness);
|
||||
|
||||
return color;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user