diff --git a/gtk/gtkcsscolorvalue.c b/gtk/gtkcsscolorvalue.c index 5e6a7f0c02..06337869b0 100644 --- a/gtk/gtkcsscolorvalue.c +++ b/gtk/gtkcsscolorvalue.c @@ -184,12 +184,7 @@ _gtk_css_color_value_resolve (GtkCssValue *color, *dependencies = _gtk_css_dependencies_union (*dependencies, 0); _gtk_hsla_init_from_rgba (&hsla, _gtk_css_rgba_value_get_rgba (val)); - - hsla.lightness *= color->sym_col.shade.factor; - hsla.lightness = CLAMP (hsla.lightness, 0.0, 1.0); - - hsla.saturation *= color->sym_col.shade.factor; - hsla.saturation = CLAMP (hsla.saturation, 0.0, 1.0); + _gtk_hsla_shade (&hsla, &hsla, color->sym_col.shade.factor); _gdk_rgba_init_from_hsla (&shade, &hsla); diff --git a/gtk/gtkhsla.c b/gtk/gtkhsla.c index a78849789d..78ccaec19f 100644 --- a/gtk/gtkhsla.c +++ b/gtk/gtkhsla.c @@ -183,3 +183,21 @@ _gdk_rgba_init_from_hsla (GdkRGBA *rgba, } } +void +_gtk_hsla_shade (GtkHSLA *dest, + const GtkHSLA *src, + double factor) +{ + g_return_if_fail (dest != NULL); + g_return_if_fail (src != NULL); + + dest->hue = src->hue; + + dest->lightness = src->lightness * factor; + dest->lightness = CLAMP (dest->lightness, 0.0, 1.0); + + dest->saturation = src->saturation * factor; + dest->saturation = CLAMP (dest->saturation, 0.0, 1.0); + + dest->alpha = src->alpha; +} diff --git a/gtk/gtkhslaprivate.h b/gtk/gtkhslaprivate.h index 3cc97d9b71..9f038cce25 100644 --- a/gtk/gtkhslaprivate.h +++ b/gtk/gtkhslaprivate.h @@ -42,6 +42,10 @@ void _gtk_hsla_init_from_rgba (GtkHSLA *hsla, void _gdk_rgba_init_from_hsla (GdkRGBA *rgba, const GtkHSLA *hsla); +void _gtk_hsla_shade (GtkHSLA *dest, + const GtkHSLA *src, + double factor); + G_END_DECLS #endif /* __GTK_HSLA_PRIVATE_H__ */