[gtk+/treeview-refactor] Changed all the flush apis on GtkCellAreaContext for a single "reset" api.



commit 5df7dab3cfdafad8656366edf4848329035b109d
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sat Nov 27 16:05:14 2010 +0900

    Changed all the flush apis on GtkCellAreaContext for a single "reset" api.

 gtk/gtkcellareabox.c        |   14 +++---
 gtk/gtkcellareaboxcontext.c |   88 +++++++++++++++--------------------------
 gtk/gtkcellareacontext.c    |   93 +++++++++++--------------------------------
 gtk/gtkcellareacontext.h    |   86 +++++++++++++++------------------------
 tests/cellareascaffold.c    |   16 ++++----
 5 files changed, 103 insertions(+), 194 deletions(-)
---
diff --git a/gtk/gtkcellareabox.c b/gtk/gtkcellareabox.c
index 42bb934..c29e260 100644
--- a/gtk/gtkcellareabox.c
+++ b/gtk/gtkcellareabox.c
@@ -160,7 +160,7 @@ static GList         *list_consecutive_cells (GtkCellAreaBox        *box);
 static gint           count_expand_groups    (GtkCellAreaBox        *box);
 static void           context_weak_notify    (GtkCellAreaBox        *box,
 					      GtkCellAreaBoxContext *dead_context);
-static void           flush_contexts         (GtkCellAreaBox        *box);
+static void           reset_contexts         (GtkCellAreaBox        *box);
 static void           init_context_groups    (GtkCellAreaBox        *box);
 static void           init_context_group     (GtkCellAreaBox        *box,
 					      GtkCellAreaBoxContext *context);
@@ -526,7 +526,7 @@ init_context_group (GtkCellAreaBox        *box,
       expand_groups[i] = (group->expand_cells > 0);
     }
 
-  /* This call implies flushing the request info */
+  /* This call implies reseting the request info */
   gtk_cell_area_box_init_groups (context, priv->groups->len, expand_groups);
   g_free (expand_groups);
 }
@@ -549,19 +549,19 @@ init_context_groups (GtkCellAreaBox *box)
 }
 
 static void
-flush_contexts (GtkCellAreaBox *box)
+reset_contexts (GtkCellAreaBox *box)
 {
   GtkCellAreaBoxPrivate *priv = box->priv;
   GSList                *l;
 
   /* When the box layout changes, contexts need to
-   * be flushed and sizes for the box get requested again
+   * be reset and sizes for the box get requested again
    */
   for (l = priv->contexts; l; l = l->next)
     {
       GtkCellAreaContext *context = l->data;
 
-      gtk_cell_area_context_flush (context);
+      gtk_cell_area_context_reset (context);
     }
 }
 
@@ -858,7 +858,7 @@ gtk_cell_area_box_set_property (GObject       *object,
       box->priv->orientation = g_value_get_enum (value);
 
       /* Notify that size needs to be requested again */
-      flush_contexts (box);
+      reset_contexts (box);
       break;
     case PROP_SPACING:
       gtk_cell_area_box_set_spacing (box, g_value_get_int (value));
@@ -2022,6 +2022,6 @@ gtk_cell_area_box_set_spacing (GtkCellAreaBox  *box,
       g_object_notify (G_OBJECT (box), "spacing");
 
       /* Notify that size needs to be requested again */
-      flush_contexts (box);
+      reset_contexts (box);
     }
 }
diff --git a/gtk/gtkcellareaboxcontext.c b/gtk/gtkcellareaboxcontext.c
index b49ec72..19fd36e 100644
--- a/gtk/gtkcellareaboxcontext.c
+++ b/gtk/gtkcellareaboxcontext.c
@@ -28,26 +28,25 @@
 #include "gtkorientable.h"
 
 /* GObjectClass */
-static void      gtk_cell_area_box_context_finalize                         (GObject            *object);
+static void      gtk_cell_area_box_context_finalize              (GObject               *object);
 
 /* GtkCellAreaContextClass */
