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 09:41:16 -0000 @@ -609,14 +609,14 @@ set_source_buffer (GtkSourceView *view, marker_updated_cb, view); g_object_remove_weak_pointer (G_OBJECT (view->priv->source_buffer), - (gpointer *) &view->priv->source_buffer); + (gpointer) &view->priv->source_buffer); } if (buffer && GTK_IS_SOURCE_BUFFER (buffer)) { view->priv->source_buffer = GTK_SOURCE_BUFFER (buffer); g_object_add_weak_pointer (G_OBJECT (buffer), - (gpointer *) &view->priv->source_buffer); + (gpointer) &view->priv->source_buffer); g_signal_connect (buffer, "highlight_updated", G_CALLBACK (highlight_updated_cb), @@ -1284,12 +1284,19 @@ 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; if (view->priv->cached_margin_width < 0) view->priv->cached_margin_width = @@ -1307,25 +1314,36 @@ 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); + + cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5); + 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, 0.8, 0.8, 0.8, 0.5); + cairo_fill (cr); + + cairo_destroy (cr); + } } return event_handled;