[clutter/wip/g-property: 2/2] gproperty: Port ClutterBox to GProperty



commit 723a084e049ef1111c056d3060310983e03c39ff
Author: Emmanuele Bassi <ebassi linux intel com>
Date:   Tue Jul 5 17:43:34 2011 +0100

    gproperty: Port ClutterBox to GProperty

 clutter/clutter-box.c |  239 ++++++++++++++++++++-----------------------------
 1 files changed, 99 insertions(+), 140 deletions(-)
---
diff --git a/clutter/clutter-box.c b/clutter/clutter-box.c
index 0d922b1..0574017 100644
--- a/clutter/clutter-box.c
+++ b/clutter/clutter-box.c
@@ -94,7 +94,7 @@ struct _ClutterBoxPrivate
   guint changed_id;
 
   ClutterColor color;
-  guint color_set : 1;
+  gboolean color_set;
 };
 
 enum
@@ -453,56 +453,41 @@ clutter_box_dispose (GObject *gobject)
   G_OBJECT_CLASS (clutter_box_parent_class)->dispose (gobject);
 }
 
-static void
-clutter_box_set_property (GObject      *gobject,
-                          guint         prop_id,
-                          const GValue *value,
-                          GParamSpec   *pspec)
+static gboolean
+clutter_box_set_layout_manager_internal (gpointer self_,
+                                         gpointer value_)
 {
-  ClutterBox *self = CLUTTER_BOX (gobject);
+  ClutterBox *self = self_;
+  ClutterLayoutManager *value = value_;
 
-  switch (prop_id)
-    {
-    case PROP_LAYOUT_MANAGER:
-      set_layout_manager (self, g_value_get_object (value));
-      break;
+  if (self->priv->manager == value)
+    return FALSE;
 
-    case PROP_COLOR:
-      clutter_box_set_color (self, clutter_value_get_color (value));
-      break;
+  set_layout_manager (self, value);
 
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
-      break;
-    }
+  return TRUE;
 }
 