-static void      gtk_cell_area_box_context_flush_preferred_width            (GtkCellAreaContext *context);
-static void      gtk_cell_area_box_context_flush_preferred_height           (GtkCellAreaContext *context);
-static void      gtk_cell_area_box_context_flush_allocation                 (GtkCellAreaContext *context);
-static void      gtk_cell_area_box_context_sum_preferred_width              (GtkCellAreaContext *context);
-static void      gtk_cell_area_box_context_sum_preferred_height             (GtkCellAreaContext *context);
-static void      gtk_cell_area_box_context_allocate                         (GtkCellAreaContext *context,
-									     gint                width,
-									     gint                height);
-
-static void      free_cache_array    (GArray                *array);
-static GArray   *group_array_new     (GtkCellAreaBoxContext *context);
-static GArray   *get_array           (GtkCellAreaBoxContext *context,
-				      GtkOrientation         orientation,
-				      gint                   for_size);
-static gboolean  group_expands       (GtkCellAreaBoxContext *context,
-				      gint                   group_idx);
-static gint      count_expand_groups (GtkCellAreaBoxContext *context);
+static void      gtk_cell_area_box_context_reset                 (GtkCellAreaContext    *context);
+static void      gtk_cell_area_box_context_sum_preferred_width   (GtkCellAreaContext    *context);
+static void      gtk_cell_area_box_context_sum_preferred_height  (GtkCellAreaContext    *context);
+static void      gtk_cell_area_box_context_allocate              (GtkCellAreaContext    *context,
+								  gint                   width,
+								  gint                   height);
+
+/* Internal functions */
+static void      free_cache_array                                (GArray                *array);
+static GArray   *group_array_new                                 (GtkCellAreaBoxContext *context);
+static GArray   *get_array                                       (GtkCellAreaBoxContext *context,
+								  GtkOrientation         orientation,
+								  gint                   for_size);
+static gboolean  group_expands                                   (GtkCellAreaBoxContext *context,
+								  gint                   group_idx);
+static gint      count_expand_groups                             (GtkCellAreaBoxContext *context);
 
 
 /* CachedSize management */
@@ -191,11 +190,9 @@ gtk_cell_area_box_context_class_init (GtkCellAreaBoxContextClass *class)
   /* GObjectClass */
   object_class->finalize = gtk_cell_area_box_context_finalize;
 
-  context_class->flush_preferred_width   = gtk_cell_area_box_context_flush_preferred_width;
-  context_class->flush_preferred_height  = gtk_cell_area_box_context_flush_preferred_height;
-  context_class->flush_allocation        = gtk_cell_area_box_context_flush_allocation;
-  context_class->sum_preferred_width     = gtk_cell_area_box_context_sum_preferred_width;
-  context_class->sum_preferred_height    = gtk_cell_area_box_context_sum_preferred_height;
+  context_class->reset                = gtk_cell_area_box_context_reset;
+  context_class->sum_preferred_width  = gtk_cell_area_box_context_sum_preferred_width;
+  context_class->sum_preferred_height = gtk_cell_area_box_context_sum_preferred_height;
 
   context_class->allocate  = gtk_cell_area_box_context_allocate;
 
@@ -226,58 +223,37 @@ gtk_cell_area_box_context_finalize (GObject *object)
  *                    GtkCellAreaContextClass                   *
  *************************************************************/
 static void
