[gtk+/native-layout] GtkCellView refactoring for extended layout
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/native-layout] GtkCellView refactoring for extended layout
- Date: Thu, 8 Apr 2010 22:56:03 +0000 (UTC)
commit 143660eff69891d0033eb1f224922d68f30a2a24
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Thu Apr 8 18:46:19 2010 -0400
GtkCellView refactoring for extended layout
Added gtk_cell_view_get_desired_size_of_row() to report full
extended layout information for a said row, this obsoletes
gtk_cell_view_get_size_of_row(). Also make GtkCellView queue
a resize on itself when cell renderers are added/removed.
gtk/gtkcellview.c | 59 ++++++++++++++++++++++++++++++++++++++++++++---------
gtk/gtkcellview.h | 7 ++++++
2 files changed, 56 insertions(+), 10 deletions(-)
---
diff --git a/gtk/gtkcellview.c b/gtk/gtkcellview.c
index cf32b6e..215ccec 100644
--- a/gtk/gtkcellview.c
+++ b/gtk/gtkcellview.c
@@ -121,7 +121,10 @@ static void gtk_cell_view_buildable_custom_tag_end (GtkBuildable
const gchar *tagname,
gpointer *data);
-static void gtk_cell_view_extended_layout_init (GtkExtendedLayoutIface *iface);
+static void gtk_cell_view_extended_layout_init (GtkExtendedLayoutIface *iface);
+static void gtk_cell_view_extended_layout_get_desired_size (GtkExtendedLayout *layout,
+ GtkRequisition *minimal_size,
+ GtkRequisition *natural_size);
static GtkBuildableIface *parent_buildable_iface;
@@ -565,6 +568,8 @@ gtk_cell_view_cell_layout_pack_start (GtkCellLayout *layout,
info->pack = GTK_PACK_START;
cellview->priv->cell_list = g_list_append (cellview->priv->cell_list, info);
+
+ gtk_widget_queue_resize (cellview);
}
static void
@@ -585,6 +590,8 @@ gtk_cell_view_cell_layout_pack_end (GtkCellLayout *layout,
info->pack = GTK_PACK_END;
cellview->priv->cell_list = g_list_append (cellview->priv->cell_list, info);
+
+ gtk_widget_queue_resize (cellview);
}
static void
@@ -964,32 +971,61 @@ gtk_cell_view_get_displayed_row (GtkCellView *cell_view)
* Return value: %TRUE
*
* Since: 2.6
+ *
+ * Deprecated: 3.0: Use gtk_cell_view_get_desired_size_of_row() instead.
*/
gboolean
gtk_cell_view_get_size_of_row (GtkCellView *cell_view,
GtkTreePath *path,
GtkRequisition *requisition)
{
- GtkTreeRowReference *tmp;
GtkRequisition req;
- g_return_val_if_fail (GTK_IS_CELL_VIEW (cell_view), FALSE);
- g_return_val_if_fail (path != NULL, FALSE);
- g_return_val_if_fail (requisition != NULL, FALSE);
+ gtk_cell_view_get_desired_size_of_row (cell_view, path, requisition, &req);
+
+ return TRUE;
+}
+
+
+/**
+ * gtk_cell_view_get_desired_size_of_row:
+ * @cell_view: a #GtkCellView
+ * @path: a #GtkTreePath
+ * @minimum_size: return location for the minimum requested size
+ * @natural_size: return location for the desired natural size
+ *
+ * Sets @minimum_size and @natural_size to the size desired by @cell_view
+ * to display the model row pointed to by @path.
+ *
+ * Since: 3.0
+ */
+void
+gtk_cell_view_get_desired_size_of_row (GtkCellView *cell_view,
+ GtkTreePath *path,
+ GtkRequisition *minimum_size,
+ GtkRequisition *natural_size)
+{
+ GtkTreeRowReference *tmp;
+ GtkRequisition req, nat_req;
+
+ g_return_if_fail (GTK_IS_CELL_VIEW (cell_view));
+ g_return_if_fail (path != NULL);
+ g_return_if_fail (minimum_size != NULL || natural_size != NULL);
tmp = cell_view->priv->displayed_row;
cell_view->priv->displayed_row =
gtk_tree_row_reference_new (cell_view->priv->model, path);
- gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (cell_view), requisition, NULL);
+ gtk_cell_view_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (cell_view),
+ minimum_size ? minimum_size : &req,
+ natural_size ? natural_size : &nat_req);
gtk_tree_row_reference_free (cell_view->priv->displayed_row);
cell_view->priv->displayed_row = tmp;
- /* restore actual size info */
- gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (cell_view), &req, NULL);
-
- return TRUE;
+ /* Restore active size */
+ gtk_cell_view_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (cell_view),
+ &req, &nat_req);
}
/**
@@ -1116,6 +1152,9 @@ gtk_cell_view_extended_layout_get_desired_size (GtkExtendedLayout *layout,
natural_size->width = 0;
natural_size->height = 0;
+ if (cellview->priv->displayed_row)
+ gtk_cell_view_set_cell_data (cellview);
+
for (i = cellview->priv->cell_list; i; i = i->next)
{
GtkCellViewCellInfo *info = (GtkCellViewCellInfo *)i->data;
diff --git a/gtk/gtkcellview.h b/gtk/gtkcellview.h
index 73de84e..a7ee69e 100644
--- a/gtk/gtkcellview.h
+++ b/gtk/gtkcellview.h
@@ -69,6 +69,13 @@ GtkTreePath *gtk_cell_view_get_displayed_row (GtkCellView *cell_v
gboolean gtk_cell_view_get_size_of_row (GtkCellView *cell_view,
GtkTreePath *path,
GtkRequisition *requisition);
+gboolean gtk_cell_view_get_size_of_row (GtkCellView *cell_view,
+ GtkTreePath *path,
+ GtkRequisition *requisition);
+void gtk_cell_view_get_desired_size_of_row (GtkCellView *cell_view,
+ GtkTreePath *path,
+ GtkRequisition *minimum_size,
+ GtkRequisition *natural_size);
void gtk_cell_view_set_background_color (GtkCellView *cell_view,
const GdkColor *color);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]