-static void
-clutter_box_get_property (GObject    *gobject,
-                          guint       prop_id,
-                          GValue     *value,
-                          GParamSpec *pspec)
+static gboolean
+clutter_box_set_color_internal (gpointer self_,
+                                gpointer value_)
 {
-  ClutterBoxPrivate *priv = CLUTTER_BOX (gobject)->priv;
-
-  switch (prop_id)
-    {
-    case PROP_LAYOUT_MANAGER:
-      g_value_set_object (value, priv->manager);
-      break;
-
-    case PROP_COLOR:
-      clutter_value_set_color (value, &priv->color);
-      break;
+  ClutterBox *self = self_;
+  ClutterColor *value = value_;
+  ClutterBoxPrivate *priv = self->priv;
 
-    case PROP_COLOR_SET:
-      g_value_set_boolean (value, priv->color_set);
-      break;
+  if (clutter_color_equal (&priv->color, value))
+    return FALSE;
 
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
-      break;
+  if (value != NULL)
+    {
+      priv->color = *value;
+      priv->color_set = TRUE;
     }
+  else
+    priv->color_set = FALSE;
+
+  return TRUE;
 }
 
 static void
@@ -510,7 +495,6 @@ clutter_box_class_init (ClutterBoxClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
-  GParamSpec *pspec;
 
   g_type_class_add_private (klass, sizeof (ClutterBoxPrivate));
 
@@ -522,8 +506,6 @@ clutter_box_class_init (ClutterBoxClass *klass)
   actor_class->pick = clutter_box_real_pick;
   actor_class->destroy = clutter_box_destroy;
 
-  gobject_class->set_property = clutter_box_set_property;
-  gobject_class->get_property = clutter_box_get_property;
   gobject_class->dispose = clutter_box_dispose;
 
   /**
@@ -533,16 +515,16 @@ clutter_box_class_init (ClutterBoxClass *klass)
    *
    * Since: 1.2
    */
-  pspec = g_param_spec_object ("layout-manager",
-                               P_("Layout Manager"),
-                               P_("The layout manager used by the box"),
-                               CLUTTER_TYPE_LAYOUT_MANAGER,
-                               CLUTTER_PARAM_READWRITE |
-                               G_PARAM_CONSTRUCT);
-  obj_props[PROP_LAYOUT_MANAGER] = pspec;
-  g_object_class_install_property (gobject_class,
-                                   PROP_LAYOUT_MANAGER,
-                                   pspec);
+  obj_props[PROP_LAYOUT_MANAGER] =
+    g_object_property_new ("layout-manager", G_PROPERTY_READWRITE,
+                           G_STRUCT_OFFSET (ClutterBoxPrivate, manager),
+                           clutter_box_set_layout_manager_internal,
+                           NULL);
+  g_property_set_prerequisite (G_PROPERTY (obj_props[PROP_LAYOUT_MANAGER]),
+                               CLUTTER_TYPE_LAYOUT_MANAGER);
+  g_property_describe (G_PROPERTY (obj_props[PROP_LAYOUT_MANAGER]),
+                       P_("Layout Manager"),
+                       P_("The layout manager used by the box"));
 
   /**
    * ClutterBox:color:
@@ -553,13 +535,18 @@ clutter_box_class_init (ClutterBoxClass *klass)
    *
    * Since: 1.2
    */
-  pspec = clutter_param_spec_color ("color",
-                                    P_("Color"),
-                                    P_("The background color of the box"),
-                                    &default_box_color,
-                                    CLUTTER_PARAM_READWRITE);
-  obj_props[PROP_COLOR] = pspec;
-  g_object_class_install_property (gobject_class, PROP_COLOR, pspec);
+  obj_props[PROP_COLOR] =
+    g_boxed_property_new ("color", G_PROPERTY_READWRITE,
+                          G_STRUCT_OFFSET (ClutterBoxPrivate, color),
+                          clutter_box_set_color_internal,
+                          NULL);
+  g_property_set_prerequisite (G_PROPERTY (obj_props[PROP_COLOR]),
+                               CLUTTER_TYPE_COLOR);
+  g_property_set_default (G_PROPERTY (obj_props[PROP_COLOR]),
+                          &default_box_color);
+  g_property_describe (G_PROPERTY (obj_props[PROP_COLOR]),
+                       P_("Color"),
+                       P_("The background color of the box"));
 
   /**
    * ClutterBox:color-set:
@@ -568,13 +555,16 @@ clutter_box_class_init (ClutterBoxClass *klass)
    *
    * Since: 1.2
    */
-  pspec = g_param_spec_boolean ("color-set",
-                                P_("Color Set"),
-                                P_("Whether the background color is set"),
-                                FALSE,
-                                CLUTTER_PARAM_READWRITE);
-  obj_props[PROP_COLOR_SET] = pspec;
-  g_object_class_install_property (gobject_class, PROP_COLOR_SET, pspec);
+  obj_props[PROP_COLOR_SET] =
+    g_boolean_property_new ("color-set", G_PROPERTY_READABLE,
+                            G_STRUCT_OFFSET (ClutterBoxPrivate, color_set),
+                            NULL,
+                            NULL);
+  g_property_describe (G_PROPERTY (obj_props[PROP_COLOR_SET]),
+                       P_("Color Set"),
+                       P_("Whether the background color is set"));
+
+  g_object_class_install_properties (gobject_class, PROP_LAST, obj_props);
 }
 
 static void
@@ -607,6 +597,19 @@ clutter_box_new (ClutterLayoutManager *manager)
 }
 
 /**
+ * clutter_box_get_layout_manager:
+ * @box: a #ClutterBox
+ *
+ * Retrieves the #ClutterLayoutManager instance used by @box
+ *
+ * Return value: (transfer none): a #ClutterLayoutManager. The returned
+ *   #ClutterLayoutManager is owned by the #ClutterBox and it should not
+ *   be unreferenced
+ *
+ * Since: 1.2
+ */
+
+/**
  * clutter_box_set_layout_manager:
  * @box: a #ClutterBox
  * @manager: a #ClutterLayoutManager
@@ -618,34 +621,45 @@ clutter_box_new (ClutterLayoutManager *manager)
  *
  * Since: 1.2
  */
