[gtk+/combo-refactor: 17/42] Allow minimal implementation of GtkCellLayout
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/combo-refactor: 17/42] Allow minimal implementation of GtkCellLayout
- Date: Fri, 26 Nov 2010 14:52:35 +0000 (UTC)
commit b541e2ff60c0522265d01cfb54c316f422cde3db
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Mon Nov 22 16:27:52 2010 +0900
Allow minimal implementation of GtkCellLayout
Since GtkCellArea delegate does all the work, cell layout widgets
who use a GtkCellArea internally only have to implement the _get_area()
method, this just reduces code to forward the calls over the the internal
cell area.
gtk/gtkcelllayout.c | 149 +++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 126 insertions(+), 23 deletions(-)
---
diff --git a/gtk/gtkcelllayout.c b/gtk/gtkcelllayout.c
index b13f090..f25864b 100644
--- a/gtk/gtkcelllayout.c
+++ b/gtk/gtkcelllayout.c
@@ -54,12 +54,23 @@ gtk_cell_layout_pack_start (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
gboolean expand)
{
+ GtkCellLayoutIface *iface;
+ GtkCellArea *area;
+
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
- (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->pack_start) (cell_layout,
- cell,
- expand);
+ iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
+
+ if (iface->pack_start)
+ iface->pack_start (cell_layout, cell, expand);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (area), cell, expand);
+ }
}
/**
@@ -81,12 +92,23 @@ gtk_cell_layout_pack_end (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
gboolean expand)
{
+ GtkCellLayoutIface *iface;
+ GtkCellArea *area;
+
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
- (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->pack_end) (cell_layout,
- cell,
- expand);
+ iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
+
+ if (iface->pack_end)
+ iface->pack_end (cell_layout, cell, expand);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (area), cell, expand);
+ }
}
/**
@@ -101,9 +123,22 @@ gtk_cell_layout_pack_end (GtkCellLayout *cell_layout,
void
gtk_cell_layout_clear (GtkCellLayout *cell_layout)
{
+ GtkCellLayoutIface *iface;
+ GtkCellArea *area;
+
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
- (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->clear) (cell_layout);
+ iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
+
+ if (iface->clear)
+ iface->clear (cell_layout);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ gtk_cell_layout_clear (GTK_CELL_LAYOUT (area));
+ }
}
static void
@@ -114,17 +149,28 @@ gtk_cell_layout_set_attributesv (GtkCellLayout *cell_layout,
gchar *attribute;
gint column;
GtkCellLayoutIface *iface;
+ GtkCellArea *area;
attribute = va_arg (args, gchar *);
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
- (* iface->clear_attributes) (cell_layout, cell);
+ if (iface->get_area)
+ area = iface->get_area (cell_layout);
+
+ if (iface->clear_attributes)
+ iface->clear_attributes (cell_layout, cell);
+ else if (area)
+ gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (area), cell);
while (attribute != NULL)
{
column = va_arg (args, gint);
- (* iface->add_attribute) (cell_layout, cell, attribute, column);
+ if (iface->add_attribute)
+ iface->add_attribute (cell_layout, cell, attribute, column);
+ else if (area)
+ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (area), cell, attribute, column);
+
attribute = va_arg (args, gchar *);
}
}
@@ -178,15 +224,28 @@ gtk_cell_layout_add_attribute (GtkCellLayout *cell_layout,
const gchar *attribute,
gint column)
{
+ GtkCellLayoutIface *iface;
+ GtkCellArea *area;
+
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
g_return_if_fail (attribute != NULL);
g_return_if_fail (column >= 0);
- (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->add_attribute) (cell_layout,
- cell,
- attribute,
- column);
+ iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
+
+ if (iface->add_attribute)
+ iface->add_attribute (cell_layout,
+ cell,
+ attribute,
+ column);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (area), cell, attribute, column);
+ }
}
/**
@@ -211,14 +270,27 @@ gtk_cell_layout_set_cell_data_func (GtkCellLayout *cell_layout,
gpointer func_data,
GDestroyNotify destroy)
{
+ GtkCellLayoutIface *iface;
+ GtkCellArea *area;
+
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
- (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->set_cell_data_func) (cell_layout,
- cell,
- func,
- func_data,
- destroy);
+ iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
+
+ if (iface->set_cell_data_func)
+ iface->set_cell_data_func (cell_layout,
+ cell,
+ func,
+ func_data,
+ destroy);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (area), cell, func, func_data, destroy);
+ }
}
/**
@@ -235,11 +307,23 @@ void
gtk_cell_layout_clear_attributes (GtkCellLayout *cell_layout,
GtkCellRenderer *cell)
{
+ GtkCellLayoutIface *iface;
+ GtkCellArea *area;
+
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
- (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->clear_attributes) (cell_layout,
- cell);
+ iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
+
+ if (iface->clear_attributes)
+ iface->clear_attributes (cell_layout, cell);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ gtk_cell_layout_clear_attributes (GTK_CELL_LAYOUT (area), cell);
+ }
}
/**
@@ -258,12 +342,23 @@ gtk_cell_layout_reorder (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
gint position)
{
+ GtkCellLayoutIface *iface;
+ GtkCellArea *area;
+
g_return_if_fail (GTK_IS_CELL_LAYOUT (cell_layout));
g_return_if_fail (GTK_IS_CELL_RENDERER (cell));
- (* GTK_CELL_LAYOUT_GET_IFACE (cell_layout)->reorder) (cell_layout,
- cell,
- position);
+ iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
+
+ if (iface->reorder)
+ iface->reorder (cell_layout, cell, position);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ gtk_cell_layout_reorder (GTK_CELL_LAYOUT (area), cell, position);
+ }
}
/**
@@ -282,12 +377,20 @@ GList *
gtk_cell_layout_get_cells (GtkCellLayout *cell_layout)
{
GtkCellLayoutIface *iface;
+ GtkCellArea *area;
g_return_val_if_fail (GTK_IS_CELL_LAYOUT (cell_layout), NULL);
iface = GTK_CELL_LAYOUT_GET_IFACE (cell_layout);
if (iface->get_cells)
return iface->get_cells (cell_layout);
+ else
+ {
+ area = iface->get_area (cell_layout);
+
+ if (area)
+ return gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (area));
+ }
return NULL;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]