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.c168
1 files changed, 112 insertions, 56 deletions
diff --git a/src/glibext/buffercache.c b/src/glibext/buffercache.c
index fd2adc5..ed1068c 100644
--- a/src/glibext/buffercache.c
+++ b/src/glibext/buffercache.c
@@ -59,9 +59,13 @@ static void get_cache_info_cursor(const cache_info *, size_t, gint, GLineCursor
/* Suivit les variations du compteur de références d'une ligne. */
static void on_line_ref_toggle(cache_info *, GBufferLine *, gboolean);
+#ifdef HAVE_GTK_SUPPORT
+
/* Fournit la ligne de tampon correspondant aux générateurs. */
static GBufferLine *get_cache_info_line(cache_info *, const GWidthTracker *, size_t, const GBinContent *);
+#endif
+
/* Force la réinitialisation d'une éventuelle ligne cachée. */
static void _reset_cache_info_line_unlocked(cache_info *);
@@ -367,6 +371,9 @@ static void on_line_ref_toggle(cache_info *info, GBufferLine *line, gboolean las
}
+#ifdef HAVE_GTK_SUPPORT
+
+
/******************************************************************************
* *
* Paramètres : info = informations sur une ligne à venir manipuler. *
@@ -422,6 +429,9 @@ static GBufferLine *get_cache_info_line(cache_info *info, const GWidthTracker *t
}
+#endif
+
+
/******************************************************************************
* *
* Paramètres : info = informations sur une ligne à venir manipuler. *
@@ -547,7 +557,9 @@ static void g_buffer_cache_init(GBufferCache *cache)
cache->used = 0;
g_rw_lock_init(&cache->access);
+#ifdef HAVE_GTK_SUPPORT
cache->tracker = NULL;
+#endif
}
@@ -587,7 +599,9 @@ static void g_buffer_cache_dispose(GBufferCache *cache)
}
+#ifdef HAVE_GTK_SUPPORT
g_clear_object(&cache->tracker);
+#endif
G_OBJECT_CLASS(g_buffer_cache_parent_class)->dispose(G_OBJECT(cache));
@@ -656,7 +670,9 @@ GBufferCache *g_buffer_cache_new(GBinContent *content, size_t col_count, size_t
g_object_ref(G_OBJECT(content));
}
+#ifdef HAVE_GTK_SUPPORT
result->tracker = g_width_tracker_new(result, col_count, opt_count);
+#endif
return result;
@@ -758,6 +774,9 @@ gint g_buffer_cache_get_text_position(const GBufferCache *cache)
}
+#ifdef HAVE_GTK_SUPPORT
+
+
/******************************************************************************
* *
* Paramètres : cache = composant GLib à consulter. *
@@ -783,6 +802,9 @@ GWidthTracker *g_buffer_cache_get_width_tracker(const GBufferCache *cache)
}
+#endif
+
+
/******************************************************************************
* *
* Paramètres : cache = cache de lignes à mettre à jour. *
@@ -905,7 +927,7 @@ static size_t g_buffer_cache_compute_repetition(GBufferCache *cache, size_t inde
void g_buffer_cache_insert_at(GBufferCache *cache, size_t index, GLineGenerator *generator, BufferLineFlags flags, bool before, bool after)
{
-#ifndef NDEBUG
+#if !defined(NDEBUG) && defined(HAVE_GTK_SUPPORT)
GLineCursor *gen_cursor; /* Position du générateur */
GLineCursor *line_cursor; /* Position de la ligne */
int ret; /* Bilan de comparaison */
@@ -919,7 +941,7 @@ void g_buffer_cache_insert_at(GBufferCache *cache, size_t index, GLineGenerator
assert(!(before && after));
-#ifndef NDEBUG
+#if !defined(NDEBUG) && defined(HAVE_GTK_SUPPORT)
if (!before && !after)
{
@@ -981,7 +1003,9 @@ void g_buffer_cache_insert_at(GBufferCache *cache, size_t index, GLineGenerator
cache->used += needed;
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update_added(cache->tracker, index, needed);
+#endif
g_signal_emit_by_name(cache, "size-changed", true, index, needed);
@@ -991,7 +1015,9 @@ void g_buffer_cache_insert_at(GBufferCache *cache, size_t index, GLineGenerator
{
extend_cache_info(&cache->lines[index], generator, flags);
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update(cache->tracker, index);
+#endif
if (needed > 1)
{
@@ -1005,7 +1031,9 @@ void g_buffer_cache_insert_at(GBufferCache *cache, size_t index, GLineGenerator
cache->used += needed - 1;
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update_added(cache->tracker, index + 1, needed - 1);
+#endif
}
@@ -1051,7 +1079,9 @@ void g_buffer_cache_delete_at(GBufferCache *cache, size_t index)
cache->used--;
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update_deleted(cache->tracker, index, index);
+#endif
g_signal_emit_by_name(cache, "size-changed", false, index, 1);
@@ -1170,7 +1200,9 @@ GLineGenerator *g_buffer_cache_delete_type_at(GBufferCache *cache, size_t index,
cache->used--;
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update_deleted(cache->tracker, delete, delete);
+#endif
g_signal_emit_by_name(cache, "size-changed", false, delete, 1);
@@ -1235,7 +1267,9 @@ void g_buffer_cache_append(GBufferCache *cache, GLineGenerator *generator, Buffe
cache->used += count;
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update_added(cache->tracker, index, count);
+#endif
g_signal_emit_by_name(cache, "size-changed", true, index, count);
@@ -1292,7 +1326,9 @@ void g_buffer_cache_extend_with(GBufferCache *cache, size_t count, GLineGenerato
if (added > 0)
{
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update_added(cache->tracker, index, added);
+#endif
g_signal_emit_by_name(cache, "size-changed", true, index, added);
@@ -1349,7 +1385,9 @@ void g_buffer_cache_truncate(GBufferCache *cache, size_t max)
cache->used = max;
+#ifdef HAVE_GTK_SUPPORT
g_width_tracker_update_deleted(cache->tracker, max, max + removed - 1);
+#endif
g_signal_emit_by_name(cache, "size-changed", false, max, removed);
@@ -1358,6 +1396,9 @@ void g_buffer_cache_truncate(GBufferCache *cache, size_t max)
}
+#ifdef HAVE_GTK_SUPPORT
+
+
/******************************************************************************
* *
* Paramètres : cache = tampon de lignes à venir consulter. *
@@ -1384,6 +1425,9 @@ void g_buffer_cache_get_line_cursor(GBufferCache *cache, size_t index, gint x, G
}
+#endif
+
+
/******************************************************************************
* *
* Paramètres : cache = tampon de lignes à venir consulter. *
@@ -1508,6 +1552,62 @@ void g_buffer_cache_remove_line_flag(GBufferCache *cache, size_t index, BufferLi
/******************************************************************************
* *
+* Paramètres : cache = tampon de lignes à consulter. *
+* start = point de départ du parcours. *
+* flag = propriétés à retrouver si possible. *
+* *
+* Description : Avance autant que possible vers une ligne idéale. *
+* *
+* Retour : Indice de la ligne recherchée, si elle existe. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+size_t g_buffer_cache_look_for_flag(GBufferCache *cache, size_t start, BufferLineFlags flag)
+{
+ size_t result; /* Indice de ligne à retourner */
+ GLineCursor *init; /* Localisation de départ */
+ size_t i; /* Boucle de parcours */
+ GLineCursor *next; /* Localisation suivante */
+ int ret; /* Bilan de comparaison */
+
+ assert(!g_rw_lock_writer_trylock(&cache->access));
+
+ assert(start < cache->used);
+
+ result = start;
+
+ get_cache_info_cursor(&cache->lines[start], start, 0, &init);
+
+ for (i = start + 1; i < cache->used; i++)
+ {
+ get_cache_info_cursor(&cache->lines[i], i, 0, &next);
+
+ ret = g_line_cursor_compare(init, next);
+
+ g_object_unref(G_OBJECT(next));
+
+ if (ret != 0)
+ break;
+
+ if ((g_buffer_cache_get_line_flags(cache, i) & flag) != 0)
+ {
+ result = i;
+ break;
+ }
+
+ }
+
+ g_object_unref(G_OBJECT(init));
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : cache = tampon de lignes à venir consulter. *
* index = indice de la ligne visée par l'opération. *
* *
@@ -1536,6 +1636,9 @@ void g_buffer_cache_refresh_line(GBufferCache *cache, size_t index)
}
+#ifdef HAVE_GTK_SUPPORT
+
+
/******************************************************************************
* *
* Paramètres : cache = tampon de lignes à consulter. *
@@ -1659,6 +1762,9 @@ void g_buffer_cache_draw(const GBufferCache *cache, cairo_t *cr, size_t first, s
}
+#endif
+
+
/******************************************************************************
* *
* Paramètres : cache = tampon de lignes à consulter. *
@@ -1766,60 +1872,7 @@ size_t g_buffer_cache_find_index_by_cursor(GBufferCache *cache, const GLineCurso
}
-/******************************************************************************
-* *
-* Paramètres : cache = tampon de lignes à consulter. *
-* start = point de départ du parcours. *
-* flag = propriétés à retrouver si possible. *
-* *
-* Description : Avance autant que possible vers une ligne idéale. *
-* *
-* Retour : Indice de la ligne recherchée, si elle existe. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-size_t g_buffer_cache_look_for_flag(GBufferCache *cache, size_t start, BufferLineFlags flag)
-{
- size_t result; /* Indice de ligne à retourner */
- GLineCursor *init; /* Localisation de départ */
- size_t i; /* Boucle de parcours */
- GLineCursor *next; /* Localisation suivante */
- int ret; /* Bilan de comparaison */
-
- assert(!g_rw_lock_writer_trylock(&cache->access));
-
- assert(start < cache->used);
-
- result = start;
-
- get_cache_info_cursor(&cache->lines[start], start, 0, &init);
-
- for (i = start + 1; i < cache->used; i++)
- {
- get_cache_info_cursor(&cache->lines[i], i, 0, &next);
-
- ret = g_line_cursor_compare(init, next);
-
- g_object_unref(G_OBJECT(next));
-
- if (ret != 0)
- break;
-
- if ((g_buffer_cache_get_line_flags(cache, i) & flag) != 0)
- {
- result = i;
- break;
- }
-
- }
-
- g_object_unref(G_OBJECT(init));
-
- return result;
-
-}
+#ifdef HAVE_GTK_SUPPORT
/******************************************************************************
@@ -1888,3 +1941,6 @@ bool g_buffer_cache_get_cursor_coordinates(GBufferCache *cache, const GLineCurso
return result;
}
+
+
+#endif