mirror of
https://github.com/brl/mutter.git
synced 2025-05-29 10:00:03 +00:00
color: Measure the string just once when parsing
Instead of measuring the color hexadecimal string for each case, just measure it once and then use a switch() to go to the right case.
This commit is contained in:
parent
c7d50083ec
commit
4d481e03f3
@ -406,9 +406,11 @@ clutter_color_from_string (ClutterColor *color,
|
|||||||
|
|
||||||
if (sscanf (str + 1, "%x", &result))
|
if (sscanf (str + 1, "%x", &result))
|
||||||
{
|
{
|
||||||
if (strlen (str) == 9)
|
gsize length = strlen (str);
|
||||||
|
|
||||||
|
switch (length)
|
||||||
{
|
{
|
||||||
/* #rrggbbaa */
|
case 9: /* 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;
|
||||||
@ -416,10 +418,17 @@ clutter_color_from_string (ClutterColor *color,
|
|||||||
color->alpha = result & 0xff;
|
color->alpha = result & 0xff;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
else if (strlen (str) == 5)
|
case 7: /* #rrggbb */
|
||||||
{
|
color->red = (result >> 16) & 0xff;
|
||||||
/* #rgba */
|
color->green = (result >> 8) & 0xff;
|
||||||
|
color->blue = result & 0xff;
|
||||||
|
|
||||||
|
color->alpha = 0xff;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case 5: /* #rgba */
|
||||||
color->red = ((result >> 12) & 0xf);
|
color->red = ((result >> 12) & 0xf);
|
||||||
color->green = ((result >> 8) & 0xf);
|
color->green = ((result >> 8) & 0xf);
|
||||||
color->blue = ((result >> 4) & 0xf);
|
color->blue = ((result >> 4) & 0xf);
|
||||||
@ -431,19 +440,8 @@ clutter_color_from_string (ClutterColor *color,
|
|||||||
color->alpha = (color->alpha << 4) | color->alpha;
|
color->alpha = (color->alpha << 4) | color->alpha;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
else if (strlen (str) == 7)
|
|
||||||
{
|
|
||||||
/* #rrggbb */
|
|
||||||
color->red = (result >> 16) & 0xff;
|
|
||||||
color->green = (result >> 8) & 0xff;
|
|
||||||
color->blue = result & 0xff;
|
|
||||||
|
|
||||||
color->alpha = 0xff;
|
case 4: /* #rgb */
|
||||||
}
|
|
||||||
else if (strlen (str) == 4)
|
|
||||||
{
|
|
||||||
/* #rgb */
|
|
||||||
color->red = ((result >> 8) & 0xf);
|
color->red = ((result >> 8) & 0xf);
|
||||||
color->green = ((result >> 4) & 0xf);
|
color->green = ((result >> 4) & 0xf);
|
||||||
color->blue = result & 0xf;
|
color->blue = result & 0xf;
|
||||||
@ -453,6 +451,12 @@ clutter_color_from_string (ClutterColor *color,
|
|||||||
color->blue = (color->blue << 4) | color->blue;
|
color->blue = (color->blue << 4) | color->blue;
|
||||||
|
|
||||||
color->alpha = 0xff;
|
color->alpha = 0xff;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* pass through to Pango */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user