[gtk+/treeview-refactor] Finished up initial revision of GtkCellAreaBoxIter
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/treeview-refactor] Finished up initial revision of GtkCellAreaBoxIter
- Date: Tue, 26 Oct 2010 16:00:40 +0000 (UTC)
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]