summaryrefslogtreecommitdiff
path: root/src/glibext/gcodebuffer.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2012-03-25 12:36:16 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2012-03-25 12:36:16 (GMT)
commita174ee784f5d9e554ed09181b8e6d8c0205f8ef5 (patch)
treef5ccfb4c41fcb1f237bc285e8e71bc188b7c8b57 /src/glibext/gcodebuffer.c
parentbbad297e902022ecac9fab21c01dc109560db8eb (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.c51
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;
+
+}