From 6f89c15215b746f050f8280fac14a77e50bf8077 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Sun, 6 Nov 2016 11:54:54 +0100 Subject: Handled tabulations as small separation paddings. --- ChangeLog | 5 +++++ src/glibext/linesegment.c | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index fea9acd..243a41a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +16-11-06 Cyrille Bagard + + * src/glibext/linesegment.c: + Handle tabulations as small separation paddings. + 16-11-03 Cyrille Bagard * plugins/androhelpers/androhelpers.c: diff --git a/src/glibext/linesegment.c b/src/glibext/linesegment.c index ee79a22..8306320 100644 --- a/src/glibext/linesegment.c +++ b/src/glibext/linesegment.c @@ -532,6 +532,8 @@ line_segment *get_new_line_segment(RenderingTagType type, const char *text, size char atmp[sizeof(line_segment) + 128]; /* Allocation static facile */ line_segment *content; /* Contenu à mettre en place ? */ + assert(length > 0); + if (length < (sizeof(atmp) - sizeof(line_segment))) content = (line_segment *)atmp; else @@ -710,11 +712,17 @@ gint get_line_segment_width(const line_segment *segment) gint result; /* Largeur à retourner */ cairo_font_slant_t slant; /* Style d'impression */ cairo_font_weight_t weight; /* Poids de la police */ + size_t length; /* Taille du texte représenté */ slant = segment->pattern->slant; weight = segment->pattern->weight; - result = _seg_params.x_advances[CAIRO_FONT_INDEX(slant, weight)] * strlen(segment->text); + length = strlen(segment->text); + + if (length == 1 && segment->text[0] == '\t') + length = 2; + + result = _seg_params.x_advances[CAIRO_FONT_INDEX(slant, weight)] * length; return result; @@ -843,6 +851,9 @@ void draw_line_segment(const line_segment *segment, cairo_t *cr, gint *x, gint y cairo_operator_t old; /* Sauvegarde avant changement */ const rendering_color_t *used_fg; /* Couleur d'impression utile */ + if (segment->text[0] == '\t' && segment->text[1] == '\0') + goto small_sep; + selected = selection_list_has_segment_content(list, segment); width = get_line_segment_width(segment); @@ -890,6 +901,8 @@ void draw_line_segment(const line_segment *segment, cairo_t *cr, gint *x, gint y cairo_show_text(cr, segment->text); + small_sep: + *x += width; } -- cgit v0.11.2-87-g4458