Commit 4a9a6249 authored by Jonathan Blandford's avatar Jonathan Blandford Committed by Jonathan Blandford

Removed 'fill' attribute. It was silly b/c that was a property of the cell

Fri Sep  7 20:45:29 2001  Jonathan Blandford  <jrb@redhat.com>

	* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
	Removed 'fill' attribute.  It was silly b/c that was a property of
	the cell renderer, anyway.
	(gtk_tree_view_column_render): Actually render the packed
	renderers.
	* doc/tree-column-sizing.txt: initial devel documentation.
	* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
	* gtk/gtkcellrenderertextpixbuf.[ch]: removed.

	* tests/testtreefocus.c: fix up to reflect above changes.
	* tests/testtreeview.c: ditto
	* demos/gtk-demo/stock_browser.c: ditto
parent 27401e1e
Fri Sep 7 20:45:29 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
Removed 'fill' attribute. It was silly b/c that was a property of
the cell renderer, anyway.
(gtk_tree_view_column_render): Actually render the packed
renderers.
* doc/tree-column-sizing.txt: initial devel documentation.
* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
* gtk/gtkcellrenderertextpixbuf.[ch]: removed.
* tests/testtreefocus.c: fix up to reflect above changes.
* tests/testtreeview.c: ditto
* demos/gtk-demo/stock_browser.c: ditto
2001-09-07 Alex Larsson <alexl@redhat.com>
* gdk/linux-fb/gdkcolor-fb.c:
......
Fri Sep 7 20:45:29 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
Removed 'fill' attribute. It was silly b/c that was a property of
the cell renderer, anyway.
(gtk_tree_view_column_render): Actually render the packed
renderers.
* doc/tree-column-sizing.txt: initial devel documentation.
* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
* gtk/gtkcellrenderertextpixbuf.[ch]: removed.
* tests/testtreefocus.c: fix up to reflect above changes.
* tests/testtreeview.c: ditto
* demos/gtk-demo/stock_browser.c: ditto
2001-09-07 Alex Larsson <alexl@redhat.com>
* gdk/linux-fb/gdkcolor-fb.c:
......
Fri Sep 7 20:45:29 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
Removed 'fill' attribute. It was silly b/c that was a property of
the cell renderer, anyway.
(gtk_tree_view_column_render): Actually render the packed
renderers.
* doc/tree-column-sizing.txt: initial devel documentation.
* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
* gtk/gtkcellrenderertextpixbuf.[ch]: removed.
* tests/testtreefocus.c: fix up to reflect above changes.
* tests/testtreeview.c: ditto
* demos/gtk-demo/stock_browser.c: ditto
2001-09-07 Alex Larsson <alexl@redhat.com>
* gdk/linux-fb/gdkcolor-fb.c:
......
Fri Sep 7 20:45:29 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
Removed 'fill' attribute. It was silly b/c that was a property of
the cell renderer, anyway.
(gtk_tree_view_column_render): Actually render the packed
renderers.
* doc/tree-column-sizing.txt: initial devel documentation.
* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
* gtk/gtkcellrenderertextpixbuf.[ch]: removed.
* tests/testtreefocus.c: fix up to reflect above changes.
* tests/testtreeview.c: ditto
* demos/gtk-demo/stock_browser.c: ditto
2001-09-07 Alex Larsson <alexl@redhat.com>
* gdk/linux-fb/gdkcolor-fb.c:
......
Fri Sep 7 20:45:29 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
Removed 'fill' attribute. It was silly b/c that was a property of
the cell renderer, anyway.
(gtk_tree_view_column_render): Actually render the packed
renderers.
* doc/tree-column-sizing.txt: initial devel documentation.
* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
* gtk/gtkcellrenderertextpixbuf.[ch]: removed.
* tests/testtreefocus.c: fix up to reflect above changes.
* tests/testtreeview.c: ditto
* demos/gtk-demo/stock_browser.c: ditto
2001-09-07 Alex Larsson <alexl@redhat.com>
* gdk/linux-fb/gdkcolor-fb.c:
......
Fri Sep 7 20:45:29 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
Removed 'fill' attribute. It was silly b/c that was a property of
the cell renderer, anyway.
(gtk_tree_view_column_render): Actually render the packed
renderers.
* doc/tree-column-sizing.txt: initial devel documentation.
* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
* gtk/gtkcellrenderertextpixbuf.[ch]: removed.
* tests/testtreefocus.c: fix up to reflect above changes.
* tests/testtreeview.c: ditto
* demos/gtk-demo/stock_browser.c: ditto
2001-09-07 Alex Larsson <alexl@redhat.com>
* gdk/linux-fb/gdkcolor-fb.c:
......
Fri Sep 7 20:45:29 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_pack_{start,end}):
Removed 'fill' attribute. It was silly b/c that was a property of
the cell renderer, anyway.
(gtk_tree_view_column_render): Actually render the packed
renderers.
* doc/tree-column-sizing.txt: initial devel documentation.
* gtk/gtktreeview.c (gtk_tree_view_expand_all): Fix bug.
* gtk/gtkcellrenderertextpixbuf.[ch]: removed.
* tests/testtreefocus.c: fix up to reflect above changes.
* tests/testtreeview.c: ditto
* demos/gtk-demo/stock_browser.c: ditto
2001-09-07 Alex Larsson <alexl@redhat.com>
* gdk/linux-fb/gdkcolor-fb.c:
......
......@@ -304,11 +304,11 @@ selection_changed (GtkTreeSelection *selection)
}
static void
macro_set_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
macro_set_func_text (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
StockItemInfo *info;
......@@ -318,6 +318,25 @@ macro_set_func (GtkTreeViewColumn *tree_column,
g_object_set (GTK_CELL_RENDERER (cell),
"text", info->macro,
NULL);
stock_item_info_free (info);
}
static void
macro_set_func_pixbuf (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
StockItemInfo *info;
gtk_tree_model_get (model, iter,
0, &info,
-1);
g_object_set (GTK_CELL_RENDERER (cell),
"pixbuf", info->small_icon,
NULL);
......@@ -399,7 +418,8 @@ do_stock_browser (void)
GtkCellRenderer *cell_renderer;
StockItemDisplay *display;
GtkTreeSelection *selection;
GtkTreeViewColumn *column;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Stock Icons and Items");
......@@ -423,15 +443,25 @@ do_stock_browser (void)
gtk_container_add (GTK_CONTAINER (sw), treeview);
cell_renderer = gtk_cell_renderer_text_pixbuf_new ();
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "Macro");
cell_renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (column,
cell_renderer,
FALSE);
gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
macro_set_func_pixbuf, NULL, NULL);
cell_renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column,
cell_renderer,
TRUE);
gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
macro_set_func_text, NULL, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview),
column);
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview),
-1,
"Macro",
cell_renderer,
macro_set_func,
NULL,
NULL);
cell_renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview),
......
The way that the GtkTreeView calculates sizing is pretty confusing.
This is written down to help keep track of it in my head, and thus help
anyone who hopes to work with the code in the future.
HOW THE GTKTREEVIEW CALCULATES SIZE:
====================================
When the view is given a new model, the first thing it does is walk
through the model at the top level, creating an GtkRBNode for each
element of the model. Each node has a height of 0. The RBTree is kept
updated as the models structure changes. Additionally, the user can
expand, collapse, and select rows at this stage. The RBTree is accurate
-- it just doesn't have a height for any row.
When the TreeView is realized, it calculates the actual height of each
row by walking the tree and measuring them. While doing so, it gets the
size of each column.
Columns are initially marked as 'dirty'. When sized,
gtk_tree_view_check_dirty_and_clean () is called on each column. This
function walks through all visible columns, and sees if they're dirty or
not. If any are dirty, it then walks the tree, calling
gtk_tree_view_calc_size on each row. gtk_tree_view_calc_size requests
the size of every dirty column in the tree. Finally, it updates the
size of the widget (including adjustments).
HOW THE GTKTREEVIEWCOLUMN STORES SIZE:
======================================
There are a number of size related fields in the GtkTreeViewColumn
structure:
sizing The sizing method to use when calculating the size
of the column. Can be grow_only, resizable, auto, and fixed.
requested_width The width of the column as requested by the column
width The actual width. This is requested width for all
columns but possibly the last one.
fixed_width The requested fixed width for the column iff it's
sizing type is set to GTK_TREE_VIEW_COLUMN_FIXED.
min_width The minimum width the column can be
max_width The maximum width the column can be. This can be
overridden for the last column, if the tree_view is
actually wider than the sum of all of the columns
requested_widths.
The following invariants are true:
min_width is less than or equal to width
max_width is greater than or equal to width
(sizing == GTK_TREE_VIEW_COLUMN_FIXED) => (requested_width == fixed_width)
(column != last visible column) => width == requested_width
/* Functions needed by gtktreeview for gtktreeviewcolumn */
size_request_button
set_width (for resizing resizable columns)
calculate_width
......@@ -69,7 +69,6 @@ gtk_public_h_sources = @STRIP_BEGIN@ \
gtkcurve.h \
gtkcellrenderer.h \
gtkcellrenderertext.h \
gtkcellrenderertextpixbuf.h \
gtkcellrenderertoggle.h \
gtkcellrendererpixbuf.h \
gtkdebug.h \
......@@ -216,7 +215,6 @@ gtk_c_sources = @STRIP_BEGIN@ \
gtkcalendar.c \
gtkcellrenderer.c \
gtkcellrenderertext.c \
gtkcellrenderertextpixbuf.c \
gtkcellrenderertoggle.c \
gtkcellrendererpixbuf.c \
gtkcheckbutton.c \
......
/* gtkcellrenderertextpixbuf.c
* Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <jrb@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include <stdlib.h>
#include "gtkcellrenderertextpixbuf.h"
#include "gtkintl.h"
enum {
PROP_ZERO,
PROP_PIXBUF_POS,
PROP_PIXBUF,
PROP_PIXBUF_XALIGN,
PROP_PIXBUF_YALIGN,
PROP_PIXBUF_XPAD,
PROP_PIXBUF_YPAD
};
static void gtk_cell_renderer_text_pixbuf_get_property (GObject *object,
guint param_id,
GValue *value,
GParamSpec *pspec);
static void gtk_cell_renderer_text_pixbuf_set_property (GObject *object,
guint param_id,
const GValue *value,
GParamSpec *pspec);
static void gtk_cell_renderer_text_pixbuf_init (GtkCellRendererTextPixbuf *celltextpixbuf);
static void gtk_cell_renderer_text_pixbuf_class_init (GtkCellRendererTextPixbufClass *class);
static void gtk_cell_renderer_text_pixbuf_get_size (GtkCellRenderer *cell,
GtkWidget *view,
GdkRectangle *cell_area,
gint *x_offset,
gint *y_offset,
gint *width,
gint *height);
static void gtk_cell_renderer_text_pixbuf_render (GtkCellRenderer *cell,
GdkWindow *window,
GtkWidget *view,
GdkRectangle *background_area,
GdkRectangle *cell_area,
GdkRectangle *expose_area,
guint flags);
static GtkCellRendererTextClass *parent_class = NULL;
GtkType
gtk_cell_renderer_text_pixbuf_get_type (void)
{
static GtkType cell_text_pixbuf_type = 0;
if (!cell_text_pixbuf_type)
{
static const GTypeInfo cell_text_pixbuf_info =
{
sizeof (GtkCellRendererTextPixbufClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) gtk_cell_renderer_text_pixbuf_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (GtkCellRendererTextPixbuf),
0, /* n_preallocs */
(GInstanceInitFunc) gtk_cell_renderer_text_pixbuf_init,
};
cell_text_pixbuf_type = g_type_register_static (GTK_TYPE_CELL_RENDERER_TEXT, "GtkCellRendererTextPixbuf", &cell_text_pixbuf_info, 0);
}
return cell_text_pixbuf_type;
}
static void
gtk_cell_renderer_text_pixbuf_init (GtkCellRendererTextPixbuf *celltextpixbuf)
{
celltextpixbuf->pixbuf = GTK_CELL_RENDERER_PIXBUF (gtk_cell_renderer_pixbuf_new ());
celltextpixbuf->pixbuf_pos = GTK_POS_LEFT;
}
static void
gtk_cell_renderer_text_pixbuf_class_init (GtkCellRendererTextPixbufClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (class);
parent_class = g_type_class_peek_parent (class);
object_class->get_property = gtk_cell_renderer_text_pixbuf_get_property;
object_class->set_property = gtk_cell_renderer_text_pixbuf_set_property;
cell_class->get_size = gtk_cell_renderer_text_pixbuf_get_size;
cell_class->render = gtk_cell_renderer_text_pixbuf_render;
g_object_class_install_property (object_class,
PROP_PIXBUF_POS,
g_param_spec_int ("pixbuf_pos",
_("Pixbuf location"),
_("The relative location of the pixbuf to the text."),
GTK_POS_LEFT,
GTK_POS_BOTTOM,
GTK_POS_LEFT,
G_PARAM_READABLE |
G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_PIXBUF,
g_param_spec_object ("pixbuf",
_("Pixbuf Object"),
_("The pixbuf to render."),
GDK_TYPE_PIXBUF,
G_PARAM_READABLE |
G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_PIXBUF_XALIGN,
g_param_spec_float ("pixbuf_xalign",
_("pixbuf xalign"),
_("The x-align of the pixbuf."),
0.0,
1.0,
0.0,
G_PARAM_READABLE |
G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_PIXBUF_YALIGN,
g_param_spec_float ("pixbuf_yalign",
_("pixbuf yalign"),
_("The y-align of the pixbuf."),
0.0,
1.0,
0.5,
G_PARAM_READABLE |
G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_PIXBUF_XPAD,
g_param_spec_uint ("pixbuf_xpad",
_("pixbuf xpad"),
_("The xpad of the pixbuf."),
0,
100,
2,
G_PARAM_READABLE |
G_PARAM_WRITABLE));
g_object_class_install_property (object_class,
PROP_PIXBUF_YPAD,
g_param_spec_uint ("pixbuf_ypad",
_("pixbuf ypad"),
_("The ypad of the pixbuf."),
0,
100,
2,
G_PARAM_READABLE |
G_PARAM_WRITABLE));
}
static void
gtk_cell_renderer_text_pixbuf_get_property (GObject *object,
guint param_id,
GValue *value,
GParamSpec *pspec)
{
GtkCellRendererTextPixbuf *celltextpixbuf = GTK_CELL_RENDERER_TEXT_PIXBUF (object);
switch (param_id)
{
case PROP_PIXBUF_POS:
g_value_set_int (value, celltextpixbuf->pixbuf_pos);
break;
case PROP_PIXBUF:
g_object_get_property (G_OBJECT (celltextpixbuf->pixbuf),
"pixbuf",
value);
break;
case PROP_PIXBUF_XALIGN:
g_object_get_property (G_OBJECT (celltextpixbuf->pixbuf),
"xalign",
value);
break;
case PROP_PIXBUF_YALIGN:
g_object_get_property (G_OBJECT (celltextpixbuf->pixbuf),
"yalign",
value);
break;
case PROP_PIXBUF_XPAD:
g_object_get_property (G_OBJECT (celltextpixbuf->pixbuf),
"xpad",
value);
break;
case PROP_PIXBUF_YPAD:
g_object_get_property (G_OBJECT (celltextpixbuf->pixbuf),
"ypad",
value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
static void
gtk_cell_renderer_text_pixbuf_set_property (GObject *object,
guint param_id,
const GValue *value,
GParamSpec *pspec)
{
GtkCellRendererTextPixbuf *celltextpixbuf = GTK_CELL_RENDERER_TEXT_PIXBUF (object);
switch (param_id)
{
case PROP_PIXBUF:
g_object_set_property (G_OBJECT (celltextpixbuf->pixbuf),
"pixbuf",
value);
g_object_notify (G_OBJECT(object), "pixbuf");
break;
case PROP_PIXBUF_POS:
celltextpixbuf->pixbuf_pos = g_value_get_int (value);
g_object_notify (G_OBJECT(object), "pixbuf_pos");
break;
case PROP_PIXBUF_XALIGN:
g_object_set_property (G_OBJECT (celltextpixbuf->pixbuf),
"xalign",
value);
g_object_notify (G_OBJECT(object), "pixbuf_xalign");
break;
case PROP_PIXBUF_YALIGN:
g_object_set_property (G_OBJECT (celltextpixbuf->pixbuf),
"yalign",
value);
g_object_notify (G_OBJECT(object), "pixbuf_yalign");
break;
case PROP_PIXBUF_XPAD:
g_object_set_property (G_OBJECT (celltextpixbuf->pixbuf),
"xpad",
value);
g_object_notify (G_OBJECT(object), "pixbuf_xpad");
break;
case PROP_PIXBUF_YPAD:
g_object_set_property (G_OBJECT (celltextpixbuf->pixbuf),
"ypad",
value);
g_object_notify (G_OBJECT(object), "pixbuf_ypad");
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
/**
* gtk_cell_renderer_text_pixbuf_new:
*
* Creates a new #GtkCellRendererTextPixbuf. Adjust rendering
* parameters using object properties. Object properties can be set
* globally (with g_object_set()). Also, with #GtkTreeViewColumn, you
* can bind a property to a value in a #GtkTreeModel. For example, you
* can bind the "text" property on the cell renderer to a string value
* in the model, thus rendering a different string in each row of the
* #GtkTreeView
*
* Return value: the new cell renderer
**/
GtkCellRenderer *
gtk_cell_renderer_text_pixbuf_new (void)
{
return GTK_CELL_RENDERER (gtk_type_new (gtk_cell_renderer_text_pixbuf_get_type ()));
}
typedef void (* CellSizeFunc) (GtkCellRenderer *cell,
GtkWidget *widget,
GdkRectangle *rectangle,
gint *x_offset,
gint *y_offset,
gint *width,
gint *height);
typedef void (* CellRenderFunc) (GtkCellRenderer *cell,
GdkWindow *window,
GtkWidget *widget,
GdkRectangle *background_area,
GdkRectangle *cell_area,
GdkRectangle *expose_area,
guint flags);
static void
gtk_cell_renderer_text_pixbuf_get_size (GtkCellRenderer *cell,
GtkWidget *widget,
GdkRectangle *cell_area,
gint *x_offset,
gint *y_offset,
gint *width,
gint *height)
{
GtkCellRendererTextPixbuf *celltextpixbuf = (GtkCellRendererTextPixbuf *)cell;
gint pixbuf_width;
gint pixbuf_height;
gint text_width;
gint text_height;
gint calc_width;
gint calc_height;
(* GTK_CELL_RENDERER_CLASS (parent_class)->get_size) (cell, widget, NULL, NULL, NULL, &text_width, &text_height);
(* GTK_CELL_RENDERER_CLASS (G_OBJECT_GET_CLASS (celltextpixbuf->pixbuf))->get_size) (GTK_CELL_RENDERER (celltextpixbuf->pixbuf),
widget,
NULL, NULL, NULL,
&pixbuf_width,
&pixbuf_height);
if (celltextpixbuf->pixbuf_pos == GTK_POS_LEFT ||
celltextpixbuf->pixbuf_pos == GTK_POS_RIGHT)
{
calc_width = pixbuf_width + text_width;
calc_height = MAX (pixbuf_height, text_height);
}
else
{
calc_width = MAX (pixbuf_width, text_width);
calc_height = pixbuf_height + text_height;
}
if (width)
*width = calc_width;
if (height)
*height = calc_height;
if (cell_area)
{
if (x_offset)
{
*x_offset = cell->xalign * (cell_area->width - calc_width - (2 * cell->xpad));
*x_offset = MAX (*x_offset, 0) + cell->xpad;
}
if (y_offset)
{
*y_offset = cell->yalign * (cell_area->height - calc_height - (2 * cell->ypad));
*y_offset = MAX (*y_offset, 0) + cell->ypad;
}
}
}
static void
gtk_cell_renderer_text_pixbuf_render (GtkCellRenderer *cell,
GdkWindow *window,
GtkWidget *widget,
GdkRectangle *background_area,
GdkRectangle *cell_area,
GdkRectangle *expose_area,
guint flags)
{
GtkCellRendererTextPixbuf *celltextpixbuf = (GtkCellRendererTextPixbuf *) cell;
CellSizeFunc size_func1, size_func2;
CellRenderFunc render_func1, render_func2;
GtkCellRenderer *cell1, *cell2;
gint tmp_width;
gint tmp_height;
GdkRectangle real_cell_area;
if (celltextpixbuf->pixbuf_pos == GTK_POS_LEFT ||
celltextpixbuf->pixbuf_pos == GTK_POS_TOP)
{
size_func1 = GTK_CELL_RENDERER_CLASS (G_OBJECT_GET_CLASS (celltextpixbuf->pixbuf))->get_size;
render_func1 = GTK_CELL_RENDERER_CLASS (G_OBJECT_GET_CLASS (celltextpixbuf->pixbuf))->render;
cell1 = GTK_CELL_RENDERER (celltextpixbuf->pixbuf);
size_func2 = GTK_CELL_RENDERER_CLASS (parent_class)->get_size;
render_func2 = GTK_CELL_RENDERER_CLASS (parent_class)->render;
cell2 = cell;
}
else
{
size_func1 = GTK_CELL_RENDERER_CLASS (parent_class)->get_size;
render_func1 = GTK_CELL_RENDERER_CLASS (parent_class)->render;
cell1 = cell;
size_func2 = GTK_CELL_RENDERER_CLASS (G_OBJECT_GET_CLASS (celltextpixbuf->pixbuf))->get_size;
render_func2 = GTK_CELL_RENDERER_CLASS (G_OBJECT_GET_CLASS (celltextpixbuf->pixbuf))->render;
cell2 = GTK_CELL_RENDERER (celltextpixbuf->pixbuf);
}
(size_func1) (cell1, widget, NULL, NULL, NULL, &tmp_width, &tmp_height);
real_cell_area.x = cell_area->x;
real_cell_area.y = cell_area->y;
if (celltextpixbuf->pixbuf_pos == GTK_POS_LEFT ||
celltextpixbuf->pixbuf_pos == GTK_POS_RIGHT)
{
real_cell_area.width = MIN (tmp_width, cell_area->width);
real_cell_area.height = cell_area->height;
}
else
{
real_cell_area.height = MIN (tmp_height, cell_area->height);
real_cell_area.width = cell_area->width;
}
(render_func1) (cell1,
window,
widget,
background_area,
&real_cell_area,
expose_area,
flags);
if (celltextpixbuf->pixbuf_pos == GTK_POS_LEFT ||
celltextpixbuf->pixbuf_pos == GTK_POS_RIGHT)
{
real_cell_area.x = real_cell_area.x + real_cell_area.width;
real_cell_area.width = cell_area->width - real_cell_area.width;
}
else
{
real_cell_area.y = real_cell_area.y + real_cell_area.height;
real_cell_area.height = cell_area->height - real_cell_area.height;
}
(render_func2 ) (cell2,
window,
widget,
background_area,