[evolution/gtk3: 11/47] Adapt ECell classes to latest gtk+-3.0 API.



commit de589b2fc170f69153e8f343f495971cf1b315b6
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Nov 9 11:58:33 2010 -0500

    Adapt ECell classes to latest gtk+-3.0 API.

 widgets/table/e-cell-hbox.c   |   21 +++++--
 widgets/table/e-cell-pixbuf.c |    5 +-
 widgets/table/e-cell-popup.c  |   16 +++---
 widgets/table/e-cell-text.c   |   87 +++------------------------
 widgets/table/e-cell-text.h   |    3 -
 widgets/table/e-cell-toggle.c |    6 +--
 widgets/table/e-cell-tree.c   |  133 ++++++++++++++++++++++++----------------
 widgets/table/e-cell-vbox.c   |   33 +++++++---
 widgets/table/e-cell.c        |   12 ++--
 widgets/table/e-cell.h        |    4 +-
 10 files changed, 145 insertions(+), 175 deletions(-)
---
diff --git a/widgets/table/e-cell-hbox.c b/widgets/table/e-cell-hbox.c
index 1e6c4a6..ab087df 100644
--- a/widgets/table/e-cell-hbox.c
+++ b/widgets/table/e-cell-hbox.c
@@ -138,9 +138,16 @@ ecv_unrealize (ECellView *ecv)
  * ECell::draw method
  */
 static void
-ecv_draw (ECellView *ecell_view, GdkDrawable *drawable,
-	  gint model_col, gint view_col, gint row, ECellFlags flags,
-	  gint x1, gint y1, gint x2, gint y2)
+ecv_draw (ECellView *ecell_view,
+          cairo_t *cr,
+          gint model_col,
+          gint view_col,
+          gint row,
+          ECellFlags flags,
+          gint x1,
+          gint y1,
+          gint x2,
+          gint y2)
 {
 	ECellHboxView *hbox_view = (ECellHboxView *)ecell_view;
 
@@ -156,9 +163,11 @@ ecv_draw (ECellView *ecell_view, GdkDrawable *drawable,
 		if (width < hbox_view->def_size_cols[i])
 			width = hbox_view->def_size_cols[i];
 		printf("width of %d %d of %d\n", width,hbox_view->def_size_cols[i], allotted_width ); */
-		e_cell_draw (hbox_view->subcell_views[i], drawable,
-			     hbox_view->model_cols[i], view_col, row, flags,
-			     x1 + subcell_offset , y1, x1 + subcell_offset + width, y2);
+		e_cell_draw (
+			hbox_view->subcell_views[i], cr,
+			hbox_view->model_cols[i], view_col, row, flags,
+			x1 + subcell_offset , y1,
+			x1 + subcell_offset + width, y2);
 
 		subcell_offset += width; /* e_cell_max_width_by_row (hbox_view->subcell_views[i], hbox_view->model_cols[i], view_col, row); */
 	}
diff --git a/widgets/table/e-cell-pixbuf.c b/widgets/table/e-cell-pixbuf.c
index f37d4b8..b634683 100644
--- a/widgets/table/e-cell-pixbuf.c
+++ b/widgets/table/e-cell-pixbuf.c
@@ -109,14 +109,13 @@ pixbuf_kill_view (ECellView *ecell_view)
 }
 
 static void
