diff options
Diffstat (limited to 'src/gtkext')
-rw-r--r-- | src/gtkext/Makefile.am | 1 | ||||
-rw-r--r-- | src/gtkext/gtkblockview.c | 24 | ||||
-rw-r--r-- | src/gtkext/gtkgraphview.c | 120 | ||||
-rw-r--r-- | src/gtkext/gtkgraphview.h | 6 |
4 files changed, 143 insertions, 8 deletions
diff --git a/src/gtkext/Makefile.am b/src/gtkext/Makefile.am index a7023c5..51bea0f 100644 --- a/src/gtkext/Makefile.am +++ b/src/gtkext/Makefile.am @@ -12,6 +12,7 @@ libgtkext_la_SOURCES = \ gtkdockpanel.h gtkdockpanel.c \ gtkdropwindow.h gtkdropwindow.c \ gtkgraphview.h gtkgraphview.c \ + gtklinkrenderer.h gtklinkrenderer.c \ iodamarshal.h iodamarshal.c \ support.h support.c diff --git a/src/gtkext/gtkblockview.c b/src/gtkext/gtkblockview.c index 648421d..10941ab 100644 --- a/src/gtkext/gtkblockview.c +++ b/src/gtkext/gtkblockview.c @@ -103,8 +103,8 @@ static void gtk_block_view_realize(GtkWidget *widget); static gboolean gtk_block_view_button_press(GtkWidget *, GdkEventButton *event); -static gboolean gtk_block_view_expose(GtkWidget *widget, - GdkEventExpose *event); +/* Met à jour l'affichage de la vue sous forme de bloc. */ +static gboolean gtk_block_view_expose(GtkWidget *widget, GdkEventExpose *event); static void gtk_block_view_paint(GtkBlockView *view); static void gtk_block_view_destroy(GtkObject *object); @@ -129,7 +129,7 @@ GtkWidget * gtk_block_view_new(void) static void gtk_block_view_class_init(GtkBlockViewClass *klass) { - GtkWidgetClass *widget_class; + GtkWidgetClass *widget_class; /* Classe version Widget */ GtkObjectClass *object_class; @@ -313,9 +313,21 @@ void gtk_block_view_update_margin(GRenderingLine *line, GtkBlockView *view) -static gboolean -gtk_block_view_expose(GtkWidget *widget, - GdkEventExpose *event) + +/****************************************************************************** +* * +* Paramètres : view = composant GTK à redessiner. * +* event = informations liées à l'événement. * +* * +* Description : Met à jour l'affichage de la vue sous forme de bloc. * +* * +* Retour : FALSE pour poursuivre la propagation de l'événement. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static gboolean gtk_block_view_expose(GtkWidget *widget, GdkEventExpose *event) { g_return_val_if_fail(widget != NULL, FALSE); g_return_val_if_fail(GTK_IS_BLOCK_VIEW(widget), FALSE); diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index 8389148..8a25940 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -37,12 +37,17 @@ struct _GtkGraphView { GtkBinView parent; /* A laisser en premier */ + GdkGC *gc; /* Contexte graphique du rendu */ + vmpa_t start; /* Début de la portion vue */ vmpa_t end; /* Fin de la portion affichée */ GtkBinView **childs; /* Liste des sous-blocs */ size_t childs_count; /* Taille de cette liste */ + GtkLinkRenderer **links; /* Liste des liens graphiques */ + size_t links_count; /* Nombre de ces liens */ + }; /* Représentation de code binaire sous forme graphique (classe) */ @@ -59,6 +64,11 @@ static void gtk_graph_view_class_init(GtkGraphViewClass *); /* Initialise une instance d'afficheur de code en graphique. */ static void gtk_graph_view_init(GtkGraphView *); +static void gtk_graph_view_realize(GtkWidget *widget); + +/* Met à jour l'affichage de la vue sous forme graphique. */ +static gboolean gtk_graph_view_expose(GtkGraphView *, GdkEventExpose *); + /* Supprime tout contenu de l'afficheur de code en graphique. */ static void gtk_graph_view_reset(GtkGraphView *); @@ -81,7 +91,7 @@ G_DEFINE_TYPE(GtkGraphView, gtk_graph_view, GTK_TYPE_BIN_VIEW) /****************************************************************************** * * -* Paramètres : class = classe GTK à initialiser. * +* Paramètres : klass = classe GTK à initialiser. * * * * Description : Initialise la classe générique des graphiques de code. * * * @@ -91,8 +101,14 @@ G_DEFINE_TYPE(GtkGraphView, gtk_graph_view, GTK_TYPE_BIN_VIEW) * * ******************************************************************************/ -static void gtk_graph_view_class_init(GtkGraphViewClass *class) +static void gtk_graph_view_class_init(GtkGraphViewClass *klass) { + GtkWidgetClass *widget_class; /* Classe version Widget */ + + widget_class = (GtkWidgetClass *)klass; + + widget_class->realize = gtk_graph_view_realize; + widget_class->expose_event = gtk_graph_view_expose; } @@ -141,6 +157,82 @@ GtkWidget* gtk_graph_view_new(void) } + + + + + + + +static void +gtk_graph_view_realize(GtkWidget *widget) +{ + GdkWindowAttr attributes; + guint attributes_mask; + GdkColor white; /* Couleur de fond normale */ + + g_return_if_fail(widget != NULL); + g_return_if_fail(GTK_IS_GRAPH_VIEW(widget)); + + GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.event_mask = gtk_widget_get_events(widget) | GDK_BUTTON_PRESS_MASK | GDK_EXPOSURE_MASK; + + attributes_mask = GDK_WA_X | GDK_WA_Y; + + widget->window = gdk_window_new( + gtk_widget_get_parent_window (widget), + & attributes, attributes_mask + ); + + gdk_window_set_user_data(widget->window, widget); + + widget->style = gtk_style_attach(widget->style, widget->window); + + + gdk_color_white(gtk_widget_get_colormap(widget), &white); + gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &white); + + + GTK_GRAPH_VIEW(widget)->gc = gdk_gc_new(GDK_DRAWABLE(widget->window)); + +} + + + + +/****************************************************************************** +* * +* Paramètres : view = composant GTK à redessiner. * +* event = informations liées à l'événement. * +* * +* Description : Met à jour l'affichage de la vue sous forme graphique. * +* * +* Retour : FALSE pour poursuivre la propagation de l'événement. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static gboolean gtk_graph_view_expose(GtkGraphView *view, GdkEventExpose *event) +{ + size_t i; /* Boucle de parcours */ + + for (i = 0; i < view->links_count; i++) + gtk_link_renderer_draw(view->links[i], GDK_DRAWABLE(GTK_WIDGET(view)->window), view->gc); + + return FALSE; + +} + + /****************************************************************************** * * * Paramètres : view = instance GTK à réinitialiser. * @@ -404,3 +496,27 @@ static GtkBinView **gtk_graph_view_load_nodes(openida_binary *binary, GRendering } + + +/****************************************************************************** +* * +* Paramètres : view = composant GTK à mettre à jour. * +* links = liens graphiques entre les blocs à intégrer. * +* count = quantité de ces liens graphiques. * +* * +* Description : Définit les liens graphiques à présenter avec la vue. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_graph_view_attach_links(GtkGraphView *view, GtkLinkRenderer **links, size_t count) +{ + /* TODO : free ? */ + + view->links = links; + view->links_count = count; + +} diff --git a/src/gtkext/gtkgraphview.h b/src/gtkext/gtkgraphview.h index 12dd606..1d0c2ab 100644 --- a/src/gtkext/gtkgraphview.h +++ b/src/gtkext/gtkgraphview.h @@ -28,6 +28,9 @@ #include <gtk/gtkwidget.h> +#include "gtklinkrenderer.h" + + #define GTK_TYPE_GRAPH_VIEW (gtk_graph_view_get_type()) #define GTK_GRAPH_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_GRAPH_VIEW, GtkGraphView)) @@ -51,6 +54,9 @@ GType gtk_graph_view_get_type(void); /* Crée un nouveau composant pour l'affichage en graphique. */ GtkWidget* gtk_graph_view_new(void); +/* Définit les liens graphiques à présenter avec la vue. */ +void gtk_graph_view_attach_links(GtkGraphView *, GtkLinkRenderer **, size_t); + #endif /* _GTKEXT_GTKGRAPHVIEW_H */ |