diff options
Diffstat (limited to 'src/glibext/gbufferline.c')
-rw-r--r-- | src/glibext/gbufferline.c | 51 |
1 files changed, 20 insertions, 31 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c index cef34ef..562aded 100644 --- a/src/glibext/gbufferline.c +++ b/src/glibext/gbufferline.c @@ -67,7 +67,7 @@ static GBufferSegment *get_segment_at(const buffer_line_column *, gint); GSList *highlight_all_same_segments(const buffer_line_column *, GSList *, const GBufferSegment *); /* Imprime le contenu d'une colonne de ligne de texte. */ -static void draw_segments_of_column(buffer_line_column *, GdkDrawable *, GdkGC *, gint, gint); +static void draw_segments_of_column(buffer_line_column *, cairo_t *, GFontCache *, gint, gint); @@ -94,7 +94,6 @@ struct _GBufferLineClass { GObjectClass parent; /* A laisser en premier */ - PangoContext *context; /* Contexte graphique Pango */ PangoAttrList *attribs[RTT_COUNT]; /* Décorateurs pour tampons */ }; @@ -264,11 +263,11 @@ GSList *highlight_all_same_segments(const buffer_line_column *column, GSList *li /****************************************************************************** * * -* Paramètres : column = colonne de ligne de texte à manipuler. * -* drawable = surface de rendu où travailler. * -* gc = contexte graphique à utiliser pour les pinceaux. * -* x_init = abscisse du point d'impression de départ. * -* y = ordonnée du point d'impression. * +* Paramètres : column = colonne de ligne de texte à manipuler. * +* cairo = contexte graphique à utiliser pour les pinceaux. * +* fcache = gestionnaire des polices pour l'impression. * +* x_init = abscisse du point d'impression de départ. * +* y = ordonnée du point d'impression. * * * * Description : Imprime le contenu d'une colonne de ligne de texte. * * * @@ -278,7 +277,7 @@ GSList *highlight_all_same_segments(const buffer_line_column *column, GSList *li * * ******************************************************************************/ -static void draw_segments_of_column(buffer_line_column *column, GdkDrawable *drawable, GdkGC *gc, gint x_init, gint y) +static void draw_segments_of_column(buffer_line_column *column, cairo_t *cairo, GFontCache *fcache, gint x_init, gint y) { gint x; size_t i; @@ -286,7 +285,7 @@ static void draw_segments_of_column(buffer_line_column *column, GdkDrawable *dra x = x_init; for (i = 0; i < column->count; i++) - g_buffer_segment_draw(column->segments[i], drawable, gc, &x, y); + g_buffer_segment_draw(column->segments[i], cairo, fcache, &x, y); } @@ -316,21 +315,8 @@ G_DEFINE_TYPE(GBufferLine, g_buffer_line, G_TYPE_OBJECT); static void g_buffer_line_class_init(GBufferLineClass *class) { - GdkScreen *screen; /* Ecran pour GDK */ - PangoFontDescription *font_desc; /* Police de caractère */ PangoAttribute *attrib; /* Propriété de rendu */ - /* Base des exportations */ - - screen = gdk_screen_get_default(); - class->context = gdk_pango_context_get_for_screen(screen); - - font_desc = pango_font_description_from_string("mono 10"); - pango_context_set_font_description(class->context, font_desc); - - pango_context_set_base_dir(class->context, PANGO_DIRECTION_LTR); - pango_context_set_language(class->context, gtk_get_default_language()); - /* RTT_RAW */ class->attribs[RTT_RAW] = pango_attr_list_new(); @@ -641,14 +627,17 @@ void g_buffer_line_insert_text(GBufferLine *line, BufferLineColumn column, const GBufferLineClass *class; /* Stockage de briques de base */ GBufferSegment *segment; /* Portion de texte à ajouter */ - class = G_BUFFER_LINE_GET_CLASS(line); - if (column == BLC_LAST_USED) column = line->last_used; else line->last_used = column; - segment = g_buffer_segment_new(class->context, class->attribs[type], text, length); + if (length == 0) + return; + + class = G_BUFFER_LINE_GET_CLASS(line); + + segment = g_buffer_segment_new(class->attribs[type], text, length); g_buffer_line_add_segment(line, column, segment); } @@ -756,13 +745,13 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start) /****************************************************************************** * * * Paramètres : line = ligne de texte à manipuler. * -* drawable = surface de rendu où travailler. * -* gc = contexte graphique à utiliser pour les pinceaux.* +* cairo = contexte graphique à utiliser pour les pinceaux.* +* fcache = gestionnaire des polices pour l'impression. * * max_widths = largeurs de colonne à respecter. * * x_init = abscisse du point d'impression de départ. * * y = ordonnée du point d'impression. * -* addr = indique si les positions doivent être affichées. * -* code = indique si le code binaire doit être affiché. * +* addr = indique si les positions doivent être affichées.* +* code = indique si le code binaire doit être affiché. * * * * Description : Imprime la ligne de texte représentée. * * * @@ -772,7 +761,7 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start) * * ******************************************************************************/ -void g_buffer_line_draw(GBufferLine *line, GdkDrawable *drawable, GdkGC *gc, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool addr, bool code) +void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, GFontCache *fcache, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool addr, bool code) { gint x; /* Point de départ d'impression*/ BufferLineColumn i; /* Boucle de parcours */ @@ -784,7 +773,7 @@ void g_buffer_line_draw(GBufferLine *line, GdkDrawable *drawable, GdkGC *gc, con if (i == BLC_ADDRESS && !addr) continue; if (i == BLC_BINARY && !code) continue; - draw_segments_of_column(&line->columns[i], drawable, gc, x, y); + draw_segments_of_column(&line->columns[i], cairo, fcache, x, y); if (i < line->merge_start) x += max_widths[i] + COL_MARGIN; |