-pixbuf_draw (ECellView *ecell_view, GdkDrawable *drawable,
+pixbuf_draw (ECellView *ecell_view, cairo_t *cr,
              gint model_col, gint view_col, gint row, ECellFlags flags,
              gint x1, gint y1, gint x2, gint y2)
 {
     GdkPixbuf *cell_pixbuf;
     gint real_x, real_y;
     gint pix_w, pix_h;
-    cairo_t *cr;
 
     cell_pixbuf = e_table_model_value_at (ecell_view->e_table_model,
 							  1, row);
@@ -147,12 +146,10 @@ pixbuf_draw (ECellView *ecell_view, GdkDrawable *drawable,
         real_y = y1;
     }
 
-    cr = gdk_cairo_create (drawable);
     cairo_save (cr);
     gdk_cairo_set_source_pixbuf (cr, cell_pixbuf, real_x, real_y);
     cairo_paint_with_alpha (cr, 1);
     cairo_restore (cr);
-    cairo_destroy (cr);
 }
 
 static gint
diff --git a/widgets/table/e-cell-popup.c b/widgets/table/e-cell-popup.c
index a8ca76b..39d7234 100644
--- a/widgets/table/e-cell-popup.c
+++ b/widgets/table/e-cell-popup.c
@@ -54,7 +54,7 @@ static void	ecp_kill_view		(ECellView	*ecv);
 static void	ecp_realize		(ECellView	*ecv);
 static void	ecp_unrealize		(ECellView	*ecv);
 static void	ecp_draw		(ECellView	*ecv,
-					 GdkDrawable	*drawable,
+					 cairo_t	*cr,
 					 gint		 model_col,
 					 gint		 view_col,
 					 gint		 row,
@@ -247,7 +247,7 @@ ecp_unrealize (ECellView *ecv)
  * ECell::draw method
  */
 static void
-ecp_draw (ECellView *ecv, GdkDrawable *drawable,
+ecp_draw (ECellView *ecv, cairo_t *cr,
 	  gint model_col, gint view_col, gint row, ECellFlags flags,
 	  gint x1, gint y1, gint x2, gint y2)
 {
@@ -276,7 +276,7 @@ ecp_draw (ECellView *ecv, GdkDrawable *drawable,
 	if (show_popup_arrow) {
 		GtkStyle *style;
 
-		e_cell_draw (ecp_view->child_view, drawable, model_col,
+		e_cell_draw (ecp_view->child_view, cr, model_col,
 			     view_col, row, flags,
 			     x1, y1, x2 - E_CELL_POPUP_ARROW_WIDTH, y2);
 
@@ -292,20 +292,20 @@ ecp_draw (ECellView *ecv, GdkDrawable *drawable,
 
 		style = gtk_widget_get_style (canvas);
 
-		gtk_paint_box (style, drawable,
+		gtk_paint_box (style, cr,
 			       GTK_STATE_NORMAL, shadow,
-			       &rect, canvas, "ecellpopup",
+			       canvas, "ecellpopup",
 			       rect.x, rect.y, rect.width, rect.height);
-		gtk_paint_arrow (style, drawable,
+		gtk_paint_arrow (style, cr,
 				 GTK_STATE_NORMAL, GTK_SHADOW_NONE,
-				 &rect, canvas, NULL,
+				 canvas, NULL,
 				 GTK_ARROW_DOWN, TRUE,
 				 rect.x + E_CELL_POPUP_ARROW_XPAD,
 				 rect.y + E_CELL_POPUP_ARROW_YPAD,
 				 rect.width - E_CELL_POPUP_ARROW_XPAD * 2,
 				 rect.height - E_CELL_POPUP_ARROW_YPAD * 2);
 	} else {
-		e_cell_draw (ecp_view->child_view, drawable, model_col,
+		e_cell_draw (ecp_view->child_view, cr, model_col,
 			     view_col, row, flags, x1, y1, x2, y2);
 	}
 }
diff --git a/widgets/table/e-cell-text.c b/widgets/table/e-cell-text.c
index f44c4a2..62d7485 100644
--- a/widgets/table/e-cell-text.c
+++ b/widgets/table/e-cell-text.c
@@ -197,8 +197,6 @@ static void _get_tep (CellEdit *edit);
 static gint get_position_from_xy (CellEdit *edit, gint x, gint y);
 static gboolean _blink_scroll_timeout (gpointer data);
 
-static void ect_free_color (gchar *color_spec, GdkColor *color, GdkColormap *colormap);
-static GdkColor* e_cell_text_get_color (ECellTextView *cell_view, gchar *color_spec);
 static void e_cell_text_preedit_changed_cb (GtkIMContext *context, ECellTextView *text_view);
 static void e_cell_text_commit_cb (GtkIMContext *context, const gchar  *str, ECellTextView *text_view);
 static gboolean e_cell_text_retrieve_surrounding_cb (GtkIMContext *context, ECellTextView *text_view);
@@ -379,8 +377,6 @@ static void
 ect_unrealize (ECellView *ecv)
 {
 	ECellTextView *text_view = (ECellTextView *) ecv;
-	ECellText *ect = (ECellText*) ecv->ecell;
-	GdkColormap *colormap;
 
 	if (text_view->edit) {
 		ect_cancel_edit (text_view);
@@ -388,34 +384,11 @@ ect_unrealize (ECellView *ecv)
 
 	gdk_cursor_unref (text_view->i_cursor);
 
-	if (ect->colors) {
-		colormap = gtk_widget_get_colormap (GTK_WIDGET (text_view->canvas));
-		g_hash_table_foreach (ect->colors, (GHFunc) ect_free_color,
-				      colormap);
-		g_hash_table_destroy (ect->colors);
-		ect->colors = NULL;
-	}
-
 	if (E_CELL_CLASS (e_cell_text_parent_class)->unrealize)
 		(* E_CELL_CLASS (e_cell_text_parent_class)->unrealize) (ecv);
 
 }
 
-static void
-ect_free_color (gchar *color_spec, GdkColor *color, GdkColormap *colormap)
-{
-	g_free (color_spec);
-
-	/* This frees the color. Note we don't free it if it is the special
-	   value. */
-	if (color != (GdkColor*) 1) {
-		gdk_colormap_free_colors (colormap, color, 1);
-
-		/* This frees the memory for the GdkColor. */
-		gdk_color_free (color);
-	}
-}
-
 static PangoAttrList*
 build_attr_list (ECellTextView *text_view, gint row, gint text_length)
 {
@@ -701,7 +674,7 @@ get_vertical_spacing (GtkWidget *canvas)
  * ECell::draw method
  */
 static void
-ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
+ect_draw (ECellView *ecell_view, cairo_t *cr,
 	  gint model_col, gint view_col, gint row, ECellFlags flags,
 	  gint x1, gint y1, gint x2, gint y2)
 {
@@ -713,14 +686,11 @@ ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
 	GtkWidget *canvas = GTK_WIDGET (text_view->canvas);
 	GtkStyle *style;
 	gint x_origin, y_origin, vspacing;
-        cairo_t *cr;
 
 	style = gtk_widget_get_style (canvas);
 
 	selected = flags & E_CELL_SELECTED;
 
-        cr = gdk_cairo_create (drawable);
-
 	if (selected) {
 		if (gtk_widget_has_focus (canvas))
 			gdk_cairo_set_source_color (cr, &style->fg[GTK_STATE_SELECTED]);
@@ -731,14 +701,13 @@ ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
 
 		if (ect->color_column != -1) {
 			gchar *color_spec;
-			GdkColor *cell_foreground;
-
-			color_spec = e_table_model_value_at (ecell_view->e_table_model,
-							     ect->color_column, row);
-			cell_foreground = e_cell_text_get_color (text_view,
-								 color_spec);
-			if (cell_foreground)
-				gdk_cairo_set_source_color (cr, cell_foreground);
+			GdkColor color;
+
+			color_spec = e_table_model_value_at (
+				ecell_view->e_table_model,
+				ect->color_column, row);
+			if (gdk_color_parse (color_spec, &color))
+				gdk_cairo_set_source_color (cr, &color);
 		}
 	}
 
@@ -804,7 +773,6 @@ ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
 	}
 
 	g_object_unref (layout);
-        cairo_destroy (cr);
 }
 
 /*
@@ -2473,45 +2441,6 @@ _get_tep (CellEdit *edit)
 	}
 }
 
-static GdkColor*
-e_cell_text_get_color (ECellTextView *cell_view, gchar *color_spec)
-{
-	ECellText *ect = E_CELL_TEXT (((ECellView*) cell_view)->ecell);
-	GdkColormap *colormap;
-	GdkColor *color, tmp_color;
-
-	/* If the color spec is NULL we use the default color. */
-	if (color_spec == NULL)
-		return NULL;
-
-	/* Create the hash table if we haven't already. */
-	if (!ect->colors)
-		ect->colors = g_hash_table_new (g_str_hash, g_str_equal);
-
-	/* See if we've already allocated the color. Note that we use a
-	   special value of (GdkColor*) 1 in the hash to indicate that we've
-	   already tried and failed to allocate the color, so we don't keep
-	   trying to allocate it. */
-	color = g_hash_table_lookup (ect->colors, color_spec);
-	if (color == (GdkColor*) 1)
-		return NULL;
-	if (color)
-		return color;
-
-	/* Try to parse the color. */
-	if (gdk_color_parse (color_spec, &tmp_color)) {
-		colormap = gtk_widget_get_colormap (GTK_WIDGET (cell_view->canvas));
-
-		/* Try to allocate the color. */
-		if (gdk_colormap_alloc_color (colormap, &tmp_color, FALSE, TRUE))
-			color = gdk_color_copy (&tmp_color);
-	}
-
-	g_hash_table_insert (ect->colors, g_strdup (color_spec),
-			     color ? color : (GdkColor*) 1);
-	return color;
-}
-
 /**
  * e_cell_text_set_selection:
  * @cell_view: the given cell view
diff --git a/widgets/table/e-cell-text.h b/widgets/table/e-cell-text.h
index 758e6d7..399dbe3 100644
--- a/widgets/table/e-cell-text.h
+++ b/widgets/table/e-cell-text.h
@@ -91,9 +91,6 @@ struct _ECellText {
 	   See the XParseColor man page for the formats available. */
 	gint color_column;
 	gint bg_color_column;
-
-	/* This stores the colors we have allocated. */
-	GHashTable *colors;
 };
 
 struct _ECellTextClass {
diff --git a/widgets/table/e-cell-toggle.c b/widgets/table/e-cell-toggle.c
index e5206a9..4d98fd0 100644
--- a/widgets/table/e-cell-toggle.c
+++ b/widgets/table/e-cell-toggle.c
@@ -170,7 +170,7 @@ cell_toggle_kill_view (ECellView *ecell_view)
 
 static void
 cell_toggle_draw (ECellView *ecell_view,
-                  GdkDrawable *drawable,
+                  cairo_t *cr,
                   gint model_col,
                   gint view_col,
                   gint row,
@@ -183,7 +183,6 @@ cell_toggle_draw (ECellView *ecell_view,
 	ECellTogglePrivate *priv;
 	GdkPixbuf *image;
 	gint x, y;
-	cairo_t *cr;
 
 	const gint value = GPOINTER_TO_INT (
 		 e_table_model_value_at (ecell_view->e_table_model, model_col, row));
@@ -208,13 +207,10 @@ cell_toggle_draw (ECellView *ecell_view,
 	else
 		y = y1 + ((y2 - y1) - gdk_pixbuf_get_height (image)) / 2;
 
-	cr = gdk_cairo_create (drawable);
 	cairo_save (cr);
 	gdk_cairo_set_source_pixbuf (cr, image, x, y);
 	cairo_paint_with_alpha (cr, 1);
 	cairo_restore (cr);
-	cairo_destroy (cr);
-
 }
 
 static void
diff --git a/widgets/table/e-cell-tree.c b/widgets/table/e-cell-tree.c
index 5771cbc..f08c580 100644
--- a/widgets/table/e-cell-tree.c
+++ b/widgets/table/e-cell-tree.c
@@ -126,8 +126,8 @@ ect_new_view (ECell *ecell, ETableModel *table_model, gpointer e_table_item_view
 	tree_view->cell_view.ecell = ecell;
 	tree_view->cell_view.e_table_model = table_model;
 	tree_view->cell_view.e_table_item_view = e_table_item_view;
-        tree_view->cell_view.kill_view_cb = NULL;
-        tree_view->cell_view.kill_view_cb_data = NULL;
+	tree_view->cell_view.kill_view_cb = NULL;
+	tree_view->cell_view.kill_view_cb_data = NULL;
 
 	/* create our subcell view */
 	tree_view->subcell_view = e_cell_new_view (ect->subcell, table_model, e_table_item_view /* XXX */);
@@ -145,11 +145,11 @@ ect_kill_view (ECellView *ecv)
 {
 	ECellTreeView *tree_view = (ECellTreeView *) ecv;
 
-        if (tree_view->cell_view.kill_view_cb)
-            (tree_view->cell_view.kill_view_cb)(ecv, tree_view->cell_view.kill_view_cb_data);
+	if (tree_view->cell_view.kill_view_cb)
+	    (tree_view->cell_view.kill_view_cb)(ecv, tree_view->cell_view.kill_view_cb_data);
 
-        if (tree_view->cell_view.kill_view_cb_data)
-            g_list_free (tree_view->cell_view.kill_view_cb_data);
+	if (tree_view->cell_view.kill_view_cb_data)
+	    g_list_free (tree_view->cell_view.kill_view_cb_data);
 
 	/* kill our subcell view */
 	e_cell_kill_view (tree_view->subcell_view);
@@ -188,7 +188,11 @@ ect_unrealize (ECellView *ecv)
 }
 
 static void
-draw_expander (ECellTreeView *ectv, GdkDrawable *drawable, GtkExpanderStyle expander_style, GtkStateType state, GdkRectangle *rect)
+draw_expander (ECellTreeView *ectv,
+               cairo_t *cr,
+               GtkExpanderStyle expander_style,
+               GtkStateType state,
+               GdkRectangle *rect)
 {
 	GtkStyle *style;
 	GtkWidget *tree;
@@ -200,7 +204,7 @@ draw_expander (ECellTreeView *ectv, GdkDrawable *drawable, GtkExpanderStyle expa
 	gtk_widget_style_get (tree, "expander_size", &exp_size, NULL);
 
 	gtk_paint_expander (
-		style, drawable, state, rect, tree, "treeview",
+		style, cr, state, tree, "treeview",
 		rect->x + rect->width - exp_size / 2,
 		rect->y + rect->height / 2, expander_style);
 }
@@ -209,9 +213,16 @@ draw_expander (ECellTreeView *ectv, GdkDrawable *drawable, GtkExpanderStyle expa
  * ECell::draw method
  */
 static void
-ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
-	  gint model_col, gint view_col, gint row, ECellFlags flags,
-	  gint x1, gint y1, gint x2, gint y2)
+ect_draw (ECellView *ecell_view,
+          cairo_t *cr,
+          gint model_col,
+          gint view_col,
+          gint row,
+          ECellFlags flags,
+          gint x1,
+          gint y1,
+          gint x2,
+          gint y2)
 {
 	ECellTreeView *tree_view = (ECellTreeView *)ecell_view;
 	ETreeModel *tree_model = e_cell_tree_get_tree_model (ecell_view->e_table_model, row);
@@ -221,11 +232,8 @@ ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
 	GtkWidget *canvas = GTK_WIDGET (tree_view->canvas);
 	GtkStyle *style;
 	gboolean selected;
-        cairo_t *cr;
 	gint offset, subcell_offset;
 
-        cr = gdk_cairo_create (drawable);
-
 	style = gtk_widget_get_style (canvas);
 
 	selected = flags & E_CELL_SELECTED;
@@ -265,16 +273,16 @@ ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
 			gboolean expanded = e_tree_table_adapter_node_is_expanded (tree_table_adapter, node);
 			GdkRectangle r;
 
-                        r = rect;
-                        r.width -= node_image_width + 2;
-                        draw_expander (tree_view, drawable, expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED, GTK_STATE_NORMAL, &r);
+			r = rect;
+			r.width -= node_image_width + 2;
+			draw_expander (tree_view, cr, expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED, GTK_STATE_NORMAL, &r);
 		}
 
 		if (node_image) {
-                        gdk_cairo_set_source_pixbuf (cr, node_image,
-                                                     x1 + subcell_offset,
-                                                     y1 + (y2 - y1) / 2 - node_image_height / 2);
-                        cairo_paint (cr);
+			gdk_cairo_set_source_pixbuf (cr, node_image,
+						     x1 + subcell_offset,
+						     y1 + (y2 - y1) / 2 - node_image_height / 2);
+			cairo_paint (cr);
 
 			subcell_offset += node_image_width;
 		}
@@ -282,11 +290,9 @@ ect_draw (ECellView *ecell_view, GdkDrawable *drawable,
 
 	/* Now cause our subcell to draw its contents, shifted by
 	   subcell_offset pixels */
-	e_cell_draw (tree_view->subcell_view, drawable,
+	e_cell_draw (tree_view->subcell_view, cr,
 		     model_col, view_col, row, flags,
 		     x1 + subcell_offset, y1, x2, y2);
-
-        cairo_destroy (cr);
 }
 
 static void
@@ -349,6 +355,7 @@ animate_expander (gpointer data)
 	GtkLayout *layout;
 	GdkWindow *window;
 	animate_closure_t *closure = (animate_closure_t *) data;
+	cairo_t *cr;
 
 	if (closure->finish) {
 		e_tree_table_adapter_node_set_expanded (closure->etta, closure->node, !closure->expanded);
@@ -360,13 +367,17 @@ animate_expander (gpointer data)
 	layout = GTK_LAYOUT (closure->ectv->canvas);
 	window = gtk_layout_get_bin_window (layout);
 
+	cr = gdk_cairo_create (window);
+
 	draw_expander (
-		closure->ectv, window, closure->expanded ?
+		closure->ectv, cr, closure->expanded ?
 		GTK_EXPANDER_SEMI_COLLAPSED :
 		GTK_EXPANDER_SEMI_EXPANDED,
 		GTK_STATE_NORMAL, &closure->area);
 	closure->finish = TRUE;
 
+	cairo_destroy (cr);
+
 	return TRUE;
 }
 
@@ -394,30 +405,34 @@ ect_event (ECellView *ecell_view, GdkEvent *event, gint model_col, gint view_col
 		if (event_in_expander (event, offset, 0)) {
 			if (e_tree_model_node_is_expandable (tree_model, node)) {
 				gboolean expanded = e_tree_table_adapter_node_is_expanded (etta, node);
-                                gint tmp_row = row;
-                                GdkRectangle area;
-                                animate_closure_t *closure = g_new0 (animate_closure_t, 1);
-                                gint hgt;
-
-                                e_table_item_get_cell_geometry (tree_view->cell_view.e_table_item_view,
-                                                        &tmp_row, &view_col, &area.x, &area.y, NULL, &area.height);
-                                area.width = offset - 2;
-                                hgt = e_cell_height (ecell_view, model_col, view_col, row);
-
-                                if (hgt != area.height) /* Composite cells */
-                                        area.height += hgt;
-
-                                draw_expander (
-                                        tree_view, window, expanded ?
-                                        GTK_EXPANDER_SEMI_EXPANDED :
-                                        GTK_EXPANDER_SEMI_COLLAPSED,
-                                        GTK_STATE_NORMAL, &area);
-                                closure->ectv = tree_view;
-                                closure->etta = etta;
-                                closure->node = node;
-                                closure->expanded = expanded;
-                                closure->area = area;
-                                tree_view->animate_timeout = g_timeout_add (50, animate_expander, closure);
+				gint tmp_row = row;
+				GdkRectangle area;
+				animate_closure_t *closure = g_new0 (animate_closure_t, 1);
+				cairo_t *cr;
+				gint hgt;
+
+				e_table_item_get_cell_geometry (tree_view->cell_view.e_table_item_view,
+							&tmp_row, &view_col, &area.x, &area.y, NULL, &area.height);
+				area.width = offset - 2;
+				hgt = e_cell_height (ecell_view, model_col, view_col, row);
+
+				if (hgt != area.height) /* Composite cells */
+					area.height += hgt;
+
+				cr = gdk_cairo_create (window);
+				draw_expander (
+					tree_view, cr, expanded ?
+					GTK_EXPANDER_SEMI_EXPANDED :
+					GTK_EXPANDER_SEMI_COLLAPSED,
+					GTK_STATE_NORMAL, &area);
+				cairo_destroy (cr);
+
+				closure->ectv = tree_view;
+				closure->etta = etta;
+				closure->node = node;
+				closure->expanded = expanded;
+				closure->area = area;
+				tree_view->animate_timeout = g_timeout_add (50, animate_expander, closure);
 				return TRUE;
 			}
 		}
@@ -434,14 +449,20 @@ ect_event (ECellView *ecell_view, GdkEvent *event, gint model_col, gint view_col
 
 			if (tree_view->prelit ^ in_expander) {
 				gint tmp_row = row;
+				cairo_t *cr;
+
 				e_table_item_get_cell_geometry (tree_view->cell_view.e_table_item_view,
 								&tmp_row, &view_col, &area.x, &area.y, NULL, &area.height);
 				area.width = offset - 2;
+
+				cr = gdk_cairo_create (window);
 				draw_expander (
-					tree_view, window,
+					tree_view, cr,
 					e_tree_table_adapter_node_is_expanded (etta, node) ?
 					GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
 					in_expander ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL, &area);
+				cairo_destroy (cr);
+
 				tree_view->prelit = in_expander;
 				return TRUE;
 			}
@@ -454,14 +475,20 @@ ect_event (ECellView *ecell_view, GdkEvent *event, gint model_col, gint view_col
 		if (tree_view->prelit) {
 			gint tmp_row = row;
 			GdkRectangle area;
+			cairo_t *cr;
+
 			e_table_item_get_cell_geometry (tree_view->cell_view.e_table_item_view,
 							&tmp_row, &view_col, &area.x, &area.y, NULL, &area.height);
 			area.width = offset - 2;
+
+			cr = gdk_cairo_create (window);
 			draw_expander (
-				tree_view, window,
+				tree_view, cr,
 				e_tree_table_adapter_node_is_expanded (etta, node) ?
 				GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
 				GTK_STATE_NORMAL, &area);
+			cairo_destroy (cr);
+
 			tree_view->prelit = FALSE;
 		}
 		return TRUE;
@@ -531,8 +558,8 @@ ect_max_width (ECellView *ecell_view, gint model_col, gint view_col)
 		expanded = e_tree_table_adapter_node_is_expanded (tree_table_adapter, node);
 
 		/* This is unnecessary since this is already handled
-                   by the offset_of_node function.  If that changes,
-                   this will have to change too. */
+		 * by the offset_of_node function.  If that changes,
+		 * this will have to change too. */
 
 		if (expandable) {
 			GdkPixbuf *image;
diff --git a/widgets/table/e-cell-vbox.c b/widgets/table/e-cell-vbox.c
index f752e14..6b6495f 100644
--- a/widgets/table/e-cell-vbox.c
+++ b/widgets/table/e-cell-vbox.c
@@ -131,9 +131,16 @@ ecv_unrealize (ECellView *ecv)
  * ECell::draw method
  */
 static void
-ecv_draw (ECellView *ecell_view, GdkDrawable *drawable,
-	  gint model_col, gint view_col, gint row, ECellFlags flags,
-	  gint x1, gint y1, gint x2, gint y2)
+ecv_draw (ECellView *ecell_view,
+          cairo_t *cr,
+          gint model_col,
+          gint view_col,
+          gint row,
+          ECellFlags flags,
+          gint x1,
+          gint y1,
+          gint x2,
+          gint y2)
 {
 	ECellVboxView *vbox_view = (ECellVboxView *)ecell_view;
 
@@ -143,12 +150,20 @@ ecv_draw (ECellView *ecell_view, GdkDrawable *drawable,
 	for (i = 0; i < vbox_view->subcell_view_count; i++) {
 		/* Now cause our subcells to draw their contents,
 		   shifted by subcell_offset pixels */
-		gint height = e_cell_height (vbox_view->subcell_views[i], vbox_view->model_cols[i], view_col, row);
-		e_cell_draw (vbox_view->subcell_views[i], drawable,
-			     vbox_view->model_cols[i], view_col, row, flags,
-			     x1, y1 + subcell_offset, x2, y1 + subcell_offset + height);
-
-		subcell_offset += e_cell_height (vbox_view->subcell_views[i], vbox_view->model_cols[i], view_col, row);
+		gint height;
+
+		height = e_cell_height (
+			vbox_view->subcell_views[i],
+			vbox_view->model_cols[i], view_col, row);
+		e_cell_draw (
+			vbox_view->subcell_views[i], cr,
+			vbox_view->model_cols[i], view_col, row, flags,
+			x1, y1 + subcell_offset, x2,
+			y1 + subcell_offset + height);
+
+		subcell_offset += e_cell_height (
+			vbox_view->subcell_views[i],
+			vbox_view->model_cols[i], view_col, row);
 	}
 }
 
diff --git a/widgets/table/e-cell.c b/widgets/table/e-cell.c
index c45ed68..d1f61c8 100644
--- a/widgets/table/e-cell.c
+++ b/widgets/table/e-cell.c
@@ -54,7 +54,7 @@ ec_unrealize (ECellView *e_cell)
 }
 
 static void
-ec_draw (ECellView *ecell_view, GdkDrawable *drawable,
+ec_draw (ECellView *ecell_view, cairo_t *cr,
 	 gint model_col, gint view_col, gint row, ECellFlags flags,
 	 gint x1, gint y1, gint x2, gint y2)
 {
@@ -240,7 +240,7 @@ e_cell_unrealize (ECellView *ecell_view)
 /**
  * e_cell_draw:
  * @ecell_view: the ECellView to redraw
- * @drawable: draw desination
+ * @cr: a Cairo context
  * @model_col: the column in the model being drawn.
  * @view_col: the column in the view being drawn (what the model maps to).
  * @row: the row being drawn
@@ -250,14 +250,14 @@ e_cell_unrealize (ECellView *ecell_view)
  * @x2: boudary for the rendering
  * @y2: boudary for the rendering
  *
- * This instructs the ECellView to render itself into the drawable.  The
- * region to be drawn in given by (x1,y1)-(x2,y2).
+ * This instructs the ECellView to render itself into the Cairo context.
+ * The region to be drawn in given by (x1,y1)-(x2,y2).
  *
  * The most important flags are %E_CELL_SELECTED and %E_CELL_FOCUSED, other
  * flags include alignments and justifications.
  */
 void
-e_cell_draw (ECellView *ecell_view, GdkDrawable *drawable,
+e_cell_draw (ECellView *ecell_view, cairo_t *cr,
 	     gint model_col, gint view_col, gint row, ECellFlags flags,
 	     gint x1, gint y1, gint x2, gint y2)
 {
@@ -265,7 +265,7 @@ e_cell_draw (ECellView *ecell_view, GdkDrawable *drawable,
 	g_return_if_fail (row >= 0);
 	g_return_if_fail (row < e_table_model_row_count (ecell_view->e_table_model));
 
-	ECVIEW_EC_CLASS (ecell_view)->draw (ecell_view, drawable, model_col, view_col, row, flags, x1, y1, x2, y2);
+	ECVIEW_EC_CLASS (ecell_view)->draw (ecell_view, cr, model_col, view_col, row, flags, x1, y1, x2, y2);
 }
 
 /**
diff --git a/widgets/table/e-cell.h b/widgets/table/e-cell.h
index f38e47b..d190d88 100644
--- a/widgets/table/e-cell.h
+++ b/widgets/table/e-cell.h
@@ -92,7 +92,7 @@ typedef struct {
 	void       (*realize)          (ECellView *ecell_view);
 	void       (*unrealize)        (ECellView *ecell_view);
 
-	void	   (*draw)             (ECellView *ecell_view, GdkDrawable *drawable,
+	void	   (*draw)             (ECellView *ecell_view, cairo_t *cr,
 					gint model_col, gint view_col, gint row,
 					ECellFlags flags, gint x1, gint y1, gint x2, gint y2);
 	gint	   (*event)            (ECellView *ecell_view, GdkEvent *event, gint model_col, gint view_col, gint row, ECellFlags flags, ECellActions *actions);
@@ -137,7 +137,7 @@ gint       e_cell_event                         (ECellView         *ecell_view,
 void       e_cell_realize                       (ECellView         *ecell_view);
 void       e_cell_unrealize                     (ECellView         *ecell_view);
 void       e_cell_draw                          (ECellView         *ecell_view,
-						 GdkDrawable       *drawable,
+						 cairo_t           *cr,
 						 gint                model_col,
 						 gint                view_col,
 						 gint                row,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]