diff options
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r-- | src/glibext/gcodebuffer.c | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c index 8ebc284..3dfb10e 100644 --- a/src/glibext/gcodebuffer.c +++ b/src/glibext/gcodebuffer.c @@ -370,6 +370,7 @@ GCodeBuffer *g_code_buffer_new(void) /****************************************************************************** * * * Paramètres : buffer = composant GTK à mettre à jour. * +* addr = adresse où va se situer la ligne. * * * * Description : Ajoute une nouvelle ligne à un tampon pour code désassemblé. * * * @@ -379,7 +380,7 @@ GCodeBuffer *g_code_buffer_new(void) * * ******************************************************************************/ -GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer) +GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer, vmpa_t addr) { GBufferLine *result; /* Instance à retourner */ @@ -390,7 +391,7 @@ GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer) buffer->count * sizeof(GBufferLine *)); } - result = g_buffer_line_new(); + result = g_buffer_line_new(addr); buffer->lines[buffer->used++] = result; return result; @@ -736,7 +737,51 @@ GBufferLine *g_buffer_view_find_line_at(GBufferView *view, gint y) lheight = g_buffer_view_get_line_height(view); index = y / lheight; - /* FIXME : à placer côté tampon ? */ return (index < view->buffer->used ? view->buffer->lines[index] : NULL); } + + +/****************************************************************************** +* * +* Paramètres : view = composant GTK à consulter. * +* addr = adresse à présenter à l'écran. * +* 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. * +* * +* Retour : true si l'adresse fait partie du composant, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_buffer_view_get_address_coordinates(GBufferView *view, vmpa_t addr, gint *x, gint *y) +{ + gint lheight; /* Hauteur d'une ligne */ + size_t i; /* Boucle de parcours */ + vmpa_t current; /* Adresse parcourue */ + + *x = 0; + *y = 0; + + lheight = g_buffer_view_get_line_height(view); + + for (i = 0; i < view->buffer->used; i++) + { + current = g_buffer_line_get_address(view->buffer->lines[i]); + + if (current == addr) + break; + + if (current > addr) + return false; + + *y += lheight; + + } + + return true; + +} |