From: Emmanuele Bassi Date: Tue, 14 Nov 2006 14:12:56 +0000 (+0000) Subject: 2006-11-16 Emmanuele Bassi X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3f62c72d077b46415aeb4f1dd4a51a2934aa5a7b;p=profile%2Fivi%2Fclutter.git 2006-11-16 Emmanuele Bassi * clutter/clutter-alpha.h: * clutter/clutter-alpha.c: ClutterAlpha is an initially floating object, as it makes sense only when bound to a ClutterBehaviour; add checks for public API. * clutter/clutter-behaviour.h: * clutter/clutter-behaviour.c: Remove the ClutterBehaviour constructor: ClutterBehaviour is an abstract class which must be implemented by subclassing; add checks for public API; unref the actors on finalize; sink the ClutterAlpha object. * clutter/clutter-behaviours.h: ClutterKnot is a boxed type: add the _get_type() function declaration and the type macro. --- diff --git a/ChangeLog b/ChangeLog index c59992e..6cd69cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2006-11-16 Emmanuele Bassi + + * clutter/clutter-alpha.h: + * clutter/clutter-alpha.c: ClutterAlpha is an initially + floating object, as it makes sense only when bound to + a ClutterBehaviour; add checks for public API. + + * clutter/clutter-behaviour.h: + * clutter/clutter-behaviour.c: Remove the ClutterBehaviour + constructor: ClutterBehaviour is an abstract class which + must be implemented by subclassing; add checks for public + API; unref the actors on finalize; sink the ClutterAlpha + object. + + * clutter/clutter-behaviours.h: ClutterKnot is a boxed + type: add the _get_type() function declaration and the + type macro. + 2006-10-23 Matthew Allum * clutter/clutter-alpha.h: diff --git a/clutter/clutter-alpha.c b/clutter/clutter-alpha.c index df628d8..61ebbbe 100644 --- a/clutter/clutter-alpha.c +++ b/clutter/clutter-alpha.c @@ -40,7 +40,7 @@ G_DEFINE_TYPE (ClutterAlpha, clutter_alpha, G_TYPE_OBJECT); -struct ClutterAlphaPrivate +struct _ClutterAlphaPrivate { ClutterTimeline *timeline; guint timeline_new_frame_id; @@ -316,6 +316,8 @@ clutter_alpha_set_timeline (ClutterAlpha *alpha, ClutterTimeline * clutter_alpha_get_timeline (ClutterAlpha *alpha) { + g_return_val_if_fail (CLUTTER_IS_ALPHA (alpha), NULL); + return alpha->priv->timeline; } @@ -332,6 +334,9 @@ ClutterAlpha* clutter_alpha_new (ClutterTimeline *timeline, ClutterAlphaFunc func) { + g_return_val_if_fail (CLUTTER_IS_TIMELINE (timeline), NULL); + g_return_val_if_fail (func != NULL, NULL); + return g_object_new (CLUTTER_TYPE_ALPHA, "timeline", timeline, "func", func, diff --git a/clutter/clutter-alpha.h b/clutter/clutter-alpha.h index 142aed5..6db4ff3 100644 --- a/clutter/clutter-alpha.h +++ b/clutter/clutter-alpha.h @@ -57,21 +57,21 @@ G_BEGIN_DECLS (G_TYPE_INSTANCE_GET_CLASS ((obj), \ CLUTTER_TYPE_ALPHA, ClutterAlphaClass)) -typedef struct _ClutterAlpha ClutterAlpha; -typedef struct _ClutterAlphaClass ClutterAlphaClass; -typedef struct ClutterAlphaPrivate ClutterAlphaPrivate; +typedef struct _ClutterAlpha ClutterAlpha; +typedef struct _ClutterAlphaClass ClutterAlphaClass; +typedef struct _ClutterAlphaPrivate ClutterAlphaPrivate; typedef guint32 (*ClutterAlphaFunc) (ClutterAlpha *alpha); struct _ClutterAlpha { - GObject parent; + GInitiallyUnowned parent; ClutterAlphaPrivate *priv; }; struct _ClutterAlphaClass { - GObjectClass parent_class; + GInitiallyUnownedClass parent_class; void (*_clutter_alpha_1) (void); void (*_clutter_alpha_2) (void); diff --git a/clutter/clutter-behaviour.c b/clutter/clutter-behaviour.c index dc93621..a0f6c9e 100644 --- a/clutter/clutter-behaviour.c +++ b/clutter/clutter-behaviour.c @@ -34,13 +34,16 @@ #include "clutter-actor.h" #include "clutter-behaviour.h" -G_DEFINE_TYPE (ClutterBehaviour, clutter_behaviour, G_TYPE_OBJECT); +G_DEFINE_ABSTRACT_TYPE (ClutterBehaviour, + clutter_behaviour, + G_TYPE_OBJECT); -struct ClutterBehaviourPrivate +struct _ClutterBehaviourPrivate { ClutterAlpha *alpha; - guint notify_id; - GSList *actors; + + guint notify_id; + GSList *actors; }; enum @@ -60,39 +63,23 @@ enum { ClutterBehaviourPrivate)) static void -_clutter_behaviour_dispose (GObject *object) +clutter_behaviour_finalize (GObject *object) { - ClutterBehaviour *self = CLUTTER_BEHAVIOUR(object); - - if (self->priv) - { - /* FIXME: remove all actors */ - - clutter_behaviour_set_alpha (self, NULL); - } + ClutterBehaviour *self = CLUTTER_BEHAVIOUR (object); - G_OBJECT_CLASS (clutter_behaviour_parent_class)->dispose (object); -} - -static void -_clutter_behaviour_finalize (GObject *object) -{ - ClutterBehaviour *self = CLUTTER_BEHAVIOUR(object); - - if (self->priv) - { - g_free(self->priv); - self->priv = NULL; - } + clutter_behaviour_set_alpha (self, NULL); + + g_slist_foreach (self->priv->actors, (GFunc) g_object_unref, NULL); + g_slist_free (self->priv->actors); G_OBJECT_CLASS (clutter_behaviour_parent_class)->finalize (object); } static void -_clutter_behaviour_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +clutter_behaviour_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { ClutterBehaviour *behaviour; @@ -110,10 +97,10 @@ _clutter_behaviour_set_property (GObject *object, } static void -_clutter_behaviour_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +clutter_behaviour_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { ClutterBehaviour *behaviour; ClutterBehaviourPrivate *priv; @@ -136,24 +123,22 @@ _clutter_behaviour_get_property (GObject *object, static void clutter_behaviour_class_init (ClutterBehaviourClass *klass) { - GObjectClass *object_class; - - object_class = (GObjectClass*) klass; - - object_class->finalize = _clutter_behaviour_finalize; - object_class->dispose = _clutter_behaviour_dispose; - object_class->set_property = _clutter_behaviour_set_property; - object_class->get_property = _clutter_behaviour_get_property; - - g_object_class_install_property - (object_class, PROP_ALPHA, - g_param_spec_object ("alpha", - "Alpha", - "Alpha Object to drive the behaviour", - CLUTTER_TYPE_ALPHA, - G_PARAM_CONSTRUCT | G_PARAM_READWRITE)); - - g_type_class_add_private (object_class, sizeof (ClutterBehaviourPrivate)); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = clutter_behaviour_finalize; + object_class->set_property = clutter_behaviour_set_property; + object_class->get_property = clutter_behaviour_get_property; + + g_object_class_install_property (object_class, + PROP_ALPHA, + g_param_spec_object ("alpha", + "Alpha", + "Alpha Object to drive the behaviour", + CLUTTER_TYPE_ALPHA, + G_PARAM_CONSTRUCT | + G_PARAM_READWRITE)); + + g_type_class_add_private (klass, sizeof (ClutterBehaviourPrivate)); } static void @@ -165,48 +150,44 @@ clutter_behaviour_init (ClutterBehaviour *self) } -ClutterBehaviour* -clutter_behaviour_new (GObject *object, - const char *property) -{ - ClutterBehaviour *behave; - - behave = g_object_new (CLUTTER_TYPE_BEHAVIOUR, - "object", object, - "property", property, - NULL); - - return behave; -} - void -clutter_behaviour_apply (ClutterBehaviour *behave, ClutterActor *actor) +clutter_behaviour_apply (ClutterBehaviour *behave, + ClutterActor *actor) { - g_return_if_fail (actor != NULL); + g_return_if_fail (CLUTTER_IS_BEHAVIOUR (behave)); + g_return_if_fail (CLUTTER_IS_ACTOR (actor)); - if (g_slist_find (behave->priv->actors, (gconstpointer)actor)) - return; + if (g_slist_find (behave->priv->actors, actor)) + { + g_warning ("The behaviour of type %s already applies " + "to the actor of type %s", + g_type_name (G_OBJECT_TYPE (behave)), + g_type_name (G_OBJECT_TYPE (actor))); + return; + } g_object_ref (actor); - behave->priv->actors = g_slist_append (behave->priv->actors, actor); + behave->priv->actors = g_slist_prepend (behave->priv->actors, actor); } void -clutter_behaviour_remove (ClutterBehaviour *behave, ClutterActor *actor) +clutter_behaviour_remove (ClutterBehaviour *behave, + ClutterActor *actor) { - g_return_if_fail (actor != NULL); + g_return_if_fail (CLUTTER_IS_BEHAVIOUR (behave)); + g_return_if_fail (CLUTTER_IS_ACTOR (actor)); - if (g_slist_find (behave->priv->actors, (gconstpointer)actor)) + if (!g_slist_find (behave->priv->actors, actor)) { - g_object_unref (actor); - behave->priv->actors = g_slist_remove (behave->priv->actors, actor); + g_warning ("The behaviour of type %s does not apply " + "to the actor of type %s", + g_type_name (G_OBJECT_TYPE (behave)), + g_type_name (G_OBJECT_TYPE (actor))); + return; } -} - -void -clutter_behaviour_remove_all (ClutterBehaviour *behave) -{ - /* tofix */ + + g_object_unref (actor); + behave->priv->actors = g_slist_remove (behave->priv->actors, actor); } void @@ -214,12 +195,17 @@ clutter_behaviour_actors_foreach (ClutterBehaviour *behave, GFunc func, gpointer userdata) { + g_return_if_fail (CLUTTER_IS_BEHAVIOUR (behave)); + g_return_if_fail (func != NULL); + g_slist_foreach (behave->priv->actors, func, userdata); } ClutterAlpha* clutter_behaviour_get_alpha (ClutterBehaviour *behave) { + g_return_val_if_fail (CLUTTER_IS_BEHAVIOUR (behave), NULL); + return behave->priv->alpha; } @@ -240,27 +226,32 @@ void clutter_behaviour_set_alpha (ClutterBehaviour *behave, ClutterAlpha *alpha) { - if (behave->priv->notify_id) + ClutterBehaviourPrivate *priv; + + g_return_if_fail (CLUTTER_IS_BEHAVIOUR (behave)); + g_return_if_fail (CLUTTER_IS_ALPHA (alpha)); + + priv = behave->priv; + + if (priv->notify_id) { - g_signal_handler_disconnect (behave->priv->alpha, - behave->priv->notify_id); - behave->priv->notify_id = 0; + g_signal_handler_disconnect (priv->alpha, priv->notify_id); + priv->notify_id = 0; } - if (behave->priv->alpha) + if (priv->alpha) { - g_object_unref (behave->priv->alpha); - behave->priv->alpha = NULL; + g_object_unref (priv->alpha); + priv->alpha = NULL; } if (alpha) { - behave->priv->alpha = alpha; - g_object_ref (behave->priv->alpha); + priv->alpha = alpha; + g_object_ref_sink (priv->alpha); - behave->priv->notify_id = g_signal_connect (behave->priv->alpha, - "notify::alpha", - G_CALLBACK(notify_cb), - behave); + priv->notify_id = g_signal_connect (priv->alpha, "notify::alpha", + G_CALLBACK(notify_cb), + behave); } } diff --git a/clutter/clutter-behaviour.h b/clutter/clutter-behaviour.h index d83cbc1..d27bb87 100644 --- a/clutter/clutter-behaviour.h +++ b/clutter/clutter-behaviour.h @@ -28,9 +28,9 @@ G_BEGIN_DECLS (G_TYPE_INSTANCE_GET_CLASS ((obj), \ CLUTTER_TYPE_BEHAVIOUR, ClutterBehaviourClass)) -typedef struct _ClutterBehaviour ClutterBehaviour; -typedef struct ClutterBehaviourPrivate ClutterBehaviourPrivate; -typedef struct _ClutterBehaviourClass ClutterBehaviourClass; +typedef struct _ClutterBehaviour ClutterBehaviour; +typedef struct _ClutterBehaviourPrivate ClutterBehaviourPrivate; +typedef struct _ClutterBehaviourClass ClutterBehaviourClass; struct _ClutterBehaviour { @@ -47,10 +47,6 @@ struct _ClutterBehaviourClass GType clutter_behaviour_get_type (void); -ClutterBehaviour* -clutter_behaviour_new (GObject *object, - const char *property); - void clutter_behaviour_apply (ClutterBehaviour *behave, ClutterActor *actor); @@ -58,9 +54,6 @@ void clutter_behaviour_remove (ClutterBehaviour *behave, ClutterActor *actor); void -clutter_behaviour_remove_all (ClutterBehaviour *behave); - -void clutter_behaviour_actors_foreach (ClutterBehaviour *behave, GFunc func, gpointer userdata); diff --git a/clutter/clutter-behaviours.c b/clutter/clutter-behaviours.c index 47a4973..be82cbf 100644 --- a/clutter/clutter-behaviours.c +++ b/clutter/clutter-behaviours.c @@ -78,7 +78,7 @@ G_DEFINE_TYPE (ClutterBehaviourPath, \ clutter_behaviour_path, \ CLUTTER_TYPE_BEHAVIOUR); -struct ClutterBehaviourPathPrivate +struct _ClutterBehaviourPathPrivate { GSList *knots; }; diff --git a/clutter/clutter-behaviours.h b/clutter/clutter-behaviours.h index 3eda56e..f7d2857 100644 --- a/clutter/clutter-behaviours.h +++ b/clutter/clutter-behaviours.h @@ -7,6 +7,8 @@ G_BEGIN_DECLS +#define CLUTTER_TYPE_KNOT (clutter_knot_get_type ()) + typedef struct _ClutterKnot ClutterKnot; struct _ClutterKnot @@ -15,7 +17,9 @@ struct _ClutterKnot /* FIXME: optionally include bezier control points also ? */ }; -#define CLUTTER_TYPE_BEHAVIOUR_PATH clutter_behaviour_path_get_type() +GType clutter_knot_get_type (void) G_GNUC_CONST; + +#define CLUTTER_TYPE_BEHAVIOUR_PATH (clutter_behaviour_path_get_type ()) #define CLUTTER_BEHAVIOUR_PATH(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ @@ -37,9 +41,9 @@ struct _ClutterKnot (G_TYPE_INSTANCE_GET_CLASS ((obj), \ CLUTTER_TYPE_BEHAVIOUR_PATH, ClutterBehaviourPathClass)) -typedef struct _ClutterBehaviourPath ClutterBehaviourPath; -typedef struct ClutterBehaviourPathPrivate ClutterBehaviourPathPrivate; -typedef struct _ClutterBehaviourPathClass ClutterBehaviourPathClass; +typedef struct _ClutterBehaviourPath ClutterBehaviourPath; +typedef struct _ClutterBehaviourPathPrivate ClutterBehaviourPathPrivate; +typedef struct _ClutterBehaviourPathClass ClutterBehaviourPathClass; struct _ClutterBehaviourPath { diff --git a/doc/reference/tmpl/clutter-label.sgml b/doc/reference/tmpl/clutter-label.sgml index 9e2fb61..f519286 100644 --- a/doc/reference/tmpl/clutter-label.sgml +++ b/doc/reference/tmpl/clutter-label.sgml @@ -23,11 +23,26 @@ ClutterLabel + + + + + + + + + + + + + + + @@ -38,6 +53,21 @@ ClutterLabel + + + + + + + + + + + + + + + @@ -110,23 +140,3 @@ ClutterLabel @color: - - - - - -@label: -@width: -@height: - - - - - - - -@label: -@width: -@height: - - diff --git a/doc/reference/tmpl/clutter-main.sgml b/doc/reference/tmpl/clutter-main.sgml index dee1097..dc7bf7e 100644 --- a/doc/reference/tmpl/clutter-main.sgml +++ b/doc/reference/tmpl/clutter-main.sgml @@ -31,6 +31,7 @@ clutter-main @x: @a...: +@a...: @a...: