[anjal] Don't allow Gtk to paint a check renderer, but paint a circle.



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]