From: Emmanuele Bassi Date: Mon, 8 Feb 2010 15:45:43 +0000 (+0000) Subject: script: Use a node when resolving an animation mode X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=09f91ff6eab3d617be88e11bd17c226fa4d23aed;p=profile%2Fivi%2Fclutter.git script: Use a node when resolving an animation mode Instead of taking a string and duplicating the "is it a string or an integer" check in both Alpha and Animation, the function in ClutterScript that resolves the animation mode values should take a JsonNode and do all the checks it needs. --- diff --git a/clutter/clutter-alpha.c b/clutter/clutter-alpha.c index 0a144c4..9a41de6 100644 --- a/clutter/clutter-alpha.c +++ b/clutter/clutter-alpha.c @@ -302,25 +302,14 @@ clutter_alpha_parse_custom_node (ClutterScriptable *scriptable, */ if (strncmp (name, "mode", 4) == 0) { - if (JSON_NODE_TYPE (node) != JSON_NODE_VALUE) - return FALSE; + gulong mode; - g_value_init (value, G_TYPE_ULONG); + mode = clutter_script_resolve_animation_mode (node); - if (json_node_get_value_type (node) == G_TYPE_INT64) - { - g_value_set_ulong (value, json_node_get_int (node)); - return TRUE; - } - else if (json_node_get_value_type (node) == G_TYPE_STRING) - { - const gchar *str = json_node_get_string (node); - gulong mode; + g_value_init (value, G_TYPE_ULONG); + g_value_set_ulong (value, mode); - mode = clutter_script_resolve_animation_mode (str); - g_value_set_ulong (value, mode); - return TRUE; - } + return TRUE; } return FALSE; diff --git a/clutter/clutter-animation.c b/clutter/clutter-animation.c index 7139e77..40590ac 100644 --- a/clutter/clutter-animation.c +++ b/clutter/clutter-animation.c @@ -403,29 +403,14 @@ clutter_animation_parse_custom_node (ClutterScriptable *scriptable, { if (strncmp (name, "mode", 4) == 0) { - if (json_node_get_node_type (node) != JSON_NODE_VALUE) - return FALSE; + gulong mode; - g_value_init (value, G_TYPE_ULONG); - - if (json_node_get_value_type (node) == G_TYPE_INT64) - { - g_value_set_ulong (value, json_node_get_int (node)); - return TRUE; - } - else if (json_node_get_value_type (node) == G_TYPE_STRING) - { - const gchar *str = json_node_get_string (node); - gulong mode = CLUTTER_LINEAR; + mode = clutter_script_resolve_animation_mode (node); - mode = clutter_script_resolve_animation_mode (str); - g_value_set_ulong (value, mode); + g_value_init (value, G_TYPE_ULONG); + g_value_set_ulong (value, mode); - return TRUE; - } - else - g_warning ("Expected an integer id or a string id for " - "the ClutterAnimation mode property"); + return TRUE; } return FALSE; diff --git a/clutter/clutter-script-parser.c b/clutter/clutter-script-parser.c index a33702c..37585fe 100644 --- a/clutter/clutter-script-parser.c +++ b/clutter/clutter-script-parser.c @@ -769,26 +769,39 @@ static const struct static const gint n_animation_modes = G_N_ELEMENTS (animation_modes); gulong -clutter_script_resolve_animation_mode (const gchar *name) +clutter_script_resolve_animation_mode (JsonNode *node) { - gint i, res = 0; + gint i, res = CLUTTER_CUSTOM_MODE; - /* XXX - we might be able to optimize by changing the ordering - * of the animation_modes array, e.g. - * - special casing linear - * - tokenizing ('ease', 'In', 'Sine') and matching on token - * - binary searching? - */ - for (i = 0; i < n_animation_modes; i++) + if (JSON_NODE_TYPE (node) != JSON_NODE_VALUE) + return CLUTTER_CUSTOM_MODE; + + if (json_node_get_value_type (node) == G_TYPE_INT64) + return json_node_get_int (node); + + if (json_node_get_value_type (node) == G_TYPE_STRING) { - if (strcmp (animation_modes[i].name, name) == 0) - return animation_modes[i].mode; - } + const gchar *name = json_node_get_string (node); + + /* XXX - we might be able to optimize by changing the ordering + * of the animation_modes array, e.g. + * - special casing linear + * - tokenizing ('ease', 'In', 'Sine') and matching on token + * - binary searching? + */ + for (i = 0; i < n_animation_modes; i++) + { + if (strcmp (animation_modes[i].name, name) == 0) + return animation_modes[i].mode; + } - if (clutter_script_enum_from_string (CLUTTER_TYPE_ANIMATION_MODE, name, &res)) - return res; + if (clutter_script_enum_from_string (CLUTTER_TYPE_ANIMATION_MODE, + name, + &res)) + return res; - g_warning ("Unable to find the animation mode '%s'", name); + g_warning ("Unable to find the animation mode '%s'", name); + } return CLUTTER_CUSTOM_MODE; } @@ -850,8 +863,8 @@ _clutter_script_parse_alpha (ClutterScript *script, } val = json_object_get_member (object, "mode"); - if (val && json_node_get_string (val) != NULL) - mode = clutter_script_resolve_animation_mode (json_node_get_string (val)); + if (val) + mode = clutter_script_resolve_animation_mode (val); if (mode == CLUTTER_CUSTOM_MODE) { diff --git a/clutter/clutter-script-private.h b/clutter/clutter-script-private.h index 601a93b..3dc7378 100644 --- a/clutter/clutter-script-private.h +++ b/clutter/clutter-script-private.h @@ -103,7 +103,7 @@ gboolean clutter_script_parse_node (ClutterScript *script, GType clutter_script_get_type_from_symbol (const gchar *symbol); GType clutter_script_get_type_from_class (const gchar *name); -gulong clutter_script_resolve_animation_mode (const gchar *namer); +gulong clutter_script_resolve_animation_mode (JsonNode *node); gboolean clutter_script_enum_from_string (GType gtype, const gchar *string,