mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
2007-10-10 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/json/json-parser.c: Use the commodity JsonNode API and accept bare values as root nodes. * clutter/clutter-script-private.h: * clutter/clutter-script.c: Unreference the created objects only if they are top-levels, like ClutterBehaviour and ClutterTimelines. Actors have floating references, so we just transfer ownership to their containers, and the stage is owned by the backend. Add the "type_func" key to the object definition, so the user can supply its own GType function if the class name doesn't follow the GObject rules. Document the ClutterScript public API.
This commit is contained in:
@ -343,7 +343,6 @@ json_parse_array (JsonParser *parser,
|
||||
while (token != G_TOKEN_RIGHT_BRACE)
|
||||
{
|
||||
JsonNode *node = NULL;
|
||||
GValue value = { 0, };
|
||||
|
||||
if (token == G_TOKEN_COMMA)
|
||||
{
|
||||
@ -421,44 +420,25 @@ json_parse_array (JsonParser *parser,
|
||||
switch (token)
|
||||
{
|
||||
case G_TOKEN_INT:
|
||||
g_value_init (&value, G_TYPE_INT);
|
||||
g_value_set_int (&value, scanner->value.v_int);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_int (node, scanner->value.v_int);
|
||||
break;
|
||||
|
||||
case G_TOKEN_FLOAT:
|
||||
g_value_init (&value, G_TYPE_DOUBLE);
|
||||
g_value_set_double (&value, scanner->value.v_float);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_double (node, scanner->value.v_float);
|
||||
break;
|
||||
|
||||
case G_TOKEN_STRING:
|
||||
g_value_init (&value, G_TYPE_STRING);
|
||||
g_value_set_string (&value, scanner->value.v_string);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_string (node, scanner->value.v_string);
|
||||
break;
|
||||
|
||||
case JSON_TOKEN_TRUE:
|
||||
case JSON_TOKEN_FALSE:
|
||||
g_value_init (&value, G_TYPE_BOOLEAN);
|
||||
g_value_set_boolean (&value, token == JSON_TOKEN_TRUE ? TRUE : FALSE);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_boolean (node, token == JSON_TOKEN_TRUE ? TRUE
|
||||
: FALSE);
|
||||
break;
|
||||
|
||||
case JSON_TOKEN_NULL:
|
||||
@ -515,7 +495,6 @@ json_parse_object (JsonParser *parser,
|
||||
{
|
||||
JsonNode *node = NULL;
|
||||
gchar *name = NULL;
|
||||
GValue value = { 0, };
|
||||
|
||||
if (token == G_TOKEN_COMMA)
|
||||
{
|
||||
@ -621,44 +600,25 @@ json_parse_object (JsonParser *parser,
|
||||
switch (token)
|
||||
{
|
||||
case G_TOKEN_INT:
|
||||
g_value_init (&value, G_TYPE_INT);
|
||||
g_value_set_int (&value, scanner->value.v_int);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_int (node, scanner->value.v_int);
|
||||
break;
|
||||
|
||||
case G_TOKEN_FLOAT:
|
||||
g_value_init (&value, G_TYPE_DOUBLE);
|
||||
g_value_set_double (&value, scanner->value.v_float);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_double (node, scanner->value.v_float);
|
||||
break;
|
||||
|
||||
case G_TOKEN_STRING:
|
||||
g_value_init (&value, G_TYPE_STRING);
|
||||
g_value_set_string (&value, scanner->value.v_string);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_string (node, scanner->value.v_string);
|
||||
break;
|
||||
|
||||
case JSON_TOKEN_TRUE:
|
||||
case JSON_TOKEN_FALSE:
|
||||
g_value_init (&value, G_TYPE_BOOLEAN);
|
||||
g_value_set_boolean (&value, token == JSON_TOKEN_TRUE ? TRUE : FALSE);
|
||||
|
||||
node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_value (node, &value);
|
||||
|
||||
g_value_unset (&value);
|
||||
json_node_set_boolean (node, token == JSON_TOKEN_TRUE ? TRUE
|
||||
: FALSE);
|
||||
break;
|
||||
|
||||
case JSON_TOKEN_NULL:
|
||||
@ -713,6 +673,25 @@ json_parse_statement (JsonParser *parser,
|
||||
priv->root = priv->current_node = json_node_new (JSON_NODE_NULL);
|
||||
return G_TOKEN_NONE;
|
||||
|
||||
case JSON_TOKEN_TRUE:
|
||||
case JSON_TOKEN_FALSE:
|
||||
priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
|
||||
json_node_set_boolean (priv->current_node,
|
||||
token == JSON_TOKEN_TRUE ? TRUE : FALSE);
|
||||
return G_TOKEN_NONE;
|
||||
|
||||
case G_TOKEN_INT:
|
||||
case G_TOKEN_FLOAT:
|
||||
case G_TOKEN_STRING:
|
||||
priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
|
||||
if (token == G_TOKEN_INT)
|
||||
json_node_set_int (priv->current_node, scanner->value.v_int);
|
||||
else if (token == G_TOKEN_FLOAT)
|
||||
json_node_set_double (priv->current_node, scanner->value.v_float);
|
||||
else
|
||||
json_node_set_string (priv->current_node, scanner->value.v_string);
|
||||
return G_TOKEN_NONE;
|
||||
|
||||
default:
|
||||
g_scanner_get_next_token (scanner);
|
||||
return G_TOKEN_SYMBOL;
|
||||
|
Reference in New Issue
Block a user