diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2012-03-25 12:36:16 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2012-03-25 12:36:16 (GMT) |
commit | a174ee784f5d9e554ed09181b8e6d8c0205f8ef5 (patch) | |
tree | f5ccfb4c41fcb1f237bc285e8e71bc188b7c8b57 /src/glibext/gcodebuffer.c | |
parent | bbad297e902022ecac9fab21c01dc109560db8eb (diff) |
Scrolled to the selected symbol.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@241 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
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; + +} |