-void
-clutter_box_set_layout_manager (ClutterBox           *box,
-                                ClutterLayoutManager *manager)
-{
-  g_return_if_fail (CLUTTER_IS_BOX (box));
-  g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));
+G_DEFINE_PROPERTY_GET_SET (ClutterBox, clutter_box, ClutterLayoutManager*, layout_manager);
 
-  set_layout_manager (box, manager);
-}
+/**
+ * clutter_box_set_color:
+ * @box: a #ClutterBox
+ * @color: (allow-none): the background color, or %NULL to unset
+ *
+ * Sets (or unsets) the background color for @box
+ *
+ * Since: 1.2
+ */
+G_DEFINE_PROPERTY_SET (ClutterBox, clutter_box, const ClutterColor*, color);
 
 /**
- * clutter_box_get_layout_manager:
+ * clutter_box_get_color:
  * @box: a #ClutterBox
+ * @color: (out caller-allocates): return location for a #ClutterColor
  *
- * Retrieves the #ClutterLayoutManager instance used by @box
+ * Retrieves the background color of @box
  *
- * Return value: (transfer none): a #ClutterLayoutManager. The returned
- *   #ClutterLayoutManager is owned by the #ClutterBox and it should not
- *   be unreferenced
+ * If the #ClutterBox:color-set property is set to %FALSE the
+ * returned #ClutterColor is undefined
  *
  * Since: 1.2
  */
-ClutterLayoutManager *
-clutter_box_get_layout_manager (ClutterBox *box)
+void
+clutter_box_get_color (ClutterBox   *box,
+                       ClutterColor *color)
 {
-  g_return_val_if_fail (CLUTTER_IS_BOX (box), NULL);
+  ClutterColor *res;
+
+  g_return_if_fail (CLUTTER_IS_BOX (box));
+  g_return_if_fail (color != NULL);
+
+  g_property_get (G_PROPERTY (obj_props), box, &res);
+
+  *color = *res;
 
-  return box->priv->manager;
+  clutter_color_free (res);
 }
 
 /**
@@ -984,58 +998,3 @@ clutter_box_pack_at (ClutterBox   *box,
   clutter_box_set_property_valist (box, actor, first_property, var_args);
   va_end (var_args);
 }
-
-/**
- * clutter_box_set_color:
- * @box: a #ClutterBox
- * @color: (allow-none): the background color, or %NULL to unset
- *
- * Sets (or unsets) the background color for @box
- *
- * Since: 1.2
- */
-void
-clutter_box_set_color (ClutterBox         *box,
-                       const ClutterColor *color)
-{
-  ClutterBoxPrivate *priv;
-
-  g_return_if_fail (CLUTTER_IS_BOX (box));
-
-  priv = box->priv;
-
-  if (color)
-    {
-      priv->color = *color;
-      priv->color_set = TRUE;
-    }
-  else
-    priv->color_set = FALSE;
-
-  clutter_actor_queue_redraw (CLUTTER_ACTOR (box));
-
-  g_object_notify_by_pspec (G_OBJECT (box), obj_props[PROP_COLOR_SET]);
-  g_object_notify_by_pspec (G_OBJECT (box), obj_props[PROP_COLOR]);
-}
-
-/**
- * clutter_box_get_color:
- * @box: a #ClutterBox
- * @color: (out caller-allocates): return location for a #ClutterColor
- *
- * Retrieves the background color of @box
- *
- * If the #ClutterBox:color-set property is set to %FALSE the
- * returned #ClutterColor is undefined
- *
- * Since: 1.2
- */
-void
-clutter_box_get_color (ClutterBox   *box,
-                       ClutterColor *color)
-{
-  g_return_if_fail (CLUTTER_IS_BOX (box));
-  g_return_if_fail (color != NULL);
-
-  *color = box->priv->color;
-}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]