From bb6d0c758f8c720d8074bf74e6bd001e36d6a918 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Tue, 1 Jan 2013 15:45:46 +0000 Subject: 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 --- ChangeLog | 10 ++++++++++ src/gtkext/gtkgraphview.c | 30 ++++++++++++++++++++++++++---- src/gtkext/gtklinkrenderer.c | 26 ++++++++++++++++++++++++++ src/gtkext/gtklinkrenderer.h | 5 ++++- 4 files changed, 66 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 322b5f1..f2e81ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +13-01-01 Cyrille Bagard + + * src/gtkext/gtkgraphview.c: + Make sure the links have enough space to get fully drawn, and resize + the support widget. + + * src/gtkext/gtklinkrenderer.c: + * src/gtkext/gtklinkrenderer.h: + Update size requisition of the parent graph view. + 12-12-31 Cyrille Bagard * src/arch/archbase.c: 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 #include -#include +#include @@ -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 *); -- cgit v0.11.2-87-g4458