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