summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkgraphview.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkext/gtkgraphview.c')
-rw-r--r--src/gtkext/gtkgraphview.c45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c
index e1a943b..f205ee2 100644
--- a/src/gtkext/gtkgraphview.c
+++ b/src/gtkext/gtkgraphview.c
@@ -43,9 +43,9 @@ struct _GtkGraphView
vmpa_t start; /* Début de la portion vue */
vmpa_t end; /* Fin de la portion affichée */
- GtkViewPanel **childs; /* Liste des sous-blocs */
+ GtkViewPanel **children; /* Liste des sous-blocs */
GtkAllocation *allocs; /* Emplacements prévisibles */
- size_t childs_count; /* Taille de cette liste */
+ size_t children_count; /* Taille de cette liste */
GtkLinkRenderer **links; /* Liste des liens graphiques */
size_t links_count; /* Nombre de ces liens */
@@ -190,6 +190,9 @@ static void gtk_graph_view_size_request(GtkWidget *widget, GtkRequisition *requi
{
gpointer fixed_class; /* Classe parente */
GtkGraphView *view; /* Autre vision du composant */
+ 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);
@@ -198,6 +201,18 @@ static void gtk_graph_view_size_request(GtkWidget *widget, GtkRequisition *requi
view = GTK_GRAPH_VIEW(widget);
+ left_corner = G_MAXINT;
+ top_corner = G_MAXINT;
+
+ for (i = 0; i < view->children_count; i++)
+ {
+ left_corner = MIN(left_corner, view->allocs[i].x);
+ top_corner = MIN(top_corner, view->allocs[i].y);
+ }
+
+ if (left_corner != G_MAXINT) requisition->width += left_corner;
+ if (top_corner != G_MAXINT) requisition->height += top_corner;
+
if (view->requisition.width == 0 && view->requisition.height == 0)
view->requisition = *requisition;
@@ -338,13 +353,13 @@ static void gtk_graph_view_define_main_address(GtkGraphView *view, vmpa_t addr)
view->start = start;
view->end = end;
- view->childs = gtk_graph_view_load_nodes(view, GTK_VIEW_PANEL(view)->binary,
+ view->children = gtk_graph_view_load_nodes(view, GTK_VIEW_PANEL(view)->binary,
start, end);
- view->allocs = (GtkAllocation *)calloc(view->childs_count,
+ view->allocs = (GtkAllocation *)calloc(view->children_count,
sizeof(GtkAllocation));
- build_graph_view(view, view->childs, view->childs_count);
+ build_graph_view(view, view->children, view->children_count);
break;
@@ -426,7 +441,7 @@ static void gtk_graph_view_cache_glance(GtkGraphView *view, cairo_t *cairo)
cairo_set_line_width(cairo, 2);
cairo_set_source_rgb(cairo, 0, 0, 0);
- for (i = 0; i < view->childs_count; i++)
+ for (i = 0; i < view->children_count; i++)
{
alloc = &view->allocs[i];
@@ -482,8 +497,8 @@ void gtk_graph_view_put(GtkGraphView *view, GtkWidget *widget, const GtkAllocati
{
size_t i; /* Boucle de parcours */
- for (i = 0; i < view->childs_count; i++)
- if (GTK_WIDGET(view->childs[i]) == widget)
+ for (i = 0; i < view->children_count; i++)
+ if (GTK_WIDGET(view->children[i]) == widget)
{
view->allocs[i] = *alloc;
break;
@@ -550,17 +565,17 @@ static void gtk_graph_view_reset(GtkGraphView *view)
}
- for (i = 0; i < view->childs_count; i++)
- gtk_widget_destroy(GTK_WIDGET(view->childs[i]));
+ for (i = 0; i < view->children_count; i++)
+ gtk_widget_destroy(GTK_WIDGET(view->children[i]));
- if (view->childs_count > 0)
+ if (view->children_count > 0)
{
- free(view->childs);
- view->childs = NULL;
+ free(view->children);
+ view->children = NULL;
free(view->allocs);
view->allocs = NULL;
- view->childs_count = 0;
+ view->children_count = 0;
}
@@ -597,7 +612,7 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar
result = NULL;
- count = &view->childs_count;
+ count = &view->children_count;
*count = 0;
list = g_loaded_binary_get_instructions(binary);