diff options
Diffstat (limited to 'src/gtkext/gtkgraphview.c')
-rw-r--r-- | src/gtkext/gtkgraphview.c | 45 |
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); |