[anjal] Don't allow Gtk to paint a check renderer, but paint a circle.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: svn-commits-list gnome org
- Subject: [anjal] Don't allow Gtk to paint a check renderer, but paint a circle.
- Date: Thu, 19 Mar 2009 23:08:40 -0400 (EDT)
commit f68434156ff638daf0d51ed2f916c6eb91575222
Author: Srinivasa Ragavan <sragavan novell com>
Date: Fri Mar 20 08:07:51 2009 +0530
Don't allow Gtk to paint a check renderer, but paint a circle.
Also fixed the placing of 'x more in thread' 's drawing.
---
src/custom-cell-renderer-hbox.c | 59 ++++++++++++++++++++++++++++++++------
1 files changed, 49 insertions(+), 10 deletions(-)
diff --git a/src/custom-cell-renderer-hbox.c b/src/custom-cell-renderer-hbox.c
index 11332b2..777a7b8 100644
--- a/src/custom-cell-renderer-hbox.c
+++ b/src/custom-cell-renderer-hbox.c
@@ -290,11 +290,6 @@ custom_cell_renderer_hbox_get_size (GtkCellRenderer *cell,
tmp = cellprogress->start_children;
while (tmp) {
GtkCellRenderer *child = (GtkCellRenderer *) tmp->data;
- GValue value = { 0, };
-
- gtk_cell_renderer_get_size (child, widget, cell_area, &cx, &cy, &cw, &ch);
- g_value_init (&value, G_TYPE_STRING);
- g_object_get_property ((GObject *)child, (gchar *) "text", &value);
if (ch > calc_height)
calc_height = ch;
@@ -306,6 +301,7 @@ custom_cell_renderer_hbox_get_size (GtkCellRenderer *cell,
yo = cy;
tmp = tmp->next;
}
+
tmp = cellprogress->end_children;
while (tmp) {
GtkCellRenderer *child = (GtkCellRenderer *) tmp->data;
@@ -381,6 +377,33 @@ draw_rounded_rectangle (cairo_t *cr, gdouble x, gdouble y, gdouble width, gdoubl
}
static void
+draw_circle (cairo_t *cr, gdouble x, gdouble y, gdouble width, gdouble height)
+{
+ int radius = width ? (width/2) : 3;
+
+ if (width < 1 || height < 1)
+ return;
+
+ /* this allows for calculating end co-ordinates */
+ radius = radius - 2;
+ if (radius <= 0)
+ radius = 3;
+ width--;
+ height--;
+
+ if (width < RADIUS * 2)
+ {
+ radius = width / 2;
+ }
+ else if (height < RADIUS * 2)
+ {
+ radius = height / 2;
+ }
+
+ cairo_arc (cr, x+radius, y+(radius/1), radius, G_PI*2, 05 *G_PI);
+}
+
+static void
custom_cell_renderer_hbox_render (GtkCellRenderer *cell,
GdkWindow *window,
GtkWidget *widget,
@@ -395,6 +418,7 @@ custom_cell_renderer_hbox_render (GtkCellRenderer *cell,
gint x_offset, y_offset;
GList *tmp;
int max_width=0;
+
custom_cell_renderer_hbox_get_size (cell, widget, cell_area,
&x_offset, &y_offset,
&width, &height);
@@ -409,7 +433,7 @@ custom_cell_renderer_hbox_render (GtkCellRenderer *cell,
tmp = tmp->next;
}
-
+
tmp = cellprogress->start_children;
cell_area->x = (cell_area->x /2) + cell->xpad ;
cell_area->width = cell_area->width - max_width - cell->xpad;
@@ -418,12 +442,27 @@ custom_cell_renderer_hbox_render (GtkCellRenderer *cell,
gint cx, cy, cw, ch;
gtk_cell_renderer_get_size (child, widget, cell_area, &cx, &cy, &cw, &ch);
- gtk_cell_renderer_render (child, window, widget, background_area, cell_area, expose_area, flags);
- cell_area->x += cw + (2* child->xpad);
+ if (GTK_IS_CELL_RENDERER_TOGGLE(child)) {
+ gboolean state;
+ cairo_t *cr;
+ extern GdkColor *pcolor_sel;
+ cr = gdk_cairo_create (window);
+ gdk_cairo_set_source_color (cr, pcolor_sel);
+
+ g_object_get (child, "active", &state, NULL);
+ if (state){
+ draw_circle (cr, cell_area->x+cell->xpad, cell_area->y+(cy)+(1.5*cell->ypad), cw, ch);
+ cairo_fill(cr);
+ cell_area->x += cw + (child->xpad);
+ }
+ cairo_destroy (cr);
+ } else {
+ gtk_cell_renderer_render (child, window, widget, background_area, cell_area, expose_area, flags);
+ cell_area->x += cw + (2* child->xpad);
+ }
tmp = tmp->next;
}
-
cell_area->width += max_width+cell->xpad;
tmp = cellprogress->end_children;
cell_area->x = cell_area->width + (cell->xpad);
@@ -440,7 +479,7 @@ custom_cell_renderer_hbox_render (GtkCellRenderer *cell,
extern GdkColor *pcolor_sel;
cr = gdk_cairo_create (window);
gdk_cairo_set_source_color (cr, pcolor_sel);
- draw_rounded_rectangle (cr, cell_area->x, cell_area->y+ch+(4*cell->ypad), cw, ch);
+ draw_rounded_rectangle (cr, cell_area->x, cell_area->y+cy+(1*cell->ypad), cw, ch);
cairo_fill(cr);
gtk_cell_renderer_render (child, window, widget, background_area, cell_area, expose_area, flags);
cairo_destroy (cr);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]