diff options
author | Jonathan Blandford <jrb@redhat.com> | 2001-03-15 23:21:39 +0000 |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2001-03-15 23:21:39 +0000 |
commit | e4d1660042a437b041422ac442ee4845fbf7e6b6 (patch) | |
tree | 10b09bc64b280eb911725d9060d0e721419b961d /gtk/gtkcellrenderertoggle.c | |
parent | 872efdd9a527e472e5f2724138344fdef3839df4 (diff) | |
download | gtk+-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.c | 52 |
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); } } |