summaryrefslogtreecommitdiff
path: root/gtk/gtkcellrenderertoggle.c
diff options
context:
space:
mode:
authorJonathan Blandford <jrb@redhat.com>2001-03-15 23:21:39 +0000
committerJonathan Blandford <jrb@src.gnome.org>2001-03-15 23:21:39 +0000
commite4d1660042a437b041422ac442ee4845fbf7e6b6 (patch)
tree10b09bc64b280eb911725d9060d0e721419b961d /gtk/gtkcellrenderertoggle.c
parent872efdd9a527e472e5f2724138344fdef3839df4 (diff)
downloadgtk+-e4d1660042a437b041422ac442ee4845fbf7e6b6.tar.gz
Changed prototype to allow for getting the location of the cell relative
Thu Mar 15 18:22:44 2001 Jonathan Blandford <jrb@redhat.com> * gtk/gtkcellrenderer.h: Changed prototype to allow for getting the location of the cell relative to its area. * gtk/gtkcell*: modified for above change * gtk/gtktreeview.c: modified for above change. Wed Mar 14 13:58:32 2001 Jonathan Blandford <jrb@redhat.com> * gtk/gtktreeview.c (gtk_tree_view_set_model): Ref the model. (gtk_tree_view_finalize): actually unref the model. Thanks to Jamie Strachan <frostfreek@yahoo.com> for noticing this error.
Diffstat (limited to 'gtk/gtkcellrenderertoggle.c')
-rw-r--r--gtk/gtkcellrenderertoggle.c52
1 files changed, 40 insertions, 12 deletions
diff --git a/gtk/gtkcellrenderertoggle.c b/gtk/gtkcellrenderertoggle.c
index 66f20eccae..1649021574 100644
--- a/gtk/gtkcellrenderertoggle.c
+++ b/gtk/gtkcellrenderertoggle.c
@@ -34,6 +34,9 @@ static void gtk_cell_renderer_toggle_init (GtkCellRendererToggle *cel
static void gtk_cell_renderer_toggle_class_init (GtkCellRendererToggleClass *class);
static void gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
gint *width,
gint *height);
static void gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
@@ -100,6 +103,7 @@ gtk_cell_renderer_toggle_init (GtkCellRendererToggle *celltoggle)
{
celltoggle->active = FALSE;
celltoggle->radio = FALSE;
+ GTK_CELL_RENDERER (celltoggle)->can_activate = TRUE;
GTK_CELL_RENDERER (celltoggle)->xpad = 2;
GTK_CELL_RENDERER (celltoggle)->ypad = 2;
}
@@ -215,14 +219,37 @@ gtk_cell_renderer_toggle_new (void)
static void
gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
gint *width,
gint *height)
{
+ gint calc_width;
+ gint calc_height;
+
+ calc_width = (gint) cell->xpad * 2 + TOGGLE_WIDTH;
+ calc_height = (gint) cell->ypad * 2 + TOGGLE_WIDTH;
+
if (width)
- *width = (gint) cell->xpad * 2 + TOGGLE_WIDTH;
+ *width = calc_width;
if (height)
- *height = (gint) cell->ypad * 2 + TOGGLE_WIDTH;
+ *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
@@ -236,25 +263,26 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
{
GtkCellRendererToggle *celltoggle = (GtkCellRendererToggle *) cell;
gint width, height;
- gint real_xoffset, real_yoffset;
+ gint x_offset, y_offset;
GtkShadowType shadow;
GtkStateType state;
width = MIN (TOGGLE_WIDTH, cell_area->width - cell->xpad * 2);
height = MIN (TOGGLE_WIDTH, cell_area->height - cell->ypad * 2);
+ gtk_cell_renderer_toggle_get_size (cell, widget, cell_area,
+ &x_offset, &y_offset,
+ &width, &height);
+
if (width <= 0 || height <= 0)
return;
- real_xoffset = cell->xalign * (cell_area->width - width - (2 * cell->xpad));
- real_xoffset = MAX (real_xoffset, 0) + cell->xpad;
- real_yoffset = cell->yalign * (cell_area->height - height - (2 * cell->ypad));
- real_yoffset = MAX (real_yoffset, 0) + cell->ypad;
-
shadow = celltoggle->active ? GTK_SHADOW_IN : GTK_SHADOW_OUT;
if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
state = GTK_STATE_SELECTED;
+ else if (! cell->can_activate)
+ state = GTK_STATE_INSENSITIVE;
else
state = GTK_STATE_NORMAL;
@@ -264,8 +292,8 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
window,
state, shadow,
cell_area, widget, "cellradio",
- cell_area->x + real_xoffset,
- cell_area->y + real_yoffset,
+ cell_area->x + x_offset,
+ cell_area->y + y_offset,
width, height);
}
else
@@ -274,8 +302,8 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
window,
state, shadow,
cell_area, widget, "cellcheck",
- cell_area->x + real_xoffset,
- cell_area->y + real_yoffset,
+ cell_area->x + x_offset,
+ cell_area->y + y_offset,
width, height);
}
}