diff options
Diffstat (limited to 'src/gtkext')
-rw-r--r-- | src/gtkext/gtkbufferdisplay.c | 25 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel-int.h | 7 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel.c | 29 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel.h | 7 | ||||
-rw-r--r-- | src/gtkext/gtkgraphdisplay.c | 63 | ||||
-rw-r--r-- | src/gtkext/gtkgraphdisplay.h | 15 |
6 files changed, 128 insertions, 18 deletions
diff --git a/src/gtkext/gtkbufferdisplay.c b/src/gtkext/gtkbufferdisplay.c index 0794dd4..01df570 100644 --- a/src/gtkext/gtkbufferdisplay.c +++ b/src/gtkext/gtkbufferdisplay.c @@ -382,6 +382,7 @@ static gboolean gtk_buffer_display_draw(GtkWidget *widget, cairo_t *cr) GtkBufferDisplay *display; /* Autre version du composant */ GtkDisplayPanel *parent; /* Autre version du composant */ GdkWindow *window; /* Fenêtre à redessiner */ + GtkAllocation allocation; /* Aire complète du composant */ cairo_region_t *region; /* Région visible à redessiner */ cairo_rectangle_int_t area; /* Surface correspondante */ GtkStyleContext *context; /* Contexte du thème actuel */ @@ -401,9 +402,22 @@ static gboolean gtk_buffer_display_draw(GtkWidget *widget, cairo_t *cr) gtk_cairo_transform_to_window(cr, widget, window); - region = gdk_window_get_clip_region(window); - cairo_region_get_extents(region, &area); - cairo_region_destroy(region); + if (parent->export) + { + gtk_widget_get_allocation(widget, &allocation); + + area.x = 0; + area.y = 0; + area.width = allocation.width; + area.height = allocation.height; + + } + else + { + region = gdk_window_get_clip_region(window); + cairo_region_get_extents(region, &area); + cairo_region_destroy(region); + } context = gtk_widget_get_style_context(widget); @@ -473,7 +487,7 @@ static gboolean gtk_buffer_display_draw(GtkWidget *widget, cairo_t *cr) g_generic_config_get_value(get_main_configuration(), MPK_SELECTION_LINE, &sel_line); sel_line &= gtk_widget_has_focus(widget); - if (!sel_line || display->cursor == NULL || !g_line_cursor_is_valid(display->cursor)) + if (!sel_line || display->cursor == NULL || !g_line_cursor_is_valid(display->cursor) || parent->export) selected = NULL; else { @@ -484,7 +498,8 @@ static gboolean gtk_buffer_display_draw(GtkWidget *widget, cairo_t *cr) area.x -= virt_x; virt_y += area.y; - g_buffer_view_draw(display->view, cr, virt_y, &area, parent->options, &display->offsets, selected); + g_buffer_view_draw(display->view, cr, virt_y, &area, parent->options, &display->offsets, + selected, parent->export); } diff --git a/src/gtkext/gtkdisplaypanel-int.h b/src/gtkext/gtkdisplaypanel-int.h index 62c990e..7be5616 100644 --- a/src/gtkext/gtkdisplaypanel-int.h +++ b/src/gtkext/gtkdisplaypanel-int.h @@ -71,6 +71,9 @@ typedef GLineCursor * (* get_cursor_fc) (const GtkDisplayPanel *); /* Place en cache un rendu destiné à l'aperçu graphique rapide. */ typedef void (* cache_glance_fc) (GtkDisplayPanel *, cairo_t *, const GtkAllocation *, double); +/* Marque ou non le composant pour une exportation prochaine. */ +typedef void (* prepare_export_fc) (GtkDisplayPanel *, bool); + /* Composant d'affichage générique (instance) */ @@ -89,6 +92,8 @@ struct _GtkDisplayPanel GLoadedBinary *binary; /* Binaire à visualiser */ + bool export; /* Exportation du rendu ? */ + }; /* Composant d'affichage générique (classe) */ @@ -107,6 +112,8 @@ struct _GtkDisplayPanelClass get_cursor_fc get_cursor; /* Fourniture d'une position */ cache_glance_fc cache_glance; /* Cache de la mignature */ + prepare_export_fc prepare_export; /* Préparation d'exportation */ + }; /* Propriétés propres au composant d'affichage */ diff --git a/src/gtkext/gtkdisplaypanel.c b/src/gtkext/gtkdisplaypanel.c index 010d648..b32adfa 100644 --- a/src/gtkext/gtkdisplaypanel.c +++ b/src/gtkext/gtkdisplaypanel.c @@ -181,6 +181,8 @@ static void gtk_display_panel_init(GtkDisplayPanel *panel) gtk_widget_set_has_window(GTK_WIDGET(panel), TRUE); gtk_widget_set_can_focus(GTK_WIDGET(panel), TRUE); + panel->export = false; + } @@ -756,6 +758,33 @@ void gtk_display_panel_show_border(GtkDisplayPanel *panel, bool show) /****************************************************************************** * * +* Paramètres : panel = composant GTK à mettre à jour. * +* export = préparation d'une exportation complète du rendu ? * +* * +* Description : Marque ou non le composant pour une exportation prochaine. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_display_panel_prepare_export(GtkDisplayPanel *panel, bool export) +{ + GtkDisplayPanelClass *class; /* Classe associée au composant*/ + + panel->export = export; + + class = GTK_DISPLAY_PANEL_GET_CLASS(panel); + + if (class->prepare_export != NULL) + class->prepare_export(panel, export); + +} + + +/****************************************************************************** +* * * Paramètres : panel = composant GTK à venir consulter. * * cr = contexte graphique associé à l'événement. * * offset = décalage éventuel à appliquer. * diff --git a/src/gtkext/gtkdisplaypanel.h b/src/gtkext/gtkdisplaypanel.h index 954991c..937d41d 100644 --- a/src/gtkext/gtkdisplaypanel.h +++ b/src/gtkext/gtkdisplaypanel.h @@ -55,11 +55,8 @@ GType gtk_display_panel_get_type(void); /* Définit si une bordure est à afficher. */ void gtk_display_panel_show_border(GtkDisplayPanel *, bool); -/* Définit si les adresses doivent apparaître dans le rendu. */ -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); +/* Marque ou non le composant pour une exportation prochaine. */ +void gtk_display_panel_prepare_export(GtkDisplayPanel *, bool); /* Indique la position d'affichage d'un emplacement donné. */ bool gtk_display_panel_get_cursor_coordinates(const GtkDisplayPanel *, const GLineCursor *, gint *, gint *, ScrollPositionTweak); diff --git a/src/gtkext/gtkgraphdisplay.c b/src/gtkext/gtkgraphdisplay.c index fb89b2e..97bb4d3 100644 --- a/src/gtkext/gtkgraphdisplay.c +++ b/src/gtkext/gtkgraphdisplay.c @@ -146,6 +146,9 @@ static GLineCursor *gtk_graph_display_get_cursor(const GtkGraphDisplay *); /* Place en cache un rendu destiné à l'aperçu graphique rapide. */ static void gtk_graph_display_cache_glance(GtkGraphDisplay *, cairo_t *, const GtkAllocation *, double); +/* Marque ou non le composant pour une exportation prochaine. */ +static void gtk_graph_display_prepare_export(GtkGraphDisplay *, bool); + /* Supprime tout contenu de l'afficheur de code en graphique. */ static void gtk_graph_display_reset(GtkGraphDisplay *, bool); @@ -202,6 +205,8 @@ static void gtk_graph_display_class_init(GtkGraphDisplayClass *class) panel_class->get_cursor = (get_cursor_fc)gtk_graph_display_get_cursor; panel_class->cache_glance = (cache_glance_fc)gtk_graph_display_cache_glance; + panel_class->prepare_export = (prepare_export_fc)gtk_graph_display_prepare_export; + } @@ -465,15 +470,15 @@ static void gtk_graph_display_adjust_scroll_value(GtkGraphDisplay *display, GtkA static gboolean gtk_graph_display_draw(GtkWidget *widget, cairo_t *cr, GtkGraphDisplay *display) { - size_t i; /* Boucle de parcours */ cairo_surface_t *pat_image; /* Fond du futur pinceau */ cairo_t *pat_cr; /* Pinceau pour le pinceau */ cairo_pattern_t *pattern; /* Patron de remplissage */ double degrees; /* Conversion en degrés */ + size_t i; /* Boucle de parcours */ /* Eventuel fond pour la zone de compression */ - if (display->may_collapsing) + if (display->may_collapsing && !GTK_DISPLAY_PANEL(display)->export) { /* Préparation du pinceau */ @@ -1158,6 +1163,35 @@ static void gtk_graph_display_cache_glance(GtkGraphDisplay *display, cairo_t *cr /****************************************************************************** * * +* Paramètres : display = composant GTK à mettre à jour. * +* export = préparation d'une exportation complète du rendu ? * +* * +* Description : Marque ou non le composant pour une exportation prochaine. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_graph_display_prepare_export(GtkGraphDisplay *display, bool export) +{ + void prepare_child_export(GtkWidget *child, gpointer unused) + { + if (!GTK_IS_BUFFER_DISPLAY(child)) + return; + + gtk_display_panel_prepare_export(GTK_DISPLAY_PANEL(child), export); + + } + + gtk_container_foreach(GTK_CONTAINER(display->support), (GtkCallback)prepare_child_export, NULL); + +} + + +/****************************************************************************** +* * * Paramètres : - * * * * Description : Crée un nouveau composant pour l'affichage en graphique. * @@ -1177,6 +1211,31 @@ GtkWidget *gtk_graph_display_new(void) /****************************************************************************** * * +* Paramètres : display = composant GTK à consulter. * +* * +* Description : Fournit le support utilisé pour le rendu graphique. * +* * +* Retour : Composant GTK de support. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GtkWidget *gtk_graph_display_get_support(GtkGraphDisplay *display) +{ + GtkWidget *result; /* Instance à retourner */ + + result = display->support; + + g_object_ref(G_OBJECT(result)); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : display = composant GTK à mettre à jour. * * widget = composant GTK à insérer. * * x = abscisse du point d'insertion. * diff --git a/src/gtkext/gtkgraphdisplay.h b/src/gtkext/gtkgraphdisplay.h index e1ff00b..78008a1 100644 --- a/src/gtkext/gtkgraphdisplay.h +++ b/src/gtkext/gtkgraphdisplay.h @@ -32,12 +32,12 @@ -#define GTK_TYPE_GRAPH_DISPLAY (gtk_graph_display_get_type()) -#define GTK_GRAPH_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_GRAPH_DISPLAY, GtkGraphDisplay)) -#define GTK_GRAPH_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_GRAPH_DISPLAY, GtkGraphDisplayClass)) -#define GTK_IS_GRAPH_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_GRAPH_DISPLAY)) -#define GTK_IS_GRAPH_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_GRAPH_DISPLAY)) -#define GTK_GRAPH_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_GRAPH_DISPLAY, GtkGraphDisplayClass)) +#define GTK_TYPE_GRAPH_DISPLAY (gtk_graph_display_get_type()) +#define GTK_GRAPH_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_GRAPH_DISPLAY, GtkGraphDisplay)) +#define GTK_GRAPH_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_GRAPH_DISPLAY, GtkGraphDisplayClass)) +#define GTK_IS_GRAPH_DISPLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_GRAPH_DISPLAY)) +#define GTK_IS_GRAPH_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_GRAPH_DISPLAY)) +#define GTK_GRAPH_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_GRAPH_DISPLAY, GtkGraphDisplayClass)) /* Composant d'affichage sous forme graphique (instance) */ @@ -53,6 +53,9 @@ GType gtk_graph_display_get_type(void); /* Crée un nouveau composant pour l'affichage en graphique. */ GtkWidget *gtk_graph_display_new(void); +/* Fournit le support utilisé pour le rendu graphique. */ +GtkWidget *gtk_graph_display_get_support(GtkGraphDisplay *); + /* Place une vue sous forme de bloc dans le graphique. */ void gtk_graph_display_put(GtkGraphDisplay *, GtkWidget *, const GtkAllocation *); |