[color] Add support for the "#rgba" color format

clutter_color_from_string() only supported the "#rrggbbaa" format with
alpha channel, this patch adds support for "#rgba".

Colors in "#rrggbb" format were parsed manually, this is now left to
the pango color parsing fallback, since that's handling it just fine.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
This commit is contained in:
Robert Staudinger 2009-06-01 18:54:46 +02:00 committed by Emmanuele Bassi
parent ffd5fb172b
commit bd13a4ddc4

View File

@ -398,7 +398,7 @@ clutter_color_from_string (ClutterColor *color,
g_return_val_if_fail (str != NULL, FALSE); g_return_val_if_fail (str != NULL, FALSE);
/* if the string contains a color encoded using the hexadecimal /* if the string contains a color encoded using the hexadecimal
* notations (#rrggbbaa or #rrggbb) we attempt a rough pass at * notations (#rrggbbaa or #rgba) we attempt a rough pass at
* parsing the color ourselves, as we need the alpha channel that * parsing the color ourselves, as we need the alpha channel that
* Pango can't retrieve. * Pango can't retrieve.
*/ */
@ -407,36 +407,34 @@ clutter_color_from_string (ClutterColor *color,
gint32 result; gint32 result;
if (sscanf (str + 1, "%x", &result)) if (sscanf (str + 1, "%x", &result))
{ {
if (strlen (str) == 9) if (strlen (str) == 9)
{ {
/* #rrggbbaa */ /* #rrggbbaa */
color->red = (result >> 24) & 0xff; color->red = (result >> 24) & 0xff;
color->green = (result >> 16) & 0xff; color->green = (result >> 16) & 0xff;
color->blue = (result >> 8) & 0xff; color->blue = (result >> 8) & 0xff;
color->alpha = result & 0xff; color->alpha = result & 0xff;
return TRUE; return TRUE;
} }
else if (strlen (str) == 7) else if (strlen (str) == 5)
{ {
/* #rrggbb */ /* #rgba */
color->red = (result >> 16) & 0xff; color->red = ((result >> 12) & 0xf);
color->green = (result >> 8) & 0xff; color->green = ((result >> 8) & 0xf);
color->blue = result & 0xff; color->blue = ((result >> 4) & 0xf);
color->alpha = result & 0xf;
color->alpha = 0xff; color->red = (color->red << 4) | color->red;
color->green = (color->green << 4) | color->green;
color->blue = (color->blue << 4) | color->blue;
color->alpha = (color->alpha << 4) | color->alpha;
return TRUE; return TRUE;
} }
} }
/* XXX - should we return FALSE here? it's not like
* Pango is endowed with mystical parsing powers and
* will be able to do better than the code above.
* still, it doesn't hurt
*/
} }
/* Fall back to pango for named colors */ /* Fall back to pango for named colors */