mirror of
https://github.com/brl/mutter.git
synced 2025-02-18 06:04:10 +00:00
[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:
parent
ffd5fb172b
commit
bd13a4ddc4
@ -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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user