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 | |
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')
-rw-r--r-- | src/glibext/gbufferline.c | 28 | ||||
-rw-r--r-- | src/glibext/gbufferline.h | 5 | ||||
-rw-r--r-- | src/glibext/gcodebuffer.c | 51 | ||||
-rw-r--r-- | src/glibext/gcodebuffer.h | 8 |
4 files changed, 84 insertions, 8 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c index 6017bdd..e32e450 100644 --- a/src/glibext/gbufferline.c +++ b/src/glibext/gbufferline.c @@ -64,6 +64,8 @@ struct _GBufferLine { GObject parent; /* A laisser en premier */ + vmpa_t addr; /* Adresse geographique */ + buffer_line_column columns[BLC_COUNT]; /* Répartition du texte */ BufferLineColumn merge_start; /* Début de la zone globale */ @@ -399,7 +401,7 @@ static void g_buffer_line_init(GBufferLine *line) /****************************************************************************** * * -* Paramètres : - * +* Paramètres : addr = adresse où va se situer la ligne. * * * * Description : Crée une nouvelle représentation de fragments de texte. * * * @@ -409,12 +411,13 @@ static void g_buffer_line_init(GBufferLine *line) * * ******************************************************************************/ -GBufferLine *g_buffer_line_new(void) +GBufferLine *g_buffer_line_new(vmpa_t addr) { GBufferLine *result; /* Composant à retourner */ result = g_object_new(G_TYPE_BUFFER_LINE, NULL); - //result = g_new0(GBufferLine, 1); + + result->addr = addr; return result; @@ -423,6 +426,25 @@ GBufferLine *g_buffer_line_new(void) /****************************************************************************** * * +* Paramètres : line = ligne à venir consulter. * +* * +* Description : Indique l'adresse à laquelle se situe la ligne. * +* * +* Retour : Adresse mémoire ou physique. * +* * +* Remarques : - * +* * +******************************************************************************/ + +vmpa_t g_buffer_line_get_address(const GBufferLine *line) +{ + return line->addr; + +} + + +/****************************************************************************** +* * * Paramètres : line = ligne à venir compléter. * * index = index de la colonne visée par la procédure. * * segment = fragment de texte à ajouter à la colonne. * diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h index b5de831..1e115cd 100644 --- a/src/glibext/gbufferline.h +++ b/src/glibext/gbufferline.h @@ -110,7 +110,10 @@ typedef void (* buffer_line_draw_fc) (GBufferLine *, GdkDrawable *, GdkGC *, gin GType g_buffer_line_get_type(void); /* Crée une nouvelle représentation de fragments de texte. */ -GBufferLine *g_buffer_line_new(void); +GBufferLine *g_buffer_line_new(vmpa_t); + +/* Indique l'adresse à laquelle se situe la ligne. */ +vmpa_t g_buffer_line_get_address(const GBufferLine *); /* Ajoute un fragment de texte à une colonne de ligne. */ void g_buffer_line_add_segment(GBufferLine *, BufferLineColumn, GBufferSegment *); 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; + +} diff --git a/src/glibext/gcodebuffer.h b/src/glibext/gcodebuffer.h index dee114e..74e376c 100644 --- a/src/glibext/gcodebuffer.h +++ b/src/glibext/gcodebuffer.h @@ -56,8 +56,11 @@ GType g_code_buffer_get_type(void); /* Crée un nouveau composant de tampon pour code désassemblé. */ GCodeBuffer *g_code_buffer_new(void); +/* FIXME */ +#define g_code_buffer_append_new_line_fixme(b) g_code_buffer_append_new_line(b, 0ull) + /* Ajoute une nouvelle ligne à un tampon pour code désassemblé. */ -GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *); +GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *, vmpa_t); /* Traitement d'une ligne parcourue. */ typedef bool (* process_line_fc) (GCodeBuffer *, GBufferLine *, void *); @@ -106,6 +109,9 @@ void g_buffer_view_draw(const GBufferView *, const GdkEventExpose *, GdkGC *, gi /* Fournit la ligne présente à une ordonnée donnée. */ GBufferLine *g_buffer_view_find_line_at(GBufferView *, gint); +/* Indique la position d'affichage d'une adresse donnée. */ +bool g_buffer_view_get_address_coordinates(GBufferView *, vmpa_t, gint *, gint *); + #endif /* _GLIBEXT_GCODEBUFFER_H */ |