[gtk+/treeview-refactor] Finished up initial revision of GtkCellAreaBoxIter



commit 11f8dfe3f40d8b0d40b95bff6ccfdcbfaccee469
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Tue Oct 26 23:01:17 2010 +0900

    Finished up initial revision of GtkCellAreaBoxIter
    
    The interaction between this class and GtkCellAreaBox could
    use some optimization, maybe the cells and their sizes should
    be returned as a list and iterated over at the same time as
    requesting sizes instead of the hash table approach currently
    taken, however the code is clean this way for now.

 gtk/gtkcellareaboxiter.c |  100 +++++++++++++++++++++++++++++++++++++++++++++-
 gtk/gtkcellareaboxiter.h |    4 +-
 2 files changed, 100 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkcellareaboxiter.c b/gtk/gtkcellareaboxiter.c
index f0c7974..568f84d 100644
--- a/gtk/gtkcellareaboxiter.c
+++ b/gtk/gtkcellareaboxiter.c
@@ -337,9 +337,31 @@ gtk_cell_area_box_get_cell_width (GtkCellAreaBoxIter *box_iter,
 				  gint               *minimum_width,
 				  gint               *natural_width)
 {
+  GtkCellAreaBoxIterPrivate *priv;
+  CachedSize                *size;
+
   g_return_if_fail (GTK_IS_CELL_AREA_BOX_ITER (box_iter));
   g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
 
+  priv = box_iter->priv;
+  size = g_hash_table_lookup (priv->base_widths, renderer);
+
+  if (size)
+    {
+      if (minimum_width)
+	*minimum_width = size->min_size;
+
+      if (natural_width)
+	*natural_width = size->nat_size;
+    }
+  else
+    {
+      if (minimum_width)
+	*minimum_width = -1;
+
+      if (natural_width)
+	*natural_width = -1;      
+    }
 }
 
 void
@@ -349,20 +371,68 @@ gtk_cell_area_box_get_cell_height_for_width (GtkCellAreaBoxIter *box_iter,
 					     gint               *minimum_height,
 					     gint               *natural_height)
 {
+  GtkCellAreaBoxIterPrivate *priv;
+  GHashTable                *cell_table;
+  CachedSize                *size = NULL;
+
   g_return_if_fail (GTK_IS_CELL_AREA_BOX_ITER (box_iter));
   g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
 
+  priv       = box_iter->priv;
+  cell_table = g_hash_table_lookup (priv->heights, GINT_TO_POINTER (for_width));
+
+  if (cell_table)
+    size = g_hash_table_lookup (cell_table, renderer);
+
+  if (size)
+    {
+      if (minimum_height)
+	*minimum_height = size->min_size;
+
+      if (natural_height)
+	*natural_height = size->nat_size;
+    }
+  else
+    {
+      if (minimum_height)
+	*minimum_height = -1;
+
+      if (natural_height)
+	*natural_height = -1;      
+    }
 }
 
 void
 gtk_cell_area_box_get_cell_height (GtkCellAreaBoxIter *box_iter,
 				   GtkCellRenderer    *renderer,
-				   gint                minimum_height,
-				   gint                natural_height)
+				   gint               *minimum_height,
+				   gint               *natural_height)
 {
+  GtkCellAreaBoxIterPrivate *priv;
+  CachedSize                *size;
+
   g_return_if_fail (GTK_IS_CELL_AREA_BOX_ITER (box_iter));
   g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
 
+  priv = box_iter->priv;
+  size = g_hash_table_lookup (priv->base_heights, renderer);
+
+  if (size)
+    {
+      if (minimum_height)
+	*minimum_height = size->min_size;
+
+      if (natural_height)
+	*natural_height = size->nat_size;
+    }
+  else
+    {
+      if (minimum_height)
+	*minimum_height = -1;
+
+      if (natural_height)
+	*natural_height = -1;      
+    }
 }
 
 void
@@ -372,7 +442,33 @@ gtk_cell_area_box_get_cell_width_for_height (GtkCellAreaBoxIter *box_iter,
 					     gint               *minimum_width,
 					     gint               *natural_width)
 {
+  GtkCellAreaBoxIterPrivate *priv;
+  GHashTable                *cell_table;
+  CachedSize                *size = NULL;
+
   g_return_if_fail (GTK_IS_CELL_AREA_BOX_ITER (box_iter));
   g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
 
+  priv       = box_iter->priv;
+  cell_table = g_hash_table_lookup (priv->widths, GINT_TO_POINTER (for_height));
+
+  if (cell_table)
+    size = g_hash_table_lookup (cell_table, renderer);
+
+  if (size)
+    {
+      if (minimum_width)
+	*minimum_width = size->min_size;
+
+      if (natural_width)
+	*natural_width = size->nat_size;
+    }
+  else
+    {
+      if (minimum_width)
+	*minimum_width = -1;
+
+      if (natural_width)
+	*natural_width = -1;      
+    }
 }
diff --git a/gtk/gtkcellareaboxiter.h b/gtk/gtkcellareaboxiter.h
index 36f25be..2d962f4 100644
--- a/gtk/gtkcellareaboxiter.h
+++ b/gtk/gtkcellareaboxiter.h
@@ -97,8 +97,8 @@ void    gtk_cell_area_box_get_cell_height_for_width   (GtkCellAreaBoxIter *box_i
 
 void    gtk_cell_area_box_get_cell_height             (GtkCellAreaBoxIter *box_iter,
 						       GtkCellRenderer    *renderer,
-						       gint                minimum_height,
-						       gint                natural_height);
+						       gint               *minimum_height,
+						       gint               *natural_height);
 
 void    gtk_cell_area_box_get_cell_width_for_height   (GtkCellAreaBoxIter *box_iter,
 						       GtkCellRenderer    *renderer,



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