diff options
Diffstat (limited to 'src/glibext/widthtracker.c')
-rw-r--r-- | src/glibext/widthtracker.c | 64 |
1 files changed, 23 insertions, 41 deletions
diff --git a/src/glibext/widthtracker.c b/src/glibext/widthtracker.c index 8ecaad0..f0e2068 100644 --- a/src/glibext/widthtracker.c +++ b/src/glibext/widthtracker.c @@ -123,6 +123,7 @@ struct _GWidthTracker GBufferCache *cache; /* Ensemble complet de lignes */ size_t col_count; /* Nombre maximum de colonnes */ + size_t opt_count; /* Qté de colonnes en option */ common_metrics *portions; /* Portions représentées */ size_t count; /* Quantité de ces portions */ @@ -472,6 +473,7 @@ static void g_width_tracker_finalize(GWidthTracker *tracker) * * * Paramètres : cache = tampon de lignes à lier au futur élément. * * col_count = quantité maximale de colonnes à considérer. * +* opt_count = quantité de colonnes optionnelles. * * * * Description : Crée un nouveau suivi de largeurs au sein de lignes. * * * @@ -481,7 +483,7 @@ static void g_width_tracker_finalize(GWidthTracker *tracker) * * ******************************************************************************/ -GWidthTracker *g_width_tracker_new(GBufferCache *cache, size_t col_count) +GWidthTracker *g_width_tracker_new(GBufferCache *cache, size_t col_count, size_t opt_count) { GWidthTracker *result; /* Composant à retourner */ @@ -491,6 +493,7 @@ GWidthTracker *g_width_tracker_new(GBufferCache *cache, size_t col_count) result->cache = cache; result->col_count = col_count; + result->opt_count = opt_count; result->min_widths = calloc(col_count, sizeof(gint)); @@ -526,6 +529,7 @@ GWidthTracker *g_width_tracker_new_restricted(const GWidthTracker *template, siz result->cache = template->cache; result->col_count = template->col_count; + result->opt_count = template->opt_count; start = g_width_tracker_find_metrics(template, first); assert(start < template->count); @@ -744,7 +748,10 @@ static void g_width_tracker_reset_widths(GWidthTracker *tracker, size_t index) static const line_width_summary *g_width_tracker_get_up_to_date_widths(GWidthTracker *tracker, size_t index) { common_metrics *portion; /* Portion à actualiser */ - size_t i; /* Boucle de parcours */ + gint *widths; /* Collecte de largeurs */ + gint merged; /* Collecte de fusion */ + size_t i; /* Boucle de parcours #1 */ + size_t k; /* Boucle de parcours #2 */ assert(index < tracker->count); @@ -758,8 +765,21 @@ static const line_width_summary *g_width_tracker_get_up_to_date_widths(GWidthTra /* Collecte */ + widths = malloc(tracker->col_count * sizeof(gint)); + for (i = portion->first; i <= portion->last; i++) - g_buffer_cache_collect_widths(tracker->cache, i, &portion->summary); + { + g_buffer_cache_collect_widths(tracker->cache, i, tracker->col_count, tracker->opt_count, + widths, &merged); + + for (k = 0; k < tracker->col_count; k++) + portion->summary.max_widths[k] = MAX(portion->summary.max_widths[k], widths[k]); + + portion->summary.merged_width = MAX(portion->summary.merged_width, merged); + + } + + free(widths); /* Marquage pour mémoire */ @@ -1160,44 +1180,6 @@ static void g_width_tracker_ensure_valid_required_widths(GWidthTracker *tracker) /****************************************************************************** * * * Paramètres : tracker = suivi de largeurs à consulter. * -* index = indice de la ligne dont la portion est recherchée. * -* summary = ensemble ciblé de largeurs collectées. [OUT] * -* * -* Description : Fournit un résumé local des largeurs en vigueur. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_width_tracker_get_local_width_summary(GWidthTracker *tracker, size_t index, line_width_summary *summary) -{ - size_t current; /* Indice de portion visée */ - const line_width_summary *local; /* Valeurs à intégrer */ - BufferLineColumn i; /* Boucle de parcours */ - - g_width_tracker_ensure_valid_required_widths(tracker); - - current = g_width_tracker_find_metrics(tracker, index); - assert(current < tracker->count); - - local = g_width_tracker_get_up_to_date_widths(tracker, current); - - for (i = BLC_FIRST; i < BLC_DISPLAY; i++) - summary->max_widths[i] = tracker->summary.max_widths[i]; - - for (i = BLC_DISPLAY; i < BLC_COUNT; i++) - summary->max_widths[i] = local->max_widths[i]; - - summary->merged_width = local->merged_width; - -} - - -/****************************************************************************** -* * -* Paramètres : tracker = suivi de largeurs à consulter. * * options = règles d'affichage des colonnes modulables. * * * * Description : Fournit la largeur requise par une visualisation. * |