2006-11-16 Emmanuele Bassi <ebassi@openedhand.com>
authorEmmanuele Bassi <ebassi@openedhand.com>
Tue, 14 Nov 2006 14:12:56 +0000 (14:12 +0000)
committerEmmanuele Bassi <ebassi@openedhand.com>
Tue, 14 Nov 2006 14:12:56 +0000 (14:12 +0000)
* 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.

ChangeLog
clutter/clutter-alpha.c
clutter/clutter-alpha.h
clutter/clutter-behaviour.c
clutter/clutter-behaviour.h
clutter/clutter-behaviours.c
clutter/clutter-behaviours.h
doc/reference/tmpl/clutter-label.sgml
doc/reference/tmpl/clutter-main.sgml

index c59992e..6cd69cf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2006-11-16  Emmanuele Bassi  <ebassi@openedhand.com>
+
+       * 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  <mallum@openedhand.com>
 
        * clutter/clutter-alpha.h:
index df628d8..61ebbbe 100644 (file)
@@ -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,
index 142aed5..6db4ff3 100644 (file)
@@ -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);
index dc93621..a0f6c9e 100644 (file)
 #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);
     }
 }
index d83cbc1..d27bb87 100644 (file)
@@ -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);
index 47a4973..be82cbf 100644 (file)
@@ -78,7 +78,7 @@ G_DEFINE_TYPE (ClutterBehaviourPath,   \
                clutter_behaviour_path, \
               CLUTTER_TYPE_BEHAVIOUR);
 
-struct ClutterBehaviourPathPrivate
+struct _ClutterBehaviourPathPrivate
 {
   GSList *knots;
 };
index 3eda56e..f7d2857 100644 (file)
@@ -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
 {
index 9e2fb61..f519286 100644 (file)
@@ -23,11 +23,26 @@ ClutterLabel
 </para>
 
 
+<!-- ##### ARG ClutterLabel:alignment ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG ClutterLabel:attributes ##### -->
+<para>
+
+</para>
+
 <!-- ##### ARG ClutterLabel:color ##### -->
 <para>
 
 </para>
 
+<!-- ##### ARG ClutterLabel:ellipsize ##### -->
+<para>
+
+</para>
+
 <!-- ##### ARG ClutterLabel:font-name ##### -->
 <para>
 
@@ -38,6 +53,21 @@ ClutterLabel
 
 </para>
 
+<!-- ##### ARG ClutterLabel:use-markup ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG ClutterLabel:wrap ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG ClutterLabel:wrap-mode ##### -->
+<para>
+
+</para>
+
 <!-- ##### FUNCTION clutter_label_new ##### -->
 <para>
 
@@ -110,23 +140,3 @@ ClutterLabel
 @color: 
 
 
-<!-- ##### FUNCTION clutter_label_set_text_extents ##### -->
-<para>
-
-</para>
-
-@label: 
-@width: 
-@height: 
-
-
-<!-- ##### FUNCTION clutter_label_get_text_extents ##### -->
-<para>
-
-</para>
-
-@label: 
-@width: 
-@height: 
-
-
index dee1097..dc7bf7e 100644 (file)
@@ -31,6 +31,7 @@ clutter-main
 
 @x: 
 @a...:
+@a...:
 @a...: