script: Clean up Color parsing rules

All the ClutterColor parsing rules should be coalesced inside
clutter_script_parse_color(): object, array and string notations
are the canonical ways of defining a ClutterColor inside a
ClutterScript definition. Having a single function in charge of
the parsing cleans up the code.
This commit is contained in:
Emmanuele Bassi 2009-11-04 15:21:03 +00:00
parent 3e815de32b
commit 8ba13d6495
2 changed files with 13 additions and 10 deletions

View File

@ -479,6 +479,9 @@ clutter_script_parse_color (ClutterScript *script,
case JSON_NODE_OBJECT:
return parse_color_from_object (json_node_get_object (node), color);
case JSON_NODE_VALUE:
return clutter_color_from_string (color, json_node_get_string (node));
default:
break;
}
@ -1279,17 +1282,11 @@ clutter_script_parse_node (ClutterScript *script,
case G_TYPE_BOXED:
if (G_VALUE_HOLDS (value, CLUTTER_TYPE_COLOR))
{
if (G_VALUE_HOLDS (&node_value, G_TYPE_STRING))
{
const gchar *str = g_value_get_string (&node_value);
ClutterColor color = { 0, };
if (str && str[0] != '\0')
clutter_color_from_string (&color, str);
g_value_set_boxed (value, &color);
retval = TRUE;
}
retval = clutter_script_parse_color (script, node, &color);
if (retval)
clutter_value_set_color (value, &color);
}
break;

View File

@ -10,6 +10,7 @@ test_script_single (TestConformSimpleFixture *fixture,
gconstpointer dummy)
{
ClutterScript *script = clutter_script_new ();
ClutterColor color = { 0, };
GObject *actor = NULL;
GError *error = NULL;
ClutterActor *rect;
@ -26,6 +27,11 @@ test_script_single (TestConformSimpleFixture *fixture,
g_assert_cmpfloat (clutter_actor_get_width (rect), ==, 50.0);
g_assert_cmpfloat (clutter_actor_get_y (rect), ==, 100.0);
clutter_rectangle_get_color (CLUTTER_RECTANGLE (rect), &color);
g_assert_cmpint (color.red, ==, 255);
g_assert_cmpint (color.green, ==, 0xcc);
g_assert_cmpint (color.alpha, ==, 0xff);
g_object_unref (script);
clutter_actor_destroy (rect);