[evolution] Avoid GtkStyle-based "paint" functions.



commit 7c2e05401bfed572a7253d3da24a30306497d570
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Nov 30 13:36:38 2012 -0500

    Avoid GtkStyle-based "paint" functions.
    
    Use GtkStyleContext-based "render" functions instead.
    
       gtk_paint_arrow()    --> gtk_render_arrow()
       gtk_paint_box()      --> gtk_render_background()
       gtk_paint_expander() --> gtk_render_expander()
       gtk_paint_flat_box() --> gtk_render_background()
       gtk_paint_shadow()   --> gtk_render_frame()
       gtk_paint_vline()    --> gtk_render_line()

 calendar/gui/e-meeting-time-sel.c |   39 +++++++------
 widgets/misc/e-calendar-item.c    |  110 +++++++++++++++++++++++--------------
 widgets/table/e-cell-popup.c      |   85 +++++++++++++++++------------
 widgets/table/e-cell-tree.c       |   44 +++++++++++++--
 widgets/text/e-reflow.c           |   41 +++++++++-----
 5 files changed, 203 insertions(+), 116 deletions(-)
---
diff --git a/calendar/gui/e-meeting-time-sel.c b/calendar/gui/e-meeting-time-sel.c
index 44f4f65..f3f8b3a 100644
--- a/calendar/gui/e-meeting-time-sel.c
+++ b/calendar/gui/e-meeting-time-sel.c
@@ -967,17 +967,20 @@ e_meeting_time_selector_draw_key_color (GtkWidget *darea,
 {
 	EMeetingTimeSelector * mts;
 	GtkAllocation allocation;
-	GtkStyle *style;
-
-	style = gtk_widget_get_style (darea);
-	gtk_widget_get_allocation (darea, &allocation);
+	GtkStyleContext *style_context;
 
 	mts = g_object_get_data (G_OBJECT (darea), "data");
 
-	gtk_paint_shadow (
-		style, cr, GTK_STATE_NORMAL,
-		GTK_SHADOW_IN, NULL, NULL, 0, 0,
-		allocation.width, allocation.height);
+	style_context = gtk_widget_get_style_context (darea);
+
+	gtk_widget_get_allocation (darea, &allocation);
+
+	gtk_render_frame (
+		style_context, cr,
+		(gdouble) 0,
+		(gdouble) 0,
+		(gdouble) allocation.width,
+		(gdouble) allocation.height);
 
 	if (color) {
 		gdk_cairo_set_source_color (cr, color);
@@ -1301,23 +1304,21 @@ e_meeting_time_selector_draw_shadow (EMeetingTimeSelector *mts,
                                      cairo_t *cr)
 {
 	GtkAllocation allocation;
-	GtkStyle *style;
-	gint x, y, w, h;
+	GtkStyleContext *style_context;
 
-	cairo_save (cr);
+	style_context = gtk_widget_get_style_context (GTK_WIDGET (mts));
 
 	/* Draw the shadow around the graphical displays. */
 	gtk_widget_get_allocation (mts->display_top, &allocation);
-	x = allocation.x - 2;
-	y = allocation.y - 2;
-	w = allocation.width + 4;
-	h = allocation.height + allocation.height + 4;
 
-	style = gtk_widget_get_style (GTK_WIDGET (mts));
+	cairo_save (cr);
 
-	gtk_paint_shadow (
-		style, cr, GTK_STATE_NORMAL,
-		GTK_SHADOW_IN, NULL, NULL, x, y, w, h);
+	gtk_render_frame (
+		style_context, cr,
+		(gdouble) allocation.x - 2,
+		(gdouble) allocation.y - 2,
+		(gdouble) allocation.width + 4,
+		(gdouble) allocation.height + allocation.height + 4);
 
 	cairo_restore (cr);
 }
diff --git a/widgets/misc/e-calendar-item.c b/widgets/misc/e-calendar-item.c
index 16ce645..96b3952 100644
--- a/widgets/misc/e-calendar-item.c
+++ b/widgets/misc/e-calendar-item.c
@@ -1051,13 +1051,14 @@ e_calendar_item_draw (GnomeCanvasItem *canvas_item,
                       gint height)
 {
 	ECalendarItem *calitem;
-	GtkStyle *style;
+	GtkWidget *widget;
+	GtkStyleContext *style_context;
 	gint char_height, row, col, row_y, bar_height, col_x;
-	gint xthickness, ythickness;
-	PangoFontDescription *font_desc;
+	const PangoFontDescription *font_desc;
 	PangoContext *pango_context;
 	PangoFontMetrics *font_metrics;
-	GdkColor base, bg;
+	GdkRGBA bg_color;
+	GtkBorder border;
 
 #if 0
 	g_print (
@@ -1065,13 +1066,17 @@ e_calendar_item_draw (GnomeCanvasItem *canvas_item,
 		x, y, width, height);
 #endif
 	calitem = E_CALENDAR_ITEM (canvas_item);
-	style = gtk_widget_get_style (GTK_WIDGET (canvas_item->canvas));
+
+	widget = GTK_WIDGET (canvas_item->canvas);
+	style_context = gtk_widget_get_style_context (widget);
 
 	/* Set up Pango prerequisites */
 	font_desc = calitem->font_desc;
 	if (!font_desc)
-		font_desc = style->font_desc;
-	pango_context = gtk_widget_get_pango_context (GTK_WIDGET (canvas_item->canvas));
+		font_desc = gtk_style_context_get_font (
+			style_context, GTK_STATE_FLAG_NORMAL);
+	pango_context = gtk_widget_get_pango_context (
+		GTK_WIDGET (canvas_item->canvas));
 	font_metrics = pango_context_get_metrics (
 		pango_context, font_desc,
 		pango_context_get_language (pango_context));
@@ -1079,15 +1084,16 @@ e_calendar_item_draw (GnomeCanvasItem *canvas_item,
 	char_height =
 		PANGO_PIXELS (pango_font_metrics_get_ascent (font_metrics)) +
 		PANGO_PIXELS (pango_font_metrics_get_descent (font_metrics));
-	xthickness = style->xthickness;
-	ythickness = style->ythickness;
 
-	base = style->base[GTK_STATE_NORMAL];
-	bg = style->bg[GTK_STATE_NORMAL];
+	gtk_style_context_get_background_color (
+		style_context, GTK_STATE_NORMAL, &bg_color);
+
+	gtk_style_context_get_border (
+		style_context, GTK_STATE_NORMAL, &border);
 
 	/* Clear the entire background. */
 	cairo_save (cr);
-	gdk_cairo_set_source_color (cr, &base);
+	gdk_cairo_set_source_rgba (cr, &bg_color);
 	cairo_rectangle (
 		cr, calitem->x1 - x, calitem->y1 - y,
 		calitem->x2 - calitem->x1 + 1,
@@ -1096,53 +1102,73 @@ e_calendar_item_draw (GnomeCanvasItem *canvas_item,
 	cairo_restore (cr);
 
 	/* Draw the shadow around the entire item. */
-	gtk_paint_shadow (
-		style, cr, GTK_STATE_NORMAL, GTK_SHADOW_IN,
-		NULL, "entry",
-		calitem->x1 - x, calitem->y1 - y,
-		calitem->x2 - calitem->x1 + 1,
-		calitem->y2 - calitem->y1 + 1);
+	gtk_style_context_save (style_context);
+	gtk_style_context_add_class (
+		style_context, GTK_STYLE_CLASS_ENTRY);
+	cairo_save (cr);
+	gtk_render_frame (
+		style_context, cr,
+		(gdouble) calitem->x1 - x,
+		(gdouble) calitem->y1 - y,
+		(gdouble) calitem->x2 - calitem->x1 + 1,
+		(gdouble) calitem->y2 - calitem->y1 + 1);
+	cairo_restore (cr);
+	gtk_style_context_restore (style_context);
 
-	row_y = canvas_item->y1 + ythickness;
-	bar_height = ythickness * 2
-		+ E_CALENDAR_ITEM_YPAD_ABOVE_MONTH_NAME + char_height
-		+ E_CALENDAR_ITEM_YPAD_BELOW_MONTH_NAME;
+	row_y = canvas_item->y1 + border.top;
+	bar_height =
+		border.top + border.bottom +
+		E_CALENDAR_ITEM_YPAD_ABOVE_MONTH_NAME + char_height +
+		E_CALENDAR_ITEM_YPAD_BELOW_MONTH_NAME;
 
 	for (row = 0; row < calitem->rows; row++) {
 		/* Draw the background for the title bars and the shadow around
 		 * it, and the vertical lines between columns. */
 
 		cairo_save (cr);
-		gdk_cairo_set_source_color (cr, &bg);
+		gdk_cairo_set_source_rgba (cr, &bg_color);
 		cairo_rectangle (
-			cr, calitem->x1 + xthickness - x, row_y - y,
-			calitem->x2 - calitem->x1 + 1
-			- xthickness * 2,
+			cr, calitem->x1 + border.left - x,
+			row_y - y,
+			calitem->x2 - calitem->x1 + 1 -
+			(border.left + border.right),
 			bar_height);
 		cairo_fill (cr);
 		cairo_restore (cr);
 
-		gtk_paint_shadow (
-			style, cr,
-			GTK_STATE_NORMAL, GTK_SHADOW_OUT,
-			NULL, "calendar-header",
-			calitem->x1 + xthickness - x, row_y - y,
-			calitem->x2 - calitem->x1 + 1
-			- xthickness * 2,
-			bar_height);
+		gtk_style_context_save (style_context);
+		gtk_style_context_add_class (
+			style_context, GTK_STYLE_CLASS_HEADER);
+		cairo_save (cr);
+		gtk_render_frame (
+			style_context, cr,
+			(gdouble) calitem->x1 + border.left - x,
+			(gdouble) row_y - y,
+			(gdouble) calitem->x2 - calitem->x1 + 1 -
+				(border.left + border.right),
+			(gdouble) bar_height);
+		cairo_restore (cr);
+		gtk_style_context_restore (style_context);
 
 		for (col = 0; col < calitem->cols; col++) {
 			if (col != 0) {
 				col_x = calitem->x1 + calitem->x_offset
 					+ calitem->month_width * col;
-				gtk_paint_vline (
-					style, cr,
-					GTK_STATE_NORMAL, NULL,
-					"calendar-separator",
-					row_y + ythickness + 1 - y,
-					row_y + bar_height
-					- ythickness - 2 - y,
-					col_x - 1 - x);
+
+				gtk_style_context_save (style_context);
+				gtk_style_context_add_class (
+					style_context,
+					GTK_STYLE_CLASS_SEPARATOR);
+				cairo_save (cr);
+				gtk_render_line (
+					style_context, cr,
+					(gdouble) col_x - 1 - x,
+					(gdouble) row_y + border.top + 1 - y,
+					(gdouble) row_y + bar_height -
+						border.bottom - 2 - y,
+					(gdouble) col_x - x);
+				cairo_restore (cr);
+				gtk_style_context_restore (style_context);
 			}
 
 			e_calendar_item_draw_month (
diff --git a/widgets/table/e-cell-popup.c b/widgets/table/e-cell-popup.c
index 0f54974..ce82170 100644
--- a/widgets/table/e-cell-popup.c
+++ b/widgets/table/e-cell-popup.c
@@ -43,9 +43,8 @@
 #include "e-table-item.h"
 #include <gtk/gtk.h>
 
-#define E_CELL_POPUP_ARROW_WIDTH	16
-#define E_CELL_POPUP_ARROW_XPAD		3
-#define E_CELL_POPUP_ARROW_YPAD		3
+#define E_CELL_POPUP_ARROW_SIZE		16
+#define E_CELL_POPUP_ARROW_PAD		3
 
 static void	e_cell_popup_dispose	(GObject	*object);
 
@@ -264,8 +263,6 @@ ecp_draw (ECellView *ecv,
 	ECellPopup *ecp = E_CELL_POPUP (ecv->ecell);
 	ECellPopupView *ecp_view = (ECellPopupView *) ecv;
 	GtkWidget *canvas;
-	GtkShadowType shadow;
-	GdkRectangle rect;
 	gboolean show_popup_arrow;
 
 	cairo_save (cr);
@@ -286,39 +283,57 @@ ecp_draw (ECellView *ecv,
 		ecp->popup_arrow_shown = show_popup_arrow;
 
 	if (show_popup_arrow) {
-		GtkStyle *style;
+		GtkStyleContext *style_context;
+		GdkRGBA color;
+		gint arrow_x;
+		gint arrow_y;
+		gint arrow_size;
+		gint midpoint_y;
 
 		e_cell_draw (
 			ecp_view->child_view, cr, model_col,
 			view_col, row, flags,
-			x1, y1, x2 - E_CELL_POPUP_ARROW_WIDTH, y2);
-
-		rect.x = x2 - E_CELL_POPUP_ARROW_WIDTH;
-		rect.y = y1 + 1;
-		rect.width = E_CELL_POPUP_ARROW_WIDTH;
-		rect.height = y2 - y1 - 2;
-
-		if (ecp->popup_shown)
-			shadow = GTK_SHADOW_IN;
-		else
-			shadow = GTK_SHADOW_OUT;
-
-		style = gtk_widget_get_style (canvas);
-
-		gtk_paint_box (
-			style, cr,
-			GTK_STATE_NORMAL, shadow,
-			canvas, "ecellpopup",
-			rect.x, rect.y, rect.width, rect.height);
-		gtk_paint_arrow (
-			style, cr,
-			GTK_STATE_NORMAL, GTK_SHADOW_NONE,
-			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);
+			x1, y1, x2 - E_CELL_POPUP_ARROW_SIZE, y2);
+
+		midpoint_y = y1 + ((y2 - y1 + 1) / 2);
+
+		arrow_x = x2 - E_CELL_POPUP_ARROW_SIZE;
+		arrow_y = midpoint_y - E_CELL_POPUP_ARROW_SIZE / 2;
+		arrow_size = E_CELL_POPUP_ARROW_SIZE;
+
+		style_context = gtk_widget_get_style_context (canvas);
+
+		gtk_style_context_save (style_context);
+
+		gtk_style_context_add_class (
+			style_context, GTK_STYLE_CLASS_CELL);
+
+		gtk_style_context_get_background_color (
+			style_context, GTK_STATE_FLAG_NORMAL, &color);
+
+		cairo_save (cr);
+		gdk_cairo_set_source_rgba (cr, &color);
+		gtk_render_background (
+			style_context, cr,
+			(gdouble) arrow_x,
+			(gdouble) arrow_y,
+			(gdouble) arrow_size,
+			(gdouble) arrow_size);
+		cairo_restore (cr);
+
+		arrow_x += E_CELL_POPUP_ARROW_PAD;
+		arrow_y += E_CELL_POPUP_ARROW_PAD;
+		arrow_size -= (E_CELL_POPUP_ARROW_PAD * 2);
+
+		cairo_save (cr);
+		gtk_render_arrow (
+			style_context, cr, G_PI,
+			(gdouble) arrow_x,
+			(gdouble) arrow_y,
+			(gdouble) arrow_size);
+		cairo_restore (cr);
+
+		gtk_style_context_restore (style_context);
 	} else {
 		e_cell_draw (
 			ecp_view->child_view, cr, model_col,
@@ -356,7 +371,7 @@ ecp_event (ECellView *ecv,
 
 			/* FIXME: The event coords seem to be relative to the
 			 * text within the cell, so we have to add 4. */
-			if (event->button.x + 4 >= width - E_CELL_POPUP_ARROW_WIDTH) {
+			if (event->button.x + 4 >= width - E_CELL_POPUP_ARROW_SIZE) {
 				return e_cell_popup_do_popup (ecp_view, event, row, view_col);
 			}
 		}
diff --git a/widgets/table/e-cell-tree.c b/widgets/table/e-cell-tree.c
index 3a3bd7b..00d096f 100644
--- a/widgets/table/e-cell-tree.c
+++ b/widgets/table/e-cell-tree.c
@@ -203,19 +203,51 @@ draw_expander (ECellTreeView *ectv,
                GtkStateType state,
                GdkRectangle *rect)
 {
-	GtkStyle *style;
+	GtkStyleContext *style_context;
 	GtkWidget *tree;
+	GtkStateFlags flags = 0;
 	gint exp_size;
 
 	tree = gtk_widget_get_parent (GTK_WIDGET (ectv->canvas));
-	style = gtk_widget_get_style (tree);
+	style_context = gtk_widget_get_style_context (tree);
+
+	gtk_style_context_save (style_context);
+
+	gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_EXPANDER);
+
+	switch (state) {
+		case GTK_STATE_PRELIGHT:
+			flags |= GTK_STATE_FLAG_PRELIGHT;
+			break;
+		case GTK_STATE_SELECTED:
+			flags |= GTK_STATE_FLAG_SELECTED;
+			break;
+		case GTK_STATE_INSENSITIVE:
+			flags |= GTK_STATE_FLAG_INSENSITIVE;
+			break;
+		default:
+			break;
+	}
+
+	if (expander_style == GTK_EXPANDER_EXPANDED)
+		flags |= GTK_STATE_FLAG_ACTIVE;
+
+	gtk_style_context_set_state (style_context, flags);
 
 	gtk_widget_style_get (tree, "expander_size", &exp_size, NULL);
 
-	gtk_paint_expander (
-		style, cr, state, tree, "treeview",
-		rect->x + rect->width - exp_size / 2,
-		rect->y + rect->height / 2, expander_style);
+	cairo_save (cr);
+
+	gtk_render_expander (
+		style_context, cr,
+		(gdouble) rect->x + rect->width - exp_size,
+		(gdouble) (rect->y + rect->height / 2) - (exp_size / 2),
+		(gdouble) exp_size,
+		(gdouble) exp_size);
+
+	cairo_restore (cr);
+
+	gtk_style_context_restore (style_context);
 }
 
 /*
diff --git a/widgets/text/e-reflow.c b/widgets/text/e-reflow.c
index 350550f..faad196 100644
--- a/widgets/text/e-reflow.c
+++ b/widgets/text/e-reflow.c
@@ -1246,10 +1246,12 @@ e_reflow_draw (GnomeCanvasItem *item,
                gint width,
                gint height)
 {
-	GtkStyle *style;
+	GtkStyleContext *style_context;
+	GtkWidget *widget;
 	gint x_rect, y_rect, width_rect, height_rect;
 	gdouble running_width;
 	EReflow *reflow = E_REFLOW (item);
+	GdkRGBA color;
 	gint i;
 	gdouble column_width;
 
@@ -1266,25 +1268,32 @@ e_reflow_draw (GnomeCanvasItem *item,
 	i /= column_width + E_REFLOW_FULL_GUTTER;
 	running_width += i * (column_width + E_REFLOW_FULL_GUTTER);
 
-	style = gtk_widget_get_style (GTK_WIDGET (item->canvas));
+	widget = GTK_WIDGET (item->canvas);
+	style_context = gtk_widget_get_style_context (widget);
+
+	cairo_save (cr);
+
+	gtk_style_context_get_background_color (
+		style_context, GTK_STATE_FLAG_ACTIVE, &color);
+	gdk_cairo_set_source_rgba (cr, &color);
 
 	for (; i < reflow->column_count; i++) {
 		if (running_width > x + width)
 			break;
 		x_rect = running_width;
-		gtk_paint_flat_box (
-			style,
-			cr,
-			GTK_STATE_ACTIVE,
-			GTK_SHADOW_NONE,
-			GTK_WIDGET (item->canvas),
-			"reflow",
-			x_rect - x,
-			y_rect - y,
-			width_rect,
-			height_rect);
+
+		gtk_render_background (
+			style_context, cr,
+			(gdouble) x_rect - x,
+			(gdouble) y_rect - y,
+			(gdouble) width_rect,
+			(gdouble) height_rect);
+
 		running_width += E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH;
 	}
+
+	cairo_restore (cr);
+
 	if (reflow->column_drag) {
 		GtkAdjustment *adjustment;
 		GtkLayout *layout;
@@ -1311,7 +1320,10 @@ e_reflow_draw (GnomeCanvasItem *item,
 		running_width += i * (column_width + E_REFLOW_FULL_GUTTER);
 
 		cairo_save (cr);
-		gdk_cairo_set_source_color (cr, &style->fg[GTK_STATE_NORMAL]);
+
+		gtk_style_context_get_color (
+			style_context, GTK_STATE_FLAG_NORMAL, &color);
+		gdk_cairo_set_source_rgba (cr, &color);
 
 		for (; i < reflow->column_count; i++) {
 			if (running_width > x + width)
@@ -1326,6 +1338,7 @@ e_reflow_draw (GnomeCanvasItem *item,
 			cairo_fill (cr);
 			running_width += E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH;
 		}
+
 		cairo_restore (cr);
 	}
 }



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