summaryrefslogtreecommitdiff
path: root/src/glibext
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
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')
-rw-r--r--src/glibext/gbufferline.c28
-rw-r--r--src/glibext/gbufferline.h5
-rw-r--r--src/glibext/gcodebuffer.c51
-rw-r--r--src/glibext/gcodebuffer.h8
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 */