diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-07-16 20:11:21 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-07-16 20:11:21 (GMT) |
commit | f6e56cebfa878dd32a2405fd0c916a40140a1ff0 (patch) | |
tree | 3e364d2e2b2de19b85ab6d14f856d4b8db11737a /src/gtkext | |
parent | e0d03e3eddb9d240cc21ac1b7a7ade915fd17942 (diff) |
Applied a new GUI update with the new loaded panels features.
Diffstat (limited to 'src/gtkext')
-rw-r--r-- | src/gtkext/gtkbufferdisplay.c | 5 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel-int.h | 4 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel.c | 213 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel.h | 22 | ||||
-rw-r--r-- | src/gtkext/gtkgraphdisplay.c | 2 |
5 files changed, 96 insertions, 150 deletions
diff --git a/src/gtkext/gtkbufferdisplay.c b/src/gtkext/gtkbufferdisplay.c index ff651c8..4a2c814 100644 --- a/src/gtkext/gtkbufferdisplay.c +++ b/src/gtkext/gtkbufferdisplay.c @@ -521,7 +521,7 @@ static gboolean gtk_buffer_display_key_press(GtkWidget *widget, GdkEventKey *eve if (status) { gtk_buffer_display_relocate_caret(display, &area, cursor); - _gtk_display_panel_scroll_to_cursor(panel, cursor, SPT_RAW, false); + g_loaded_panel_scroll_to_cursor(G_LOADED_PANEL(panel), cursor, SPT_RAW, false); } else g_signal_emit_by_name(display, "reach-limit", dir); @@ -1038,7 +1038,8 @@ static void gtk_buffer_display_restart_caret_blinking(GtkBufferDisplay *display) } - g_signal_emit_by_name(display, "caret-moved", &display->caret_addr); + if (display->cursor != NULL) + g_signal_emit_by_name(display, "cursor-moved", display->cursor); } diff --git a/src/gtkext/gtkdisplaypanel-int.h b/src/gtkext/gtkdisplaypanel-int.h index fa67dbd..cf0335a 100644 --- a/src/gtkext/gtkdisplaypanel-int.h +++ b/src/gtkext/gtkdisplaypanel-int.h @@ -114,10 +114,6 @@ struct _GtkDisplayPanelClass set_cursor_fc set_cursor; /* Application d'une position */ cache_glance_fc cache_glance; /* Cache de la mignature */ - /* Signaux */ - - void (* caret_moved) (GtkDisplayPanel *, const vmpa2t *); - }; /* Propriétés propres au composant d'affichage */ diff --git a/src/gtkext/gtkdisplaypanel.c b/src/gtkext/gtkdisplaypanel.c index 15d257f..24436ca 100644 --- a/src/gtkext/gtkdisplaypanel.c +++ b/src/gtkext/gtkdisplaypanel.c @@ -105,6 +105,9 @@ static GLineCursor *gtk_display_panel_get_cursor(const GtkDisplayPanel *); /* Définit le position courante dans un panneau de chargement. */ static void gtk_display_panel_set_cursor(GtkDisplayPanel *, const GLineCursor *); +/* S'assure qu'un emplacement donné est visible à l'écran. */ +static void gtk_display_panel_scroll_to_cursor(GtkDisplayPanel *, const GLineCursor *, ScrollPositionTweak, bool); + /* Place en cache un rendu destiné à l'aperçu graphique rapide. */ static void gtk_display_panel_cache_glance(GtkDisplayPanel *, cairo_t *, const GtkAllocation *, double); @@ -155,14 +158,6 @@ static void gtk_display_panel_class_init(GtkDisplayPanelClass *class) panel_class->compute_inc = gtk_display_panel_compute_scroll_inc; - g_signal_new("caret-moved", - GTK_TYPE_DISPLAY_PANEL, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GtkDisplayPanelClass, caret_moved), - NULL, NULL, - g_cclosure_marshal_VOID__POINTER, - G_TYPE_NONE, 1, G_TYPE_POINTER); - } @@ -205,6 +200,7 @@ static void gtk_display_panel_loaded_interface_init(GLoadedPanelInterface *iface iface->get_cursor = (get_loaded_cursor_fc)gtk_display_panel_get_cursor; iface->set_cursor = (set_loaded_cursor_fc)gtk_display_panel_set_cursor; + iface->scroll = (scroll_loaded_to_cursor_fc)gtk_display_panel_scroll_to_cursor; iface->cache_glance = (cache_loaded_glance_fc)gtk_display_panel_cache_glance; @@ -843,36 +839,6 @@ static void on_view_panel_binary_display_change(GLoadedBinary *binary, BinaryVie * * * Paramètres : panel = composant GTK à consulter. * * * -* Description : Fournit le binaire associé à la représentation. * -* * -* Retour : Représentation de contenu binaire. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GLoadedBinary *gtk_display_panel_get_binary(const GtkDisplayPanel *panel) -{ - g_object_ref(G_OBJECT(panel->binary)); - - return panel->binary; - -} - - - - - - - - - - - -/****************************************************************************** -* * -* Paramètres : panel = composant GTK à consulter. * -* * * Description : Indique la position courante du curseur. * * * * Retour : Emplacement courant du curseur ou NULL si aucun. * @@ -924,90 +890,6 @@ GObject *gtk_display_panel_get_active_object(const GtkDisplayPanel *panel) /****************************************************************************** * * -* Paramètres : panel = composant GTK à manipuler. * -* cursor = emplacement à présenter à l'écran. * -* tweak = adaptation finale à effectuer. * -* move = doit-on déplacer le curseur à l'adresse indiquée ? * -* * -* Description : S'assure qu'une adresse donnée est visible à l'écran. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void _gtk_display_panel_scroll_to_cursor(GtkDisplayPanel *panel, const GLineCursor *cursor, ScrollPositionTweak tweak, bool move) -{ - GtkWidget *parent; /* Support parent à valider */ - gint x; /* Abscisse à garantir */ - gint y; /* Ordonnée à garantir */ - GtkWidget *viewport; /* Parent avec défilement */ - GtkAdjustment *adj; /* Défilement à mettre à jour */ - gdouble step_inc; /* Valeur d'un petit pas */ - gdouble page_size; /* Taille de l'affichage */ - double value; /* Valeur courante */ - - /** - * Si une vue partielle se déplace via cette fonction, il faut potentiellement - * rediriger l'appel vers la vue en graphiques parente. - */ - - parent = gtk_widget_get_parent(GTK_WIDGET(panel)); - parent = gtk_widget_get_parent(GTK_WIDGET(parent)); - - if (GTK_IS_DISPLAY_PANEL(parent)) - panel = GTK_DISPLAY_PANEL(parent); - - /* - if (GTK_DISPLAY_PANEL_GET_CLASS(panel)->define != NULL) - GTK_DISPLAY_PANEL_GET_CLASS(panel)->define(panel, addr); - */ - - if (GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_coordinates(panel, cursor, &x, &y, tweak)) - { - viewport = gtk_widget_get_parent(GTK_WIDGET(panel)); - - /* Eventuel défilement horizontal */ - - g_object_get(G_OBJECT(viewport), "hadjustment", &adj, NULL); - - step_inc = gtk_adjustment_get_step_increment(adj); - page_size = gtk_adjustment_get_page_size(adj); - value = gtk_adjustment_get_value(adj); - - if (x < value) - gtk_adjustment_set_value(adj, x); - - else if ((x + step_inc) > (value + page_size)) - gtk_adjustment_set_value(adj, x + step_inc - page_size); - - /* Eventuel défilement vertical */ - - g_object_get(G_OBJECT(viewport), "vadjustment", &adj, NULL); - - step_inc = gtk_adjustment_get_step_increment(adj); - page_size = gtk_adjustment_get_page_size(adj); - value = gtk_adjustment_get_value(adj); - - if (y < value || tweak != SPT_RAW) - gtk_adjustment_set_value(adj, y); - - else if ((y + step_inc) > (value + page_size)) - gtk_adjustment_set_value(adj, y + step_inc - page_size); - - /* Déplacement du curseur */ - - if (move && GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_coordinates(panel, cursor, &x, &y, SPT_RAW)) - GTK_DISPLAY_PANEL_GET_CLASS(panel)->move_caret_to(panel, x, y); - - } - -} - - -/****************************************************************************** -* * * Paramètres : panel = composant GTK à manipuler. * * addr = adresse à présenter à l'écran. * * * @@ -1159,6 +1041,9 @@ static GLoadedContent *gtk_display_panel_get_content(const GtkDisplayPanel *pane result = G_LOADED_CONTENT(panel->binary); + if (result != NULL) + g_object_ref(G_OBJECT(result)); + return result; } @@ -1209,6 +1094,90 @@ static void gtk_display_panel_set_cursor(GtkDisplayPanel *panel, const GLineCurs /****************************************************************************** * * +* Paramètres : panel = composant GTK à manipuler. * +* cursor = emplacement à présenter à l'écran. * +* tweak = adaptation finale à effectuer. * +* move = doit-on déplacer le curseur à l'adresse indiquée ? * +* * +* Description : S'assure qu'un emplacement donné est visible à l'écran. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_display_panel_scroll_to_cursor(GtkDisplayPanel *panel, const GLineCursor *cursor, ScrollPositionTweak tweak, bool move) +{ + GtkWidget *parent; /* Support parent à valider */ + gint x; /* Abscisse à garantir */ + gint y; /* Ordonnée à garantir */ + GtkWidget *viewport; /* Parent avec défilement */ + GtkAdjustment *adj; /* Défilement à mettre à jour */ + gdouble step_inc; /* Valeur d'un petit pas */ + gdouble page_size; /* Taille de l'affichage */ + double value; /* Valeur courante */ + + /** + * Si une vue partielle se déplace via cette fonction, il faut potentiellement + * rediriger l'appel vers la vue en graphiques parente. + */ + + parent = gtk_widget_get_parent(GTK_WIDGET(panel)); + parent = gtk_widget_get_parent(GTK_WIDGET(parent)); + + if (GTK_IS_DISPLAY_PANEL(parent)) + panel = GTK_DISPLAY_PANEL(parent); + + /* + if (GTK_DISPLAY_PANEL_GET_CLASS(panel)->define != NULL) + GTK_DISPLAY_PANEL_GET_CLASS(panel)->define(panel, addr); + */ + + if (GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_coordinates(panel, cursor, &x, &y, tweak)) + { + viewport = gtk_widget_get_parent(GTK_WIDGET(panel)); + + /* Eventuel défilement horizontal */ + + g_object_get(G_OBJECT(viewport), "hadjustment", &adj, NULL); + + step_inc = gtk_adjustment_get_step_increment(adj); + page_size = gtk_adjustment_get_page_size(adj); + value = gtk_adjustment_get_value(adj); + + if (x < value) + gtk_adjustment_set_value(adj, x); + + else if ((x + step_inc) > (value + page_size)) + gtk_adjustment_set_value(adj, x + step_inc - page_size); + + /* Eventuel défilement vertical */ + + g_object_get(G_OBJECT(viewport), "vadjustment", &adj, NULL); + + step_inc = gtk_adjustment_get_step_increment(adj); + page_size = gtk_adjustment_get_page_size(adj); + value = gtk_adjustment_get_value(adj); + + if (y < value || tweak != SPT_RAW) + gtk_adjustment_set_value(adj, y); + + else if ((y + step_inc) > (value + page_size)) + gtk_adjustment_set_value(adj, y + step_inc - page_size); + + /* Déplacement du curseur */ + + if (move && GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_coordinates(panel, cursor, &x, &y, SPT_RAW)) + GTK_DISPLAY_PANEL_GET_CLASS(panel)->move_caret_to(panel, x, y); + + } + +} + + +/****************************************************************************** +* * * Paramètres : panel = composant GTK à manipuler. * * cairo = assistant pour la création de rendus. * * area = taille de la surface réduite à disposition. * diff --git a/src/gtkext/gtkdisplaypanel.h b/src/gtkext/gtkdisplaypanel.h index c060c39..b336799 100644 --- a/src/gtkext/gtkdisplaypanel.h +++ b/src/gtkext/gtkdisplaypanel.h @@ -30,6 +30,7 @@ #include "../analysis/binary.h" #include "../glibext/glinecursor.h" +#include "../glibext/gloadedpanel.h" @@ -60,33 +61,12 @@ void gtk_display_panel_set_addresses_display(GtkDisplayPanel *, bool); /* Définit si le code doit apparaître dans le rendu. */ void gtk_display_panel_set_code_display(GtkDisplayPanel *, bool); -/* Fournit le binaire associé à la représentation. */ -GLoadedBinary *gtk_display_panel_get_binary(const GtkDisplayPanel *); - - - - -/* Adaptation d'une position sur une surface */ -typedef enum _ScrollPositionTweak -{ - SPT_RAW, /* Aucun ajustement */ - SPT_TOP, /* Le plus haut possible */ - SPT_CENTER, /* Au centre de la surface */ - SPT_BOTTOM /* Le plus bas possible */ - -} ScrollPositionTweak; - /* Indique la position courante du curseur. */ const vmpa2t *gtk_display_panel_get_caret_location(const GtkDisplayPanel *); /* Fournit l'élément actif lié à la position courante. */ GObject *gtk_display_panel_get_active_object(const GtkDisplayPanel *); -/* S'assure qu'une adresse donnée est visible à l'écran. */ -void _gtk_display_panel_scroll_to_cursor(GtkDisplayPanel *, const GLineCursor *, ScrollPositionTweak, bool); - -#define gtk_display_panel_scroll_to_cursor(p, c, t) _gtk_display_panel_scroll_to_cursor(p, c, t, true) - /* Demande à qui veut répondre un déplacement du curseur. */ void gtk_display_panel_request_move(GtkDisplayPanel *, const vmpa2t *); diff --git a/src/gtkext/gtkgraphdisplay.c b/src/gtkext/gtkgraphdisplay.c index 0fe86ef..7721a44 100644 --- a/src/gtkext/gtkgraphdisplay.c +++ b/src/gtkext/gtkgraphdisplay.c @@ -698,7 +698,7 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons ggddma_done: - change_editor_items_current_view_content(G_LOADED_PANEL(display)); + update_editor_items_current_view(G_LOADED_PANEL(display)); g_object_unref(G_OBJECT(format)); |