color: And finally, add hsla() support

Missed it when reading the CSS spec.
This commit is contained in:
Emmanuele Bassi 2010-11-22 15:07:01 +00:00
parent e86db85cd2
commit f4531aef4b

View File

@ -535,8 +535,9 @@ parse_rgba (ClutterColor *color,
}
static gboolean
parse_hsl (ClutterColor *color,
gchar *str)
parse_hsla (ClutterColor *color,
gchar *str,
gboolean has_alpha)
{
gdouble number;
gdouble h, l, s;
@ -588,6 +589,28 @@ parse_hsl (ClutterColor *color,
str += 1;
l = CLAMP (number / 100.0, 0.0, 1.0);
/* alpha (optional); since the alpha channel value can only
* be between 0 and 1 we don't use the parse_rgb_value()
* function
*/
if (has_alpha)
{
gdouble number;
if (*str != ',')
return FALSE;
str += 1;
skip_whitespace (&str);
number = g_ascii_strtod (str, &str);
color->alpha = CLAMP (number * 255.0, 0, 255);
}
else
color->alpha = 255;
skip_whitespace (&str);
if (*str != ')')
return FALSE;
@ -661,8 +684,14 @@ clutter_color_from_string (ClutterColor *color,
if (strncmp (str, "hsl", 3) == 0)
{
gchar *s = (gchar *) str;
gboolean res;
return parse_hsl (color, s + 3);
if (strncmp (str, "hsla", 4) == 0)
res = parse_hsla (color, s + 4, TRUE);
else
res = parse_hsla (color, s + 3, FALSE);
return res;
}
/* if the string contains a color encoded using the hexadecimal