diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2020-07-26 23:23:42 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2020-07-26 23:23:42 (GMT) |
commit | 9606b8e49299e37b297da039fc8a645f1ab4cf2d (patch) | |
tree | 16eb18d5292ec04ee4b7a24756e59d3c430f104e /src/glibext/bufferline.c | |
parent | b80a36ab9746ca47b9c50827efe3856ce2840144 (diff) |
Updated the process collecting line widths.
Diffstat (limited to 'src/glibext/bufferline.c')
-rw-r--r-- | src/glibext/bufferline.c | 68 |
1 files changed, 36 insertions, 32 deletions
diff --git a/src/glibext/bufferline.c b/src/glibext/bufferline.c index 3e93c9c..5eec1db 100644 --- a/src/glibext/bufferline.c +++ b/src/glibext/bufferline.c @@ -53,10 +53,8 @@ struct _GBufferLine { GObject parent; /* A laisser en premier */ - mrange_t range; /* Couverture geographique */ - BufferLineColumn main_column; /* Colonne principale */ - - line_column columns[BLC_COUNT]; /* Répartition du texte */ + line_column *columns; /* Répartition du texte */ + size_t col_count; /* Nombre de colonnes présentes*/ BufferLineColumn merge_start; /* Début de la zone globale */ BufferLineColumn last_used; /* Dernière colonne utilisée */ @@ -177,13 +175,10 @@ static void g_buffer_line_class_init(GBufferLineClass *class) static void g_buffer_line_init(GBufferLine *line) { - BufferLineColumn i; /* Boucle de parcours */ - - for (i = 0; i < BLC_COUNT; i++) - init_line_column(&line->columns[i]); - - line->merge_start = BLC_COUNT; - line->last_used = BLC_COUNT; + line->columns = NULL; + line->col_count = 0; + line->merge_start = -1; + line->last_used = -1; } @@ -226,11 +221,14 @@ static void g_buffer_line_dispose(GBufferLine *line) static void g_buffer_line_finalize(GBufferLine *line) { - BufferLineColumn i; /* Boucle de parcours */ + size_t i; /* Boucle de parcours */ - for (i = 0; i < BLC_COUNT; i++) + for (i = 0; i < line->col_count; i++) reset_line_column(&line->columns[i]); + if (line->columns != NULL) + free(line->columns); + if (line->origins != NULL) free(line->origins); @@ -241,7 +239,7 @@ static void g_buffer_line_finalize(GBufferLine *line) /****************************************************************************** * * -* Paramètres : main = colonne à référencer comme étant la principale. * +* Paramètres : col_count = quantité de colonnes à considérer. * * * * Description : Crée une nouvelle représentation de fragments de texte. * * * @@ -251,13 +249,19 @@ static void g_buffer_line_finalize(GBufferLine *line) * * ******************************************************************************/ -GBufferLine *g_buffer_line_new(BufferLineColumn main) +GBufferLine *g_buffer_line_new(size_t col_count) { GBufferLine *result; /* Composant à retourner */ + size_t i; /* Boucle de parcours */ result = g_object_new(G_TYPE_BUFFER_LINE, NULL); - result->main_column = main; + result->columns = malloc(col_count * sizeof(line_column)); + + for (i = 0; i < col_count; i++) + init_line_column(&result->columns[i]); + + result->col_count = col_count; return result; @@ -887,8 +891,11 @@ void g_buffer_line_export(GBufferLine *line, buffer_export_context *ctx, BufferE /****************************************************************************** * * -* Paramètres : line = ligne à venir consulter. * -* summary = largeurs maximales à faire évoluer. * +* Paramètres : line = ligne à venir consulter. * +* col_count = quantité de colonnes à considérer. * +* opt_count = quantité de colonnes optionnelles. * +* widths = largeur mesurée pour chacune des colonnes. [OUT] * +* merged = largeur cumulée en cas de fusion. [OUT] * * * * Description : Fait remonter les largeurs requises par une ligne donnée. * * * @@ -898,35 +905,32 @@ void g_buffer_line_export(GBufferLine *line, buffer_export_context *ctx, BufferE * * ******************************************************************************/ -void g_buffer_line_collect_widths(GBufferLine *line, line_width_summary *summary) +void g_buffer_line_collect_widths(const GBufferLine *line, size_t col_count, size_t opt_count, gint *widths, gint *merged) { - gint merged_width; /* Largeur cumulée avant fusion*/ - BufferLineColumn i; /* Boucle de parcours */ + size_t i; /* Boucle de parcours */ gint width; /* Largeur d'une colonne */ - merged_width = 0; + assert(col_count == line->col_count); - for (i = 0; i < BLC_COUNT; i++) + *merged = 0; + + for (i = 0; i < col_count; i++) { width = get_column_width(&line->columns[i]); - if (i < line->merge_start) - summary->max_widths[i] = MAX(summary->max_widths[i], width); + widths[i] = (i < line->merge_start ? width : 0); - if (i >= BLC_DISPLAY) + if (line->merge_start != -1 && i >= opt_count) { - merged_width += width; + *merged += width; - if (i < line->merge_start && (i + 1) < BLC_COUNT) - merged_width += COL_MARGIN; + if (i < line->merge_start && (i + 1) < col_count) + *merged += COL_MARGIN; } } - if (line->merge_start != BLC_COUNT) - summary->merged_width = MAX(summary->merged_width, merged_width); - } |