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/widthtracker.c | |
| parent | b80a36ab9746ca47b9c50827efe3856ce2840144 (diff) | |
Updated the process collecting line widths.
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.            * | 
