summaryrefslogtreecommitdiff
path: root/src/glibext/gbuffercache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/gbuffercache.c')
-rw-r--r--src/glibext/gbuffercache.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/glibext/gbuffercache.c b/src/glibext/gbuffercache.c
index 926d034..fd7c987 100644
--- a/src/glibext/gbuffercache.c
+++ b/src/glibext/gbuffercache.c
@@ -84,7 +84,7 @@ static void get_cache_info_addr(const cache_info *, size_t, gint, vmpa2t *);
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);
+static GBufferLine *get_cache_info_line(cache_info *, size_t, const GBinContent *);
/* Force la réinitialisation d'une éventuelle ligne cachée. */
static void _reset_cache_info_line_unlocked(cache_info *);
@@ -102,6 +102,8 @@ struct _GBufferCache
{
GObject parent; /* A laisser en premier */
+ const GBinContent *content; /* Contenu binaire global */
+
cache_info *lines; /* Liste des lignes intégrées */
size_t count; /* Quantité en cache */
size_t used; /* Quantité utilisée */
@@ -410,8 +412,9 @@ static void on_line_ref_toggle(cache_info *info, GBufferLine *line, gboolean las
/******************************************************************************
* *
-* Paramètres : info = informations sur une ligne à venir manipuler. *
-* index = indice de la ligne à constituer. *
+* Paramètres : info = informations sur une ligne à venir manipuler. *
+* index = indice de la ligne à constituer. *
+* content = éventuel contenu binaire brut à imprimer. *
* *
* Description : Fournit la ligne de tampon correspondant aux générateurs. *
* *
@@ -421,7 +424,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)
+static GBufferLine *get_cache_info_line(cache_info *info, size_t index, const GBinContent *content)
{
GBufferLine *result; /* Construction à retourner */
size_t i; /* Boucle de parcours */
@@ -437,11 +440,13 @@ static GBufferLine *get_cache_info_line(cache_info *info, size_t index)
g_object_add_toggle_ref(G_OBJECT(result), (GToggleNotify)on_line_ref_toggle, info);
if (info->count == 1)
- g_line_generator_print(info->generator.instance, result, index, info->generator.repeat);
+ g_line_generator_print(info->generator.instance, result, index,
+ info->generator.repeat, content);
else
for (i = 0; i < info->count; i++)
- g_line_generator_print(info->generators[i].instance, result, index, info->generators[i].repeat);
+ g_line_generator_print(info->generators[i].instance, result, index,
+ info->generators[i].repeat, content);
info->line = result;
@@ -590,6 +595,9 @@ static void g_buffer_cache_dispose(GBufferCache *cache)
cache_info *info; /* Accès directe à une ligne */
size_t j; /* Boucle de parcours #2 */
+ if (cache->content != NULL)
+ g_object_unref(G_OBJECT(cache->content));
+
for (i = 0; i < cache->used; i++)
{
info = &cache->lines[i];
@@ -649,7 +657,7 @@ static void g_buffer_cache_finalize(GBufferCache *cache)
/******************************************************************************
* *
-* Paramètres : - *
+* Paramètres : content = éventuel contenu binaire brut à référencer. *
* *
* Description : Crée un nouveau composant de tampon pour code désassemblé. *
* *
@@ -659,12 +667,18 @@ static void g_buffer_cache_finalize(GBufferCache *cache)
* *
******************************************************************************/
-GBufferCache *g_buffer_cache_new(void)
+GBufferCache *g_buffer_cache_new(const GBinContent *content)
{
GBufferCache *result; /* Composant à retourner */
result = g_object_new(G_TYPE_BUFFER_CACHE, NULL);
+ if (content != NULL)
+ {
+ result->content = content;
+ g_object_ref(G_OBJECT(content));
+ }
+
return result;
}
@@ -1325,7 +1339,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);
+ result = get_cache_info_line(&cache->lines[index], index, cache->content);
else
result = NULL;
@@ -1352,7 +1366,7 @@ void g_buffer_cache_collect_widths(GBufferCache *cache, size_t index, line_width
{
GBufferLine *line; /* Ligne éphémère à mesurer */
- line = get_cache_info_line(&cache->lines[index], index);
+ line = get_cache_info_line(&cache->lines[index], index, cache->content);
g_buffer_line_collect_widths(line, summary);
@@ -1416,7 +1430,7 @@ void g_buffer_cache_draw(const GBufferCache *cache, cairo_t *cr, size_t first, s
if (i == first || (g_buffer_cache_get_line_flags(cache, i) & BLF_WIDTH_MANAGER))
g_width_tracker_get_local_width_summary(cache->tracker, i, &summary);
- line = get_cache_info_line(info, i);
+ line = get_cache_info_line(info, i, cache->content);
g_buffer_line_draw(line, cr, &summary, class->text_pos, y, display, list);