diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2013-01-01 15:45:46 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2013-01-01 15:45:46 (GMT) |
commit | bb6d0c758f8c720d8074bf74e6bd001e36d6a918 (patch) | |
tree | e24d0a93f46d8c6a34df70c8a3e7a5300311ca6c /src | |
parent | 36be37f57a66515444ffbfec6242b991f8346c09 (diff) |
Made sure the links have enough space to get fully drawn.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@315 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src')
-rw-r--r-- | src/gtkext/gtkgraphview.c | 30 | ||||
-rw-r--r-- | src/gtkext/gtklinkrenderer.c | 26 | ||||
-rw-r--r-- | src/gtkext/gtklinkrenderer.h | 5 |
3 files changed, 56 insertions, 5 deletions
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index 88210f5..543f2d7 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -192,9 +192,9 @@ static void gtk_graph_view_size_request(GtkWidget *widget, GtkRequisition *requi { gpointer fixed_class; /* Classe parente */ GtkGraphView *view; /* Autre vision du composant */ + size_t i; /* Boucle de parcours */ gint left_corner; /* Abscisse minimale */ gint top_corner; /* Ordonnée minimale */ - size_t i; /* Boucle de parcours */ fixed_class = g_type_class_peek_parent(GTK_GRAPH_VIEW_GET_CLASS(widget)); fixed_class = g_type_class_peek_parent(fixed_class); @@ -203,6 +203,21 @@ static void gtk_graph_view_size_request(GtkWidget *widget, GtkRequisition *requi view = GTK_GRAPH_VIEW(widget); + requisition->width += GTK_VIEW_PANEL(widget)->hadjustment->value; + requisition->height += GTK_VIEW_PANEL(widget)->vadjustment->value; + + /** + * On s'assure de ne couper aucun lien. + */ + + for (i = 0; i < view->links_count; i++) + gtk_link_renderer_size_request(view->links[i], requisition); + + /** + * Traitement purement cosmétique : on ajoute la même bordure aux bords + * droit et bas. + */ + left_corner = G_MAXINT; top_corner = G_MAXINT; @@ -215,9 +230,6 @@ static void gtk_graph_view_size_request(GtkWidget *widget, GtkRequisition *requi if (left_corner != G_MAXINT) requisition->width += left_corner; if (top_corner != G_MAXINT) requisition->height += top_corner; - requisition->width += GTK_VIEW_PANEL(widget)->hadjustment->value; - requisition->height += GTK_VIEW_PANEL(widget)->vadjustment->value; - } @@ -240,6 +252,8 @@ static void gtk_graph_view_size_allocate(GtkWidget *widget, GtkAllocation *alloc GtkViewPanel *panel; /* Autre version du composant */ GtkAllocation valloc; /* Surface utilisable */ GtkRequisition req; /* Taille demandée */ + GtkGraphView *view; /* Autre vision du composant */ + GdkWindow *window; /* Fenêtre associée au support */ gboolean changed; /* Changement de valeur ? */ /* Mise à jour GTK */ @@ -258,6 +272,14 @@ static void gtk_graph_view_size_allocate(GtkWidget *widget, GtkAllocation *alloc gtk_widget_size_request(widget, &req); + /* Correction de la taille du support */ + + view = GTK_GRAPH_VIEW(widget); + window = GTK_WIDGET(view->support)->window; + + if (gdk_window_get_width(window) != req.width || gdk_window_get_height(window) != req.height) + gdk_window_resize(window, req.width, req.height); + /* Défilement horizontal */ panel->hadjustment->page_size = valloc.width; diff --git a/src/gtkext/gtklinkrenderer.c b/src/gtkext/gtklinkrenderer.c index 8b43fa8..e37a5f1 100644 --- a/src/gtkext/gtklinkrenderer.c +++ b/src/gtkext/gtklinkrenderer.c @@ -134,6 +134,32 @@ GtkObject *gtk_link_renderer_new(LinkColor color, GdkPoint *points, size_t count /****************************************************************************** * * +* Paramètres : renderer = moteur de rendu à manipuler. * +* requisition = dimensions adaptées validées. [OUT] * +* * +* Description : S'assure qu'une zone sera assez grande pour tout contenir. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void gtk_link_renderer_size_request(const GtkLinkRenderer *renderer, GtkRequisition *requisition) +{ + size_t i; /* Boucle de parcours */ + + for (i = 0; i < renderer->count; i++) + { + requisition->width = MAX(requisition->width, renderer->points[i].x); + requisition->height = MAX(requisition->height, renderer->points[i].y); + } + +} + + +/****************************************************************************** +* * * Paramètres : renderer = moteur de rendu à manipuler. * * drawable = surface de rendu à utiliser. * * gc = contexte graphique du dessin. * diff --git a/src/gtkext/gtklinkrenderer.h b/src/gtkext/gtklinkrenderer.h index 3f6442c..ed2699e 100644 --- a/src/gtkext/gtklinkrenderer.h +++ b/src/gtkext/gtklinkrenderer.h @@ -27,7 +27,7 @@ #include <stdbool.h> #include <gdk/gdk.h> -#include <gtk/gtkobject.h> +#include <gtk/gtk.h> @@ -65,6 +65,9 @@ GType gtk_link_renderer_get_type(void); /* Crée un nouveau moteur de rendu pour les liens graphiques. */ GtkObject *gtk_link_renderer_new(LinkColor, GdkPoint *, size_t); +/* S'assure qu'une zone sera assez grande pour tout contenir. */ +void gtk_link_renderer_size_request(const GtkLinkRenderer *, GtkRequisition *); + /* Dessine les liens graphiques enregistrés dans le moteur. */ void gtk_link_renderer_draw(const GtkLinkRenderer *, GdkDrawable *, GdkGC *); |