diff options
Diffstat (limited to 'src/glibext')
-rw-r--r-- | src/glibext/gbuffercache.c | 69 | ||||
-rw-r--r-- | src/glibext/gbuffercache.h | 6 | ||||
-rw-r--r-- | src/glibext/gbufferview.c | 49 | ||||
-rw-r--r-- | src/glibext/gbufferview.h | 6 |
4 files changed, 62 insertions, 68 deletions
diff --git a/src/glibext/gbuffercache.c b/src/glibext/gbuffercache.c index a64ec68..91f3a6d 100644 --- a/src/glibext/gbuffercache.c +++ b/src/glibext/gbuffercache.c @@ -29,7 +29,6 @@ #include <stdlib.h> -#include "gbinarycursor.h" // REMME #include "chrysamarshal.h" @@ -1479,11 +1478,11 @@ void g_buffer_cache_draw(const GBufferCache *cache, cairo_t *cr, size_t first, s /****************************************************************************** * * -* Paramètres : cache = tampon de lignes à consulter. * -* addr = adresse à retrouver dans le tampon. * -* first = indique si on l'arrête à la première ou la dernière. * -* start = borne inférieure des recherches (incluse). * -* end = borne supérieure des recherches (incluse). * +* Paramètres : cache = tampon de lignes à consulter. * +* cursor = emplacement à retrouver dans le tampon. * +* first = indique si on l'arrête à la première ou la dernière.* +* start = borne inférieure des recherches (incluse). * +* end = borne supérieure des recherches (incluse). * * * * Description : Indique l'indice correspondant à une adresse donnée. * * * @@ -1493,10 +1492,9 @@ void g_buffer_cache_draw(const GBufferCache *cache, cairo_t *cr, size_t first, s * * ******************************************************************************/ -size_t _g_buffer_cache_find_index_by_addr(const GBufferCache *cache, const vmpa2t *addr, bool first, size_t start, size_t end) +size_t _g_buffer_cache_find_index_by_cursor(const GBufferCache *cache, const GLineCursor *cursor, bool first, size_t start, size_t end) { size_t result; /* Indice à retourner */ - GLineCursor *___tmp; cache_info *found; /* Eventuel élément trouvé */ int find_containing_generator(const GLineCursor *c, const cache_info *i) @@ -1513,12 +1511,7 @@ size_t _g_buffer_cache_find_index_by_addr(const GBufferCache *cache, const vmpa2 } - - ___tmp = g_binary_cursor_new(); - g_binary_cursor_update(G_BINARY_CURSOR(___tmp), addr); - - - found = (cache_info *)bsearch(___tmp, &cache->lines[start], end - start + 1, + found = (cache_info *)bsearch(cursor, &cache->lines[start], end - start + 1, sizeof(cache_info), (__compar_fn_t)find_containing_generator); if (found == NULL) @@ -1536,7 +1529,7 @@ size_t _g_buffer_cache_find_index_by_addr(const GBufferCache *cache, const vmpa2 { found = &cache->lines[result - 1]; - if (find_containing_generator(___tmp, found) != 0) + if (find_containing_generator(cursor, found) != 0) break; } @@ -1546,17 +1539,13 @@ size_t _g_buffer_cache_find_index_by_addr(const GBufferCache *cache, const vmpa2 { found = &cache->lines[result + 1]; - if (find_containing_generator(___tmp, found) != 0) + if (find_containing_generator(cursor, found) != 0) break; } } - - g_object_unref(G_OBJECT(___tmp)); - - return result; } @@ -1564,9 +1553,9 @@ size_t _g_buffer_cache_find_index_by_addr(const GBufferCache *cache, const vmpa2 /****************************************************************************** * * -* Paramètres : cache = tampon de lignes à consulter. * -* addr = adresse à retrouver dans le tampon. * -* first = indique si on l'arrête à la première ou la dernière. * +* Paramètres : cache = tampon de lignes à consulter. * +* cursor = emplacement à retrouver dans le tampon. * +* first = indique si on l'arrête à la première ou la dernière.* * * * Description : Indique l'indice correspondant à une adresse donnée. * * * @@ -1576,14 +1565,14 @@ size_t _g_buffer_cache_find_index_by_addr(const GBufferCache *cache, const vmpa2 * * ******************************************************************************/ -size_t g_buffer_cache_find_index_by_addr(const GBufferCache *cache, const vmpa2t *addr, bool first) +size_t g_buffer_cache_find_index_by_cursor(const GBufferCache *cache, const GLineCursor *cursor, bool first) { size_t result; /* Indice à retourner */ if (cache->used == 0) result = 0; else - result = _g_buffer_cache_find_index_by_addr(cache, addr, first, 0, cache->used - 1); + result = _g_buffer_cache_find_index_by_cursor(cache, cursor, first, 0, cache->used - 1); return result; @@ -1646,13 +1635,13 @@ size_t g_buffer_cache_look_for_flag(const GBufferCache *cache, size_t start, Buf /****************************************************************************** * * -* Paramètres : cache = tampon de lignes à consulter. * -* addr = adresse à présenter à l'écran. * -* first = borne inférieure des recherches (incluse). * -* last = borne supérieure des recherches (incluse). * -* code = s'arrête si possible à une ligne avec code. * -* x = position horizontale au sein du composant. [OUT] * -* y = position verticale au sein du composant. [OUT] * +* Paramètres : cache = tampon de lignes à consulter. * +* cursor = emplacement à présenter à l'écran. * +* first = borne inférieure des recherches (incluse). * +* last = borne supérieure des recherches (incluse). * +* code = s'arrête si possible à une ligne avec code. * +* x = position horizontale au sein du composant. [OUT] * +* y = position verticale au sein du composant. [OUT] * * * * Description : Indique la position d'affichage d'une adresse donnée. * * * @@ -1662,21 +1651,15 @@ size_t g_buffer_cache_look_for_flag(const GBufferCache *cache, size_t start, Buf * * ******************************************************************************/ -bool g_buffer_cache_get_address_coordinates(const GBufferCache *cache, const vmpa2t *addr, size_t first, size_t last, bool code, gint *x, gint *y) +bool g_buffer_cache_get_cursor_coordinates(const GBufferCache *cache, const GLineCursor *cursor, size_t first, size_t last, bool code, gint *x, gint *y) { bool result; /* Bilan à retourner */ - GLineCursor *___tmp; size_t index; /* Indice de correspondance */ gint lheight; /* Hauteur d'une ligne */ const cache_info *info; /* Infos sur une ligne donnée */ const generator_link *generator; /* Générateur retenu */ - - ___tmp = g_binary_cursor_new(); - g_binary_cursor_update(G_BINARY_CURSOR(___tmp), addr); - - - index = _g_buffer_cache_find_index_by_addr(cache, addr, true, first, last); + index = _g_buffer_cache_find_index_by_cursor(cache, cursor, true, first, last); result = (index < cache->used); @@ -1702,7 +1685,7 @@ bool g_buffer_cache_get_address_coordinates(const GBufferCache *cache, const vmp else generator = &info->generators[0]; - if (!g_line_generator_contains_cursor(generator->instance, index + 1, generator->repeat, ___tmp)) + if (!g_line_generator_contains_cursor(generator->instance, index + 1, generator->repeat, cursor)) break; *y += lheight; @@ -1711,10 +1694,6 @@ bool g_buffer_cache_get_address_coordinates(const GBufferCache *cache, const vmp } - - g_object_unref(G_OBJECT(___tmp)); - - return result; } diff --git a/src/glibext/gbuffercache.h b/src/glibext/gbuffercache.h index fdf59d7..453588e 100644 --- a/src/glibext/gbuffercache.h +++ b/src/glibext/gbuffercache.h @@ -105,16 +105,16 @@ void g_buffer_cache_collect_widths(GBufferCache *, size_t, line_width_summary *) void g_buffer_cache_draw(const GBufferCache *, cairo_t *, size_t, size_t, const cairo_rectangle_int_t *, const bool *, const gint *, const segcnt_list *); /* Indique l'indice correspondant à une adresse donnée. */ -size_t _g_buffer_cache_find_index_by_addr(const GBufferCache *, const vmpa2t *, bool, size_t, size_t); +size_t _g_buffer_cache_find_index_by_cursor(const GBufferCache *, const GLineCursor *, bool, size_t, size_t); /* Indique l'indice correspondant à une adresse donnée. */ -size_t g_buffer_cache_find_index_by_addr(const GBufferCache *, const vmpa2t *, bool); +size_t g_buffer_cache_find_index_by_cursor(const GBufferCache *, const GLineCursor *, bool); /* Avance autant que possible vers une ligne idéale. */ size_t g_buffer_cache_look_for_flag(const GBufferCache *, size_t, BufferLineFlags); /* Indique la position d'affichage d'une adresse donnée. */ -bool g_buffer_cache_get_address_coordinates(const GBufferCache *, const vmpa2t *, size_t, size_t, bool, gint *, gint *); +bool g_buffer_cache_get_cursor_coordinates(const GBufferCache *, const GLineCursor *, size_t, size_t, bool, gint *, gint *); diff --git a/src/glibext/gbufferview.c b/src/glibext/gbufferview.c index 0eff4d8..c5bd81e 100644 --- a/src/glibext/gbufferview.c +++ b/src/glibext/gbufferview.c @@ -39,8 +39,8 @@ struct _GBufferView bool external; /* Note l'origine de la liste */ bool unrestricted; /* Validité des informations */ - vmpa2t start; /* Première ligne intégrée */ - vmpa2t end; /* Dernière ligne intégrée */ + GLineCursor *start; /* Première ligne intégrée */ + GLineCursor *end; /* Dernière ligne intégrée */ size_t first; /* Indice de la première ligne */ size_t last; /* Indice de la dernière ligne */ @@ -391,7 +391,7 @@ GBufferCache *g_buffer_view_get_cache(const GBufferView *view) * * ******************************************************************************/ -void g_buffer_view_restrict(GBufferView *view, const vmpa2t *start, const vmpa2t *end) +void g_buffer_view_restrict(GBufferView *view, GLineCursor *start, GLineCursor *end) { bool state; /* Nouvel état à proclamer */ GWidthTracker *template; /* Suivi déjà en place */ @@ -419,11 +419,11 @@ void g_buffer_view_restrict(GBufferView *view, const vmpa2t *start, const vmpa2t else { - copy_vmpa(&view->start, start); - copy_vmpa(&view->end, end); + view->start = start; + view->end = end; - view->first = g_buffer_cache_find_index_by_addr(view->cache, start, true); - view->last = g_buffer_cache_find_index_by_addr(view->cache, end, false); + view->first = g_buffer_cache_find_index_by_cursor(view->cache, start, true); + view->last = g_buffer_cache_find_index_by_cursor(view->cache, end, false); view->tracker = g_width_tracker_new_restricted(template, view->first, view->last); @@ -450,12 +450,27 @@ void g_buffer_view_restrict(GBufferView *view, const vmpa2t *start, const vmpa2t * * ******************************************************************************/ -bool g_buffer_view_get_restrictions(const GBufferView *view, vmpa2t *start, vmpa2t *end) +bool g_buffer_view_get_restrictions(const GBufferView *view, GLineCursor **start, GLineCursor **end) { if (!view->unrestricted) { - if (start != NULL) copy_vmpa(start, &view->start); - if (end != NULL) copy_vmpa(end, &view->end); + if (start != NULL) + { + *start = view->start; + g_object_ref(G_OBJECT(*start)); + } + + if (end != NULL) + { + *end = view->end; + g_object_ref(G_OBJECT(*end)); + } + + } + else + { + if (start != NULL) *start = NULL; + if (end != NULL) *end = NULL; } return !view->unrestricted; @@ -1184,11 +1199,11 @@ static GBufferLine *g_buffer_view_find_line_at(GBufferView *view, gint y, size_t /****************************************************************************** * * -* Paramètres : view = visualisation à consulter. * -* addr = adresse à présenter à l'écran. * -* code = s'arrête si possible à une ligne avec code. * -* x = position horizontale au sein du composant. [OUT] * -* y = position verticale au sein du composant. [OUT] * +* Paramètres : view = visualisation à consulter. * +* cursor = emplacement à présenter à l'écran. * +* code = s'arrête si possible à une ligne avec code. * +* x = position horizontale au sein du composant. [OUT] * +* y = position verticale au sein du composant. [OUT] * * * * Description : Indique la position d'affichage d'une adresse donnée. * * * @@ -1198,11 +1213,11 @@ static GBufferLine *g_buffer_view_find_line_at(GBufferView *view, gint y, size_t * * ******************************************************************************/ -bool g_buffer_view_get_address_coordinates(GBufferView *view, const vmpa2t *addr, bool code, gint *x, gint *y) +bool g_buffer_view_get_cursor_coordinates(GBufferView *view, const GLineCursor *cursor, bool code, gint *x, gint *y) { bool result; /* Bilan à retourner */ - result = g_buffer_cache_get_address_coordinates(view->cache, addr, view->first, view->last, code, x, y); + result = g_buffer_cache_get_cursor_coordinates(view->cache, cursor, view->first, view->last, code, x, y); return result; diff --git a/src/glibext/gbufferview.h b/src/glibext/gbufferview.h index facc3b7..6b5ef45 100644 --- a/src/glibext/gbufferview.h +++ b/src/glibext/gbufferview.h @@ -57,10 +57,10 @@ GBufferView *g_buffer_view_new(GBufferCache *, segcnt_list *); GBufferCache *g_buffer_view_get_cache(const GBufferView *); /* Restreint le champ d'application de l'affichage. */ -void g_buffer_view_restrict(GBufferView *, const vmpa2t *, const vmpa2t *); +void g_buffer_view_restrict(GBufferView *, GLineCursor *, GLineCursor *); /* Indique le champ d'application de l'affichage. */ -bool g_buffer_view_get_restrictions(const GBufferView *, vmpa2t *, vmpa2t *); +bool g_buffer_view_get_restrictions(const GBufferView *, GLineCursor **, GLineCursor **); @@ -105,7 +105,7 @@ void g_buffer_view_draw(const GBufferView *, cairo_t *, gint, const cairo_rectan /* Indique la position d'affichage d'une adresse donnée. */ -bool g_buffer_view_get_address_coordinates(GBufferView *, const vmpa2t *, bool, gint *, gint *); +bool g_buffer_view_get_cursor_coordinates(GBufferView *, const GLineCursor *, bool, gint *, gint *); |