Index: gtksourceview/gtksourceview.c
===================================================================
RCS file: /cvs/gnome/gtksourceview/gtksourceview/gtksourceview.c,v
retrieving revision 1.42
diff -u -p -r1.42 gtksourceview.c
--- gtksourceview/gtksourceview.c	31 Dec 2005 17:29:19 -0000	1.42
+++ gtksourceview/gtksourceview.c	8 Jan 2006 11:44:07 -0000
@@ -277,6 +277,29 @@ gtk_source_view_class_init (GtkSourceVie
 							       FALSE,
 							       G_PARAM_READWRITE));
 
+	gtk_widget_class_install_style_property (widget_class,
+		g_param_spec_boxed ("right-margin-line-color",
+				    _("Margin Line Color"),
+				    _("Color to use for the right margin line"),
+				    GDK_TYPE_COLOR,
+				    G_PARAM_READABLE));
+
+	gtk_widget_class_install_style_property (widget_class,
+		g_param_spec_boxed ("right-margin-overlay-color",
+				    _("Margin Overlay Color"),
+				    _("Color to use for drawing the margin overlay"),
+				    GDK_TYPE_COLOR,
+				    G_PARAM_READABLE));
+
+	gtk_widget_class_install_style_property (widget_class,
+		g_param_spec_int ("right-margin-alpha",
+				  _("Margin Alpha"),
+				  _("Transparency of the margin line & overlay"),
+				  0,
+				  255,
+				  20,
+				  G_PARAM_READABLE));
+
 	signals [UNDO] =
 		g_signal_new ("undo",
 			      G_TYPE_FROM_CLASS (klass),
@@ -1284,12 +1307,22 @@ gtk_source_view_expose (GtkWidget      *
 					    redraw_rect.width,
 					    height);
 		}
+		
+		if (GTK_WIDGET_CLASS (parent_class)->expose_event)
+			event_handled = 
+				(* GTK_WIDGET_CLASS (parent_class)->expose_event)
+				(widget, event);
 
 		if (view->priv->show_margin && 
 		    (event->window == gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT)))
 		{
 			GdkRectangle visible_rect;
 			GdkRectangle redraw_rect;
+			cairo_t *cr;
+			double x;
+			GdkColor *line_color;
+			GdkColor *overlay_color;
+			guchar alpha;
 
 			if (view->priv->cached_margin_width < 0)
 				view->priv->cached_margin_width =
@@ -1307,25 +1340,57 @@ gtk_source_view_expose (GtkWidget      *
 			redraw_rect.width = visible_rect.width;
 			redraw_rect.height = visible_rect.height;
 
-			gtk_paint_vline (widget->style, 
-					 event->window, 
-					 GTK_WIDGET_STATE (widget), 
-					 &redraw_rect, 
-					 widget,
-					 "margin", 
-					 redraw_rect.y, 
-					 redraw_rect.y + redraw_rect.height, 
-					 view->priv->cached_margin_width -
-					 visible_rect.x + redraw_rect.x +
-					 gtk_text_view_get_left_margin (text_view));
-		}
+			cr = gdk_cairo_create (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT));
+			
+			/* Set a clip region for the expose event. */
+			cairo_rectangle (cr, event->area.x, event->area.y,
+					 event->area.width, event->area.height);
+			cairo_clip (cr);
+
+			x = view->priv->cached_margin_width -
+				visible_rect.x + redraw_rect.x + 0.5 +
+				gtk_text_view_get_left_margin (text_view);
 
-		
-		if (GTK_WIDGET_CLASS (parent_class)->expose_event)
-			event_handled = 
-				(* GTK_WIDGET_CLASS (parent_class)->expose_event)
-				(widget, event);
+			cairo_set_line_width (cr, 0.5 *
+				cairo_get_line_width (cr));
 
+			cairo_move_to (cr, x, redraw_rect.y);
+			cairo_line_to (cr, x, redraw_rect.y + redraw_rect.height);
+			
+			gtk_widget_style_get (widget,
+					      "right-margin-line-color", &line_color,
+					      "right-margin-overlay-color", &overlay_color,
+					      "right-margin-alpha", &alpha,
+					      NULL);
+
+			if (!line_color)
+				line_color = gdk_color_copy (&widget->style->text[GTK_STATE_NORMAL]);
+			if (!overlay_color)
+				overlay_color = gdk_color_copy (&widget->style->text[GTK_STATE_NORMAL]);
+			
+			cairo_set_source_rgba (cr,
+					       line_color->red / 65535.,
+					       line_color->green / 65535.,
+					       line_color->blue / 65535.,
+					       alpha / 255.);
+			gdk_color_free (line_color);
+			cairo_stroke (cr);
+			
+			cairo_rectangle (cr,
+					 x,
+					 redraw_rect.y,
+					 redraw_rect.width - x,
+					 redraw_rect.y + redraw_rect.height);
+			cairo_set_source_rgba (cr,
+					       overlay_color->red / 65535.,
+					       overlay_color->green / 65535.,
+					       overlay_color->blue / 65535.,
+					       alpha / 255.);
+			gdk_color_free (overlay_color);
+			cairo_fill (cr);
+
+			cairo_destroy (cr);
+		}
 	}
 	
 	return event_handled;	

