diff options
Diffstat (limited to 'src/gtkext/gtkbufferview.c')
-rw-r--r-- | src/gtkext/gtkbufferview.c | 55 |
1 files changed, 50 insertions, 5 deletions
diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c index f0efce0..2032547 100644 --- a/src/gtkext/gtkbufferview.c +++ b/src/gtkext/gtkbufferview.c @@ -342,6 +342,7 @@ static gboolean gtk_buffer_view_draw(GtkWidget *widget, cairo_t *cr) cairo_region_t *region; /* Région visible à redessiner */ cairo_rectangle_int_t area; /* Surface correspondante */ GtkStyleContext *context; /* Contexte du thème actuel */ + GdkRGBA color; /* Couleur de thème récupérée */ gint fake_x; /* Abscisse virtuelle */ gint fake_y; /* Ordonnée virtuelle */ bool sel_line; /* Souslignage de la sélection */ @@ -359,22 +360,66 @@ static gboolean gtk_buffer_view_draw(GtkWidget *widget, cairo_t *cr) cairo_region_get_extents(region, &area); cairo_region_destroy(region); + context = gtk_widget_get_style_context(widget); + + if (pview->show_border) + { + gtk_view_panel_define_border_path(pview, cr, 0, 0); + cairo_clip(cr); + } + /* Dessin de la marge gauche */ - context = gtk_widget_get_style_context(widget); + gtk_style_context_save(context); + + gtk_style_context_add_class(context, GTK_STYLE_CLASS_TOOLBAR); + + gtk_style_context_get_background_color(context, GTK_STATE_FLAG_ACTIVE, &color); + + cairo_set_source_rgba(cr, color.red, color.green, color.blue, color.alpha); + + cairo_rectangle(cr, 0, area.y, view->left_margin, area.height); + cairo_fill(cr); + + gtk_style_context_restore(context); + + /* Fond de la zone de texte */ gtk_style_context_save(context); - gtk_style_context_add_class(context, GTK_STYLE_CLASS_TROUGH); + gtk_style_context_add_class(context, GTK_STYLE_CLASS_VIEW); + + gtk_style_context_get_background_color(context, GTK_STATE_FLAG_ACTIVE, &color); + + cairo_set_source_rgba(cr, color.red, color.green, color.blue, color.alpha * 0.7); + + cairo_rectangle(cr, view->left_margin, area.y, area.width, area.height); + cairo_fill(cr); + + gtk_style_context_restore(context); + + /* Ligne de séparation */ + + gtk_style_context_save(context); + + gtk_style_context_add_class(context, GTK_STYLE_CLASS_FRAME); + + gtk_style_context_get_border_color(context, GTK_STATE_FLAG_ACTIVE, &color); + + cairo_set_source_rgba(cr, color.red, color.green, color.blue, color.alpha); + + cairo_set_line_width(cr, 1.0); - gtk_render_background(context, cr, 0, area.y, view->left_margin, area.height); - gtk_render_frame(context, cr, 0, area.y - 10, view->left_margin, area.height + 20); + cairo_move_to(cr, view->left_margin + 0.5, area.y - 0.5); + cairo_line_to(cr, view->left_margin + 0.5, area.y + area.height + 0.5); + cairo_stroke(cr); gtk_style_context_restore(context); /* Eventuelle bordure globale */ - GTK_WIDGET_CLASS(gtk_buffer_view_parent_class)->draw(widget, cr); + if (pview->show_border) + gtk_view_panel_draw_border(pview, cr); /* Impression du désassemblage */ |