summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2013-01-01 15:45:46 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2013-01-01 15:45:46 (GMT)
commitbb6d0c758f8c720d8074bf74e6bd001e36d6a918 (patch)
treee24d0a93f46d8c6a34df70c8a3e7a5300311ca6c
parent36be37f57a66515444ffbfec6242b991f8346c09 (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
-rw-r--r--ChangeLog10
-rw-r--r--src/gtkext/gtkgraphview.c30
-rw-r--r--src/gtkext/gtklinkrenderer.c26
-rw-r--r--src/gtkext/gtklinkrenderer.h5
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 <nocbos@gmail.com>
+
+ * 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 <nocbos@gmail.com>
* 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 <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 *);