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 */ | 
