summaryrefslogtreecommitdiff
path: root/src/gtkext
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkext')
-rw-r--r--src/gtkext/gtkblockview.c85
-rw-r--r--src/gtkext/gtkbufferview-int.h7
-rw-r--r--src/gtkext/gtkbufferview.c10
3 files changed, 93 insertions, 9 deletions
diff --git a/src/gtkext/gtkblockview.c b/src/gtkext/gtkblockview.c
index 398856f..e026cbe 100644
--- a/src/gtkext/gtkblockview.c
+++ b/src/gtkext/gtkblockview.c
@@ -52,6 +52,12 @@ static void gtk_block_view_class_init(GtkBlockViewClass *);
/* Procède à l'initialisation de l'afficheur de bloc assembleur. */
static void gtk_block_view_init(GtkBlockView *);
+/* Assure la gestion des clics de souris sur le composant. */
+static gboolean gtk_block_view_button_press_event(GtkBlockView *, GdkEventButton *, gpointer);
+
+/* Redessine l'affichage suite à un changement visuel. */
+static gboolean gtk_block_view_need_redraw(GBufferView *, GtkBlockView *);
+
/* Prend acte de l'association d'un binaire chargé. */
static void gtk_block_view_attach_binary(GtkBlockView *, GLoadedBinary *, bool *, bool *);
@@ -104,6 +110,9 @@ static void gtk_block_view_init(GtkBlockView *view)
panel->attach = (attach_binary_fc)gtk_block_view_attach_binary;
+ g_signal_connect(G_OBJECT(view), "button_press_event",
+ G_CALLBACK(gtk_block_view_button_press_event), NULL);
+
}
@@ -132,6 +141,75 @@ GtkWidget *gtk_block_view_new(void)
/******************************************************************************
* *
+* Paramètres : view = composant GTK visé par l'opération. *
+* event = informations liées à l'événement. *
+* data = donnée non utilisée ici. *
+* *
+* Description : Assure la gestion des clics de souris sur le composant. *
+* *
+* Retour : FALSE pour poursuivre la propagation de l'événement. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static gboolean gtk_block_view_button_press_event(GtkBlockView *view, GdkEventButton *event, gpointer data)
+{
+ GtkBufferView *bview; /* Autre vision du composant */
+ gint real_x; /* Abscisse absolue réelle */
+ gint real_y; /* Ordonnée absolue réelle */
+
+ if (event->type == GDK_2BUTTON_PRESS)
+ {
+
+
+
+ printf("I feel %s clicked with button %d\n",
+ event->type == GDK_2BUTTON_PRESS ? "double" : "triple",
+ event->button);
+
+ bview = GTK_BUFFER_VIEW(view);
+
+ real_x = event->x;
+ real_y = event->y;
+
+ gtk_buffer_view_compute_real_coord(bview, &real_x, &real_y);
+
+ g_buffer_view_highlight_segments(gtk_buffer_view_get_buffer(bview), real_x, real_y);
+
+
+
+ }
+
+ return FALSE;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : view = composant GLib interne. *
+* block = composant GTK d'affichage. *
+* *
+* Description : Redessine l'affichage suite à un changement visuel. *
+* *
+* Retour : FALSE pour poursuivre la propagation de l'événement. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static gboolean gtk_block_view_need_redraw(GBufferView *view, GtkBlockView *block)
+{
+ gtk_widget_queue_draw(GTK_WIDGET(block));
+
+ return FALSE;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : view = composant GTK à mettre à jour. *
* binary = binaire associé à intégrer. *
* addr = indique si les positions doivent être affichées. *
@@ -148,9 +226,14 @@ GtkWidget *gtk_block_view_new(void)
static void gtk_block_view_attach_binary(GtkBlockView *view, GLoadedBinary *binary, bool *addr, bool *code)
{
GCodeBuffer *buffer; /* Tampon par défaut */
+ GBufferView *bview; /* Vue sur ce même tampon */
buffer = g_loaded_binary_get_disassembled_buffer(binary);
+ bview = g_buffer_view_new(buffer);
+
+ gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(view), bview, addr, code);
- gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(view), g_buffer_view_new(buffer), addr, code);
+ g_signal_connect(G_OBJECT(bview), "need-redraw",
+ G_CALLBACK(gtk_block_view_need_redraw), view);
}
diff --git a/src/gtkext/gtkbufferview-int.h b/src/gtkext/gtkbufferview-int.h
index db27b9e..5d5a407 100644
--- a/src/gtkext/gtkbufferview-int.h
+++ b/src/gtkext/gtkbufferview-int.h
@@ -54,5 +54,12 @@ struct _GtkBufferViewClass
};
+/* Transcrit les coordonnées à l'écran en coordonnées absolues. */
+void gtk_buffer_view_compute_fake_coord(GtkBufferView *, gint *, gint *);
+
+/* Transcrit les coordonnées absolues en coordonnées à l'écran. */
+void gtk_buffer_view_compute_real_coord(GtkBufferView *, gint *, gint *);
+
+
#endif /* _GTK_BUFFERVIEW_INT_H */
diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c
index 99b67ab..e94d11a 100644
--- a/src/gtkext/gtkbufferview.c
+++ b/src/gtkext/gtkbufferview.c
@@ -34,12 +34,6 @@ static void gtk_buffer_view_class_init(GtkBufferViewClass *);
/* Procède à l'initialisation de l'afficheur de tampons. */
static void gtk_buffer_view_init(GtkBufferView *);
-/* Transcrit les coordonnées à l'écran en coordonnées absolues. */
-static void gtk_buffer_view_compute_fake_coord(GtkBufferView *, gint *, gint *);
-
-/* Transcrit les coordonnées absolues en coordonnées à l'écran. */
-static void gtk_buffer_view_compute_real_coord(GtkBufferView *, gint *, gint *);
-
/* Fournit la taille de composant requise pour un plein rendu. */
static void gtk_buffer_view_size_request(GtkWidget *, GtkRequisition *);
@@ -128,7 +122,7 @@ static void gtk_buffer_view_init(GtkBufferView *view)
* *
******************************************************************************/
-static void gtk_buffer_view_compute_fake_coord(GtkBufferView *view, gint *x, gint *y)
+void gtk_buffer_view_compute_fake_coord(GtkBufferView *view, gint *x, gint *y)
{
if (GTK_VIEW_PANEL(view)->hadjustment != NULL)
*x -= gtk_adjustment_get_value(GTK_VIEW_PANEL(view)->hadjustment);
@@ -152,7 +146,7 @@ static void gtk_buffer_view_compute_fake_coord(GtkBufferView *view, gint *x, gin
* *
******************************************************************************/
-static void gtk_buffer_view_compute_real_coord(GtkBufferView *view, gint *x, gint *y)
+void gtk_buffer_view_compute_real_coord(GtkBufferView *view, gint *x, gint *y)
{
if (x != NULL && GTK_VIEW_PANEL(view)->hadjustment != NULL)
*x += gtk_adjustment_get_value(GTK_VIEW_PANEL(view)->hadjustment);