diff options
Diffstat (limited to 'src/glibext/buffercache.c')
-rw-r--r-- | src/glibext/buffercache.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/glibext/buffercache.c b/src/glibext/buffercache.c index 04d6dba..6f52956 100644 --- a/src/glibext/buffercache.c +++ b/src/glibext/buffercache.c @@ -60,7 +60,7 @@ static void get_cache_info_cursor(const cache_info *, size_t, gint, GLineCursor static void on_line_ref_toggle(cache_info *, GBufferLine *, gboolean); /* Fournit la ligne de tampon correspondant aux générateurs. */ -static GBufferLine *get_cache_info_line(cache_info *, size_t, const GBinContent *); +static GBufferLine *get_cache_info_line(cache_info *, const GWidthTracker *, size_t, const GBinContent *); /* Force la réinitialisation d'une éventuelle ligne cachée. */ static void _reset_cache_info_line_unlocked(cache_info *); @@ -372,6 +372,7 @@ static void on_line_ref_toggle(cache_info *info, GBufferLine *line, gboolean las /****************************************************************************** * * * Paramètres : info = informations sur une ligne à venir manipuler. * +* tracker = gestionnaire de largeurs à consulter si besoin est.* * index = indice de la ligne à constituer. * * content = éventuel contenu binaire brut à imprimer. * * * @@ -383,7 +384,7 @@ static void on_line_ref_toggle(cache_info *info, GBufferLine *line, gboolean las * * ******************************************************************************/ -static GBufferLine *get_cache_info_line(cache_info *info, size_t index, const GBinContent *content) +static GBufferLine *get_cache_info_line(cache_info *info, const GWidthTracker *tracker, size_t index, const GBinContent *content) { GBufferLine *result; /* Construction à retourner */ size_t i; /* Boucle de parcours */ @@ -394,7 +395,7 @@ static GBufferLine *get_cache_info_line(cache_info *info, size_t index, const GB if (result == NULL) { - result = g_buffer_line_new(0/* !! */); + result = g_buffer_line_new(g_width_tracker_count_columns(tracker)); g_object_add_toggle_ref(G_OBJECT(result), (GToggleNotify)on_line_ref_toggle, info); @@ -622,6 +623,7 @@ static void g_buffer_cache_finalize(GBufferCache *cache) * * * Paramètres : content = éventuel contenu binaire brut à référencer. * * col_count = quantité maximale de colonnes à considérer. * +* opt_count = quantité de colonnes optionnelles. * * * * Description : Crée un nouveau composant de tampon pour code désassemblé. * * * @@ -631,7 +633,7 @@ static void g_buffer_cache_finalize(GBufferCache *cache) * * ******************************************************************************/ -GBufferCache *g_buffer_cache_new(GBinContent *content, size_t col_count) +GBufferCache *g_buffer_cache_new(GBinContent *content, size_t col_count, size_t opt_count) { GBufferCache *result; /* Composant à retourner */ @@ -643,7 +645,7 @@ GBufferCache *g_buffer_cache_new(GBinContent *content, size_t col_count) g_object_ref(G_OBJECT(content)); } - result->tracker = g_width_tracker_new(result, col_count); + result->tracker = g_width_tracker_new(result, col_count, opt_count); return result; @@ -1395,7 +1397,7 @@ GBufferLine *g_buffer_cache_find_line_by_index(const GBufferCache *cache, size_t GBufferLine *result; /* Ligne trouvée à retourner */ if (index < cache->used) - result = get_cache_info_line(&cache->lines[index], index, cache->content); + result = get_cache_info_line(&cache->lines[index], cache->tracker, index, cache->content); else result = NULL; @@ -1406,9 +1408,12 @@ GBufferLine *g_buffer_cache_find_line_by_index(const GBufferCache *cache, size_t /****************************************************************************** * * -* Paramètres : cache = tampon de lignes à venir consulter. * -* index = indice de la ligne à mesurer. * -* summary = largeurs maximales à faire évoluer. * +* Paramètres : cache = tampon de lignes à venir consulter. * +* index = indice de la ligne à mesurer. * +* 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. * * * @@ -1418,13 +1423,13 @@ GBufferLine *g_buffer_cache_find_line_by_index(const GBufferCache *cache, size_t * * ******************************************************************************/ -void g_buffer_cache_collect_widths(GBufferCache *cache, size_t index, line_width_summary *summary) +void g_buffer_cache_collect_widths(GBufferCache *cache, size_t index, size_t col_count, size_t opt_count, gint *widths, gint *merged) { GBufferLine *line; /* Ligne éphémère à mesurer */ - line = get_cache_info_line(&cache->lines[index], index, cache->content); + line = get_cache_info_line(&cache->lines[index], cache->tracker, index, cache->content); - g_buffer_line_collect_widths(line, summary); + g_buffer_line_collect_widths(line, col_count, opt_count, widths, merged); g_object_unref(G_OBJECT(line)); @@ -1482,7 +1487,7 @@ void g_buffer_cache_draw(const GBufferCache *cache, cairo_t *cr, size_t first, s info = &cache->lines[i]; - line = get_cache_info_line(info, i, cache->content); + line = get_cache_info_line(info, cache->tracker, i, cache->content); g_buffer_line_draw(line, i, cr, class->text_pos, y, cache->tracker, options, list); |