2007-10-26 Emmanuele Bassi <ebassi@openedhand.com>

* clutter/clutter-script.h:
	* clutter/clutter-script.c: Add a ::get_type_from_name() virtual
	function for bindings to override. The current implementation
	calls g_type_from_name() and our lazy class resolver.

	* clutter.symbols: Update.

	* doc/reference/clutter-sections.txt: Update.
This commit is contained in:
Emmanuele Bassi 2007-10-26 09:05:06 +00:00
parent 736bbfb713
commit 6ab8c4d28a
5 changed files with 80 additions and 20 deletions

View File

@ -1,3 +1,14 @@
2007-10-26 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-script.h:
* clutter/clutter-script.c: Add a ::get_type_from_name() virtual
function for bindings to override. The current implementation
calls g_type_from_name() and our lazy class resolver.
* clutter.symbols: Update.
* doc/reference/clutter-sections.txt: Update.
2007-10-25 Emmanuele Bassi <ebassi@openedhand.com> 2007-10-25 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-behaviour-path.c: Reverse the list of * clutter/clutter-behaviour-path.c: Reverse the list of

View File

@ -512,6 +512,7 @@ clutter_script_get_object
clutter_script_get_objects clutter_script_get_objects
clutter_script_unmerge_objects clutter_script_unmerge_objects
clutter_script_ensure_objects clutter_script_ensure_objects
clutter_script_get_type_from_name
clutter_scriptable_get_type clutter_scriptable_get_type
clutter_scriptable_set_name clutter_scriptable_set_name
clutter_scriptable_get_name clutter_scriptable_get_name

View File

@ -1043,13 +1043,13 @@ clutter_script_construct_object (ClutterScript *script,
if (oinfo->gtype == G_TYPE_INVALID) if (oinfo->gtype == G_TYPE_INVALID)
{ {
if (oinfo->type_func) if (G_UNLIKELY (oinfo->type_func))
oinfo->gtype = clutter_script_get_type_from_symbol (oinfo->type_func); oinfo->gtype = clutter_script_get_type_from_symbol (oinfo->type_func);
else else
oinfo->gtype = clutter_script_get_type_from_class (oinfo->class_name); oinfo->gtype = clutter_script_get_type_from_name (script, oinfo->class_name);
} }
if (oinfo->gtype == G_TYPE_INVALID) if (G_UNLIKELY (oinfo->gtype == G_TYPE_INVALID))
return NULL; return NULL;
if (oinfo->object) if (oinfo->object)
@ -1191,6 +1191,19 @@ json_parse_end (JsonParser *parser,
g_hash_table_foreach (priv->objects, construct_each_object, script); g_hash_table_foreach (priv->objects, construct_each_object, script);
} }
static GType
clutter_script_real_get_type_from_name (ClutterScript *script,
const gchar *type_name)
{
GType gtype;
gtype = g_type_from_name (type_name);
if (gtype != G_TYPE_INVALID)
return gtype;
return clutter_script_get_type_from_class (type_name);
}
void void
property_info_free (gpointer data) property_info_free (gpointer data)
{ {
@ -1263,6 +1276,8 @@ clutter_script_class_init (ClutterScriptClass *klass)
g_type_class_add_private (klass, sizeof (ClutterScriptPrivate)); g_type_class_add_private (klass, sizeof (ClutterScriptPrivate));
klass->get_type_from_name = clutter_script_real_get_type_from_name;
gobject_class->finalize = clutter_script_finalize; gobject_class->finalize = clutter_script_finalize;
} }
@ -1567,6 +1582,30 @@ clutter_script_ensure_objects (ClutterScript *script)
g_hash_table_foreach (priv->objects, construct_each_object, script); g_hash_table_foreach (priv->objects, construct_each_object, script);
} }
/**
* clutter_script_get_type_from_name:
* @script: a #ClutterScript
* @type_name: name of the type to look up
*
* Looks up a type by name, using the virtual function that
* #ClutterScript has for that purpose. This function should
* rarely be used.
*
* Return value: the type for the requested type name, or
* %G_TYPE_INVALID if not corresponding type was found.
*
* Since: 0.6
*/
GType
clutter_script_get_type_from_name (ClutterScript *script,
const gchar *type_name)
{
g_return_val_if_fail (CLUTTER_IS_SCRIPT (script), G_TYPE_INVALID);
g_return_val_if_fail (type_name != NULL, G_TYPE_INVALID);
return CLUTTER_SCRIPT_GET_CLASS (script)->get_type_from_name (script, type_name);
}
GQuark GQuark
clutter_script_error_quark (void) clutter_script_error_quark (void)
{ {

View File

@ -35,7 +35,7 @@ G_BEGIN_DECLS
#define CLUTTER_IS_SCRIPT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_SCRIPT)) #define CLUTTER_IS_SCRIPT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_SCRIPT))
#define CLUTTER_SCRIPT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_SCRIPT, ClutterScriptClass)) #define CLUTTER_SCRIPT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_SCRIPT, ClutterScriptClass))
#define CLUTTER_IS_SCRIPT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_SCRIPT)) #define CLUTTER_IS_SCRIPT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_SCRIPT))
#define CLUTTER_SCRIPT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_SCRIPT, ClutterScript)) #define CLUTTER_SCRIPT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_SCRIPT, ClutterScriptClass))
typedef struct _ClutterScript ClutterScript; typedef struct _ClutterScript ClutterScript;
typedef struct _ClutterScriptPrivate ClutterScriptPrivate; typedef struct _ClutterScriptPrivate ClutterScriptPrivate;
@ -71,6 +71,11 @@ struct _ClutterScriptClass
/*< private >*/ /*< private >*/
GObjectClass parent_class; GObjectClass parent_class;
/*< public >*/
GType (* get_type_from_name) (ClutterScript *script,
const gchar *type_name);
/*< private >*/
/* padding, for future expansion */ /* padding, for future expansion */
void (*_clutter_reserved1) (void); void (*_clutter_reserved1) (void);
void (*_clutter_reserved2) (void); void (*_clutter_reserved2) (void);
@ -101,6 +106,9 @@ void clutter_script_unmerge_objects (ClutterScript *script,
guint merge_id); guint merge_id);
void clutter_script_ensure_objects (ClutterScript *script); void clutter_script_ensure_objects (ClutterScript *script);
GType clutter_script_get_type_from_name (ClutterScript *script,
const gchar *type_name);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_SCRIPT_H__ */ #endif /* __CLUTTER_SCRIPT_H__ */

View File

@ -1100,6 +1100,7 @@ clutter_script_get_object
clutter_script_get_objects clutter_script_get_objects
clutter_script_unmerge_objects clutter_script_unmerge_objects
clutter_script_ensure_objects clutter_script_ensure_objects
clutter_script_get_type_from_name
<SUBSECTION Standard> <SUBSECTION Standard>
CLUTTER_TYPE_SCRIPT CLUTTER_TYPE_SCRIPT
CLUTTER_SCRIPT CLUTTER_SCRIPT