mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 19:42:05 +00:00
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.
This commit is contained in:
parent
4cc269a468
commit
09f91ff6ea
@ -302,25 +302,14 @@ clutter_alpha_parse_custom_node (ClutterScriptable *scriptable,
|
|||||||
*/
|
*/
|
||||||
if (strncmp (name, "mode", 4) == 0)
|
if (strncmp (name, "mode", 4) == 0)
|
||||||
{
|
{
|
||||||
if (JSON_NODE_TYPE (node) != JSON_NODE_VALUE)
|
gulong mode;
|
||||||
return FALSE;
|
|
||||||
|
mode = clutter_script_resolve_animation_mode (node);
|
||||||
|
|
||||||
g_value_init (value, G_TYPE_ULONG);
|
g_value_init (value, G_TYPE_ULONG);
|
||||||
|
g_value_set_ulong (value, mode);
|
||||||
|
|
||||||
if (json_node_get_value_type (node) == G_TYPE_INT64)
|
return TRUE;
|
||||||
{
|
|
||||||
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;
|
|
||||||
|
|
||||||
mode = clutter_script_resolve_animation_mode (str);
|
|
||||||
g_value_set_ulong (value, mode);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -403,29 +403,14 @@ clutter_animation_parse_custom_node (ClutterScriptable *scriptable,
|
|||||||
{
|
{
|
||||||
if (strncmp (name, "mode", 4) == 0)
|
if (strncmp (name, "mode", 4) == 0)
|
||||||
{
|
{
|
||||||
if (json_node_get_node_type (node) != JSON_NODE_VALUE)
|
gulong mode;
|
||||||
return FALSE;
|
|
||||||
|
mode = clutter_script_resolve_animation_mode (node);
|
||||||
|
|
||||||
g_value_init (value, G_TYPE_ULONG);
|
g_value_init (value, G_TYPE_ULONG);
|
||||||
|
g_value_set_ulong (value, mode);
|
||||||
|
|
||||||
if (json_node_get_value_type (node) == G_TYPE_INT64)
|
return TRUE;
|
||||||
{
|
|
||||||
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 (str);
|
|
||||||
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 FALSE;
|
return FALSE;
|
||||||
|
@ -769,27 +769,40 @@ static const struct
|
|||||||
static const gint n_animation_modes = G_N_ELEMENTS (animation_modes);
|
static const gint n_animation_modes = G_N_ELEMENTS (animation_modes);
|
||||||
|
|
||||||
gulong
|
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
|
if (JSON_NODE_TYPE (node) != JSON_NODE_VALUE)
|
||||||
* of the animation_modes array, e.g.
|
return CLUTTER_CUSTOM_MODE;
|
||||||
* - special casing linear
|
|
||||||
* - tokenizing ('ease', 'In', 'Sine') and matching on token
|
if (json_node_get_value_type (node) == G_TYPE_INT64)
|
||||||
* - binary searching?
|
return json_node_get_int (node);
|
||||||
*/
|
|
||||||
for (i = 0; i < n_animation_modes; i++)
|
if (json_node_get_value_type (node) == G_TYPE_STRING)
|
||||||
{
|
{
|
||||||
if (strcmp (animation_modes[i].name, name) == 0)
|
const gchar *name = json_node_get_string (node);
|
||||||
return animation_modes[i].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 (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;
|
||||||
|
|
||||||
|
g_warning ("Unable to find the animation mode '%s'", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clutter_script_enum_from_string (CLUTTER_TYPE_ANIMATION_MODE, name, &res))
|
|
||||||
return res;
|
|
||||||
|
|
||||||
g_warning ("Unable to find the animation mode '%s'", name);
|
|
||||||
|
|
||||||
return CLUTTER_CUSTOM_MODE;
|
return CLUTTER_CUSTOM_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -850,8 +863,8 @@ _clutter_script_parse_alpha (ClutterScript *script,
|
|||||||
}
|
}
|
||||||
|
|
||||||
val = json_object_get_member (object, "mode");
|
val = json_object_get_member (object, "mode");
|
||||||
if (val && json_node_get_string (val) != NULL)
|
if (val)
|
||||||
mode = clutter_script_resolve_animation_mode (json_node_get_string (val));
|
mode = clutter_script_resolve_animation_mode (val);
|
||||||
|
|
||||||
if (mode == CLUTTER_CUSTOM_MODE)
|
if (mode == CLUTTER_CUSTOM_MODE)
|
||||||
{
|
{
|
||||||
|
@ -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_symbol (const gchar *symbol);
|
||||||
GType clutter_script_get_type_from_class (const gchar *name);
|
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,
|
gboolean clutter_script_enum_from_string (GType gtype,
|
||||||
const gchar *string,
|
const gchar *string,
|
||||||
|
Loading…
Reference in New Issue
Block a user