-gtk_cell_area_box_context_flush_preferred_width (GtkCellAreaContext *context)
+gtk_cell_area_box_context_reset (GtkCellAreaContext *context)
 {
   GtkCellAreaBoxContext        *box_context = GTK_CELL_AREA_BOX_CONTEXT (context);
   GtkCellAreaBoxContextPrivate *priv        = box_context->priv;
+  CachedSize                   *size;
   gint                          i;
 
   for (i = 0; i < priv->base_widths->len; i++)
     {
-      CachedSize *size = &g_array_index (priv->base_widths, CachedSize, i);
+      size = &g_array_index (priv->base_widths, CachedSize, i);
 
       size->min_size = 0;
       size->nat_size = 0;
-    }
-
-  /* Flush context widths as well */
-  g_hash_table_remove_all (priv->widths);
-
-  GTK_CELL_AREA_CONTEXT_CLASS
-    (gtk_cell_area_box_context_parent_class)->flush_preferred_width (context);
-}
-
-static void
-gtk_cell_area_box_context_flush_preferred_height (GtkCellAreaContext *context)
-{
-  GtkCellAreaBoxContext        *box_context = GTK_CELL_AREA_BOX_CONTEXT (context);
-  GtkCellAreaBoxContextPrivate *priv        = box_context->priv;
-  gint                          i;
 
-  for (i = 0; i < priv->base_heights->len; i++)
-    {
-      CachedSize *size = &g_array_index (priv->base_heights, CachedSize, i);
+      size = &g_array_index (priv->base_heights, CachedSize, i);
 
       size->min_size = 0;
       size->nat_size = 0;
     }
 
-  /* Flush context heights as well */
+  /* Reset context sizes as well */
+  g_hash_table_remove_all (priv->widths);
   g_hash_table_remove_all (priv->heights);
 
-  GTK_CELL_AREA_CONTEXT_CLASS
-    (gtk_cell_area_box_context_parent_class)->flush_preferred_height (context);
-}
-
-static void
-gtk_cell_area_box_context_flush_allocation (GtkCellAreaContext *context)
-{
-  GtkCellAreaBoxContext        *box_context = GTK_CELL_AREA_BOX_CONTEXT (context);
-  GtkCellAreaBoxContextPrivate *priv        = box_context->priv;
-
+  /* Clear the allocation */
   g_free (priv->orientation_allocs);
   priv->orientation_allocs   = NULL;
   priv->n_orientation_allocs = 0;
+
+  GTK_CELL_AREA_CONTEXT_CLASS
+    (gtk_cell_area_box_context_parent_class)->reset (context);
 }
 
 static void
