summaryrefslogtreecommitdiff
path: root/src/glibext/widthtracker.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/widthtracker.c')
-rw-r--r--src/glibext/widthtracker.c64
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. *