@@ -522,10 +498,10 @@ gtk_cell_area_box_init_groups (GtkCellAreaBoxContext *box_context,
   g_return_if_fail (GTK_IS_CELL_AREA_BOX_CONTEXT (box_context));
   g_return_if_fail (n_groups == 0 || expand_groups != NULL);
 
-  /* When the group dimensions change, all info must be flushed 
+  /* When the group dimensions change, all info must be reset 
    * Note this already clears the min/nat values on the CachedSizes
    */
-  gtk_cell_area_context_flush (GTK_CELL_AREA_CONTEXT (box_context));
+  gtk_cell_area_context_reset (GTK_CELL_AREA_CONTEXT (box_context));
 
   priv = box_context->priv;
   g_array_set_size (priv->base_widths,  n_groups);
diff --git a/gtk/gtkcellareacontext.c b/gtk/gtkcellareacontext.c
index 5a3ee8b..0cf9357 100644
--- a/gtk/gtkcellareacontext.c
+++ b/gtk/gtkcellareacontext.c
@@ -28,23 +28,21 @@
 #include "gtkprivate.h"
 
 /* GObjectClass */
-static void      gtk_cell_area_context_dispose                        (GObject            *object);
-static void      gtk_cell_area_context_get_property                   (GObject            *object,
-								       guint               prop_id,
-								       GValue             *value,
-								       GParamSpec         *pspec);
-static void      gtk_cell_area_context_set_property                   (GObject            *object,
-								       guint               prop_id,
-								       const GValue       *value,
-								       GParamSpec         *pspec);
+static void      gtk_cell_area_context_dispose         (GObject            *object);
+static void      gtk_cell_area_context_get_property    (GObject            *object,
+							guint               prop_id,
+							GValue             *value,
+							GParamSpec         *pspec);
+static void      gtk_cell_area_context_set_property    (GObject            *object,
+							guint               prop_id,
+							const GValue       *value,
+							GParamSpec         *pspec);
 
 /* GtkCellAreaContextClass */
-static void      gtk_cell_area_context_real_flush_preferred_width            (GtkCellAreaContext *context);
-static void      gtk_cell_area_context_real_flush_preferred_height           (GtkCellAreaContext *context);
-static void      gtk_cell_area_context_real_flush_allocation                 (GtkCellAreaContext *context);
-static void      gtk_cell_area_context_real_allocate                         (GtkCellAreaContext *context,
-							 		      gint                width,
-									      gint                height);
+static void      gtk_cell_area_context_real_reset      (GtkCellAreaContext *context);
+static void      gtk_cell_area_context_real_allocate   (GtkCellAreaContext *context,
+							gint                width,
+							gint                height);
 
 struct _GtkCellAreaContextPrivate
 {
@@ -96,9 +94,7 @@ gtk_cell_area_context_class_init (GtkCellAreaContextClass *class)
   object_class->set_property = gtk_cell_area_context_set_property;
 
   /* GtkCellAreaContextClass */
-  class->flush_preferred_width   = gtk_cell_area_context_real_flush_preferred_width;
-  class->flush_preferred_height  = gtk_cell_area_context_real_flush_preferred_height;
-  class->flush_allocation        = gtk_cell_area_context_real_flush_allocation;
+  class->reset                   = gtk_cell_area_context_real_reset;
   class->sum_preferred_width     = NULL;
   class->sum_preferred_height    = NULL;
   class->allocate                = gtk_cell_area_context_real_allocate;
@@ -229,43 +225,26 @@ gtk_cell_area_context_get_property (GObject     *object,
  *                    GtkCellAreaContextClass                   *
  *************************************************************/
 static void
-gtk_cell_area_context_real_flush_preferred_width (GtkCellAreaContext *context)
+gtk_cell_area_context_real_reset (GtkCellAreaContext *context)
 {
   GtkCellAreaContextPrivate *priv = context->priv;
   
-  priv->min_width = -1;
-  priv->nat_width = -1;
+  priv->min_width    = -1;
+  priv->nat_width    = -1;
+  priv->min_height   = -1;
+  priv->nat_height   = -1;
+  priv->alloc_width  = 0;
+  priv->alloc_height = 0;
 
   g_object_freeze_notify (G_OBJECT (context));
   g_object_notify (G_OBJECT (context), "minimum-width");
   g_object_notify (G_OBJECT (context), "natural-width");
-  g_object_thaw_notify (G_OBJECT (context));
-}
-
-static void
-gtk_cell_area_context_real_flush_preferred_height (GtkCellAreaContext *context)
-{
-  GtkCellAreaContextPrivate *priv = context->priv;
-  
-  priv->min_height = -1;
-  priv->nat_height = -1;
-
-  g_object_freeze_notify (G_OBJECT (context));
   g_object_notify (G_OBJECT (context), "minimum-height");
   g_object_notify (G_OBJECT (context), "natural-height");
   g_object_thaw_notify (G_OBJECT (context));
 }
 
 static void
-gtk_cell_area_context_real_flush_allocation (GtkCellAreaContext *context)
-{
-  GtkCellAreaContextPrivate *priv = context->priv;
-
-  priv->alloc_width  = 0;
-  priv->alloc_height = 0;
-}
-
-static void
 gtk_cell_area_context_real_allocate (GtkCellAreaContext *context,
 				     gint                width,
 				     gint                height)
@@ -292,37 +271,11 @@ gtk_cell_area_context_get_area (GtkCellAreaContext *context)
 }
 
 void
-gtk_cell_area_context_flush (GtkCellAreaContext *context)
-{
-  g_return_if_fail (GTK_IS_CELL_AREA_CONTEXT (context));
-
-  gtk_cell_area_context_flush_preferred_width (context);
-  gtk_cell_area_context_flush_preferred_height (context);
-  gtk_cell_area_context_flush_allocation (context);
-}
-
-void
-gtk_cell_area_context_flush_preferred_width (GtkCellAreaContext *context)
-{
-  g_return_if_fail (GTK_IS_CELL_AREA_CONTEXT (context));
-
-  GTK_CELL_AREA_CONTEXT_GET_CLASS (context)->flush_preferred_width (context);
-}
-
-void
-gtk_cell_area_context_flush_preferred_height (GtkCellAreaContext *context)
-{
-  g_return_if_fail (GTK_IS_CELL_AREA_CONTEXT (context));
-
-  GTK_CELL_AREA_CONTEXT_GET_CLASS (context)->flush_preferred_height (context);
-}
-
-void
-gtk_cell_area_context_flush_allocation (GtkCellAreaContext *context)
+gtk_cell_area_context_reset (GtkCellAreaContext *context)
 {
   g_return_if_fail (GTK_IS_CELL_AREA_CONTEXT (context));
 
-  GTK_CELL_AREA_CONTEXT_GET_CLASS (context)->flush_allocation (context);
+  GTK_CELL_AREA_CONTEXT_GET_CLASS (context)->reset (context);
 }
 
 void
diff --git a/gtk/gtkcellareacontext.h b/gtk/gtkcellareacontext.h
index f9681e7..4c45293 100644
--- a/gtk/gtkcellareacontext.h
+++ b/gtk/gtkcellareacontext.h
@@ -53,22 +53,12 @@ struct _GtkCellAreaContextClass
 {
   GObjectClass parent_class;
 
-  /* Subclasses can use this to flush their alignments/allocations */
-  void    (* flush_preferred_width)              (GtkCellAreaContext *context);
-  void    (* flush_preferred_height)             (GtkCellAreaContext *context);
-  void    (* flush_allocation)                   (GtkCellAreaContext *context);
-
-  /* These must be invoked after a series of requests before consulting 
-   * the context values, implementors use this to push the overall
-   * requests while acconting for any internal alignments */
-  void    (* sum_preferred_width)                (GtkCellAreaContext *context);
-  void    (* sum_preferred_height)               (GtkCellAreaContext *context);
-
-  /* Store an allocation value for a GtkCellArea contextual to a range of
-   * treemodel rows */
-  void    (* allocate)                           (GtkCellAreaContext *context,
-						  gint                width,
-						  gint                height);
+  void    (* sum_preferred_width)    (GtkCellAreaContext *context);
+  void    (* sum_preferred_height)   (GtkCellAreaContext *context);
+  void    (* allocate)               (GtkCellAreaContext *context,
+				      gint                width,
+				      gint                height);
+  void    (* reset)                  (GtkCellAreaContext *context);
 
   /* Padding for future expansion */
   void (*_gtk_reserved1) (void);
@@ -77,45 +67,35 @@ struct _GtkCellAreaContextClass
   void (*_gtk_reserved4) (void);
 };
 
-GType        gtk_cell_area_context_get_type                         (void) G_GNUC_CONST;
-
-GtkCellArea *gtk_cell_area_context_get_area                         (GtkCellAreaContext *context);
-
-/* Apis for GtkCellArea clients to flush the cache */
-void         gtk_cell_area_context_flush                            (GtkCellAreaContext *context);
-void         gtk_cell_area_context_flush_preferred_width            (GtkCellAreaContext *context);
-void         gtk_cell_area_context_flush_preferred_height           (GtkCellAreaContext *context);
-void         gtk_cell_area_context_flush_allocation                 (GtkCellAreaContext *context);
-
-/* Apis for GtkCellArea clients to sum up the results of a series of requests, this
- * call is required to reduce the processing while calculating the size of each row */
-void         gtk_cell_area_context_sum_preferred_width              (GtkCellAreaContext *context);
-void         gtk_cell_area_context_sum_preferred_height             (GtkCellAreaContext *context);
-
-/* Apis to set an allocation size in one dimension or another, the subclass specific context
- * will store allocated positions/sizes for individual cells or groups of cells */
-void         gtk_cell_area_context_allocate                         (GtkCellAreaContext *context,
-								     gint                width,
-								     gint                height);
-
-/* Apis for GtkCellArea clients to consult cached values for multiple GtkTreeModel rows */
-void         gtk_cell_area_context_get_preferred_width              (GtkCellAreaContext *context,
-								     gint               *minimum_width,
-								     gint               *natural_width);
-void         gtk_cell_area_context_get_preferred_height             (GtkCellAreaContext *context,
-								     gint               *minimum_height,
-								     gint               *natural_height);
-void         gtk_cell_area_context_get_allocation                   (GtkCellAreaContext *context,
-								     gint               *width,
-								     gint               *height);
+GType        gtk_cell_area_context_get_type              (void) G_GNUC_CONST;
+
+/* Main apis */
+GtkCellArea *gtk_cell_area_context_get_area              (GtkCellAreaContext *context);
+void         gtk_cell_area_context_sum_preferred_width   (GtkCellAreaContext *context);
+void         gtk_cell_area_context_sum_preferred_height  (GtkCellAreaContext *context);
+void         gtk_cell_area_context_allocate              (GtkCellAreaContext *context,
+							  gint                width,
+							  gint                height);
+void         gtk_cell_area_context_reset                 (GtkCellAreaContext *context);
+
+/* Apis for GtkCellArea clients to consult cached values for a series of GtkTreeModel rows */
+void         gtk_cell_area_context_get_preferred_width   (GtkCellAreaContext *context,
+							  gint               *minimum_width,
+							  gint               *natural_width);
+void         gtk_cell_area_context_get_preferred_height  (GtkCellAreaContext *context,
+							  gint               *minimum_height,
+							  gint               *natural_height);
+void         gtk_cell_area_context_get_allocation        (GtkCellAreaContext *context,
+							  gint               *width,
+							  gint               *height);
 
 /* Apis for GtkCellArea implementations to update cached values for multiple GtkTreeModel rows */
-void         gtk_cell_area_context_push_preferred_width             (GtkCellAreaContext *context,
-								     gint                minimum_width,
-								     gint                natural_width);
-void         gtk_cell_area_context_push_preferred_height            (GtkCellAreaContext *context,
-								     gint                minimum_height,
-								     gint                natural_height);
+void         gtk_cell_area_context_push_preferred_width  (GtkCellAreaContext *context,
+							  gint                minimum_width,
+							  gint                natural_width);
+void         gtk_cell_area_context_push_preferred_height (GtkCellAreaContext *context,
+							  gint                minimum_height,
+							  gint                natural_height);
 
 G_END_DECLS
 
diff --git a/tests/cellareascaffold.c b/tests/cellareascaffold.c
index fb8be46..a340972 100644
--- a/tests/cellareascaffold.c
+++ b/tests/cellareascaffold.c
@@ -1239,7 +1239,7 @@ remove_editable_cb (GtkCellArea      *area,
 }
 
 static void 
-rebuild_and_flush_internals (CellAreaScaffold *scaffold)
+rebuild_and_reset_internals (CellAreaScaffold *scaffold)
 {
   CellAreaScaffoldPrivate *priv = scaffold->priv;
   gint n_rows;
@@ -1255,9 +1255,9 @@ rebuild_and_flush_internals (CellAreaScaffold *scaffold)
   else
     g_array_set_size (priv->row_data, 0);
 
-  /* Data changed, lets flush the context and consequently queue resize and
+  /* Data changed, lets reset the context and consequently queue resize and
    * start everything over again (note this is definitly far from optimized) */
-  gtk_cell_area_context_flush (priv->context);
+  gtk_cell_area_context_reset (priv->context);
 }
 
 static void
@@ -1266,7 +1266,7 @@ row_changed_cb (GtkTreeModel     *model,
 		GtkTreeIter      *iter,
 		CellAreaScaffold *scaffold)
 {
-  rebuild_and_flush_internals (scaffold);
+  rebuild_and_reset_internals (scaffold);
 }
 
 static void
@@ -1275,7 +1275,7 @@ row_inserted_cb (GtkTreeModel     *model,
 		 GtkTreeIter      *iter,
 		 CellAreaScaffold *scaffold)
 {
-  rebuild_and_flush_internals (scaffold);
+  rebuild_and_reset_internals (scaffold);
 }
 
 static void
@@ -1283,7 +1283,7 @@ row_deleted_cb (GtkTreeModel     *model,
 		GtkTreePath      *path,
 		CellAreaScaffold *scaffold)
 {
-  rebuild_and_flush_internals (scaffold);
+  rebuild_and_reset_internals (scaffold);
 }
 
 static void
@@ -1293,7 +1293,7 @@ rows_reordered_cb (GtkTreeModel     *model,
 		   gint             *new_order,
 		   CellAreaScaffold *scaffold)
 {
-  rebuild_and_flush_internals (scaffold);
+  rebuild_and_reset_internals (scaffold);
 }
 
 /*********************************************************
@@ -1362,7 +1362,7 @@ cell_area_scaffold_set_model (CellAreaScaffold *scaffold,
 			      G_CALLBACK (rows_reordered_cb), scaffold);
 	}
 
-      rebuild_and_flush_internals (scaffold);
+      rebuild_and_reset_internals (scaffold);
     }
 }
 



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