diff options
Diffstat (limited to 'src/gtkext/gtkgraphview.c')
-rw-r--r-- | src/gtkext/gtkgraphview.c | 154 |
1 files changed, 91 insertions, 63 deletions
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index 52d718b..817c311 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -69,14 +69,17 @@ static void gtk_graph_view_class_init(GtkGraphViewClass *); /* Initialise une instance d'afficheur de code en graphique. */ static void gtk_graph_view_init(GtkGraphView *); -/* Fournit la taille de composant requise pour un plein rendu. */ -static void gtk_graph_view_size_request(GtkWidget *, GtkRequisition *); +/* Fournit la hauteur de composant requise pour un plein rendu. */ +static void gtk_graph_view_get_preferred_height(GtkWidget *, gint *, gint *); + +/* Fournit la largeur de composant requise pour un plein rendu. */ +static void gtk_graph_view_get_preferred_width(GtkWidget *, gint *, gint *); /* S'adapte à la surface concédée par le composant parent. */ static void gtk_graph_view_size_allocate(GtkWidget *, GtkAllocation *); /* Met à jour l'affichage de la vue sous forme graphique. */ -static gboolean gtk_graph_view_expose(GtkWidget *, GdkEventExpose *, GtkGraphView *); +static gboolean gtk_graph_view_draw(GtkWidget *, cairo_t *, GtkGraphView *); /* Réagit à la sélection externe d'une adresse. */ static void gtk_graph_view_define_main_address(GtkGraphView *, vmpa_t); @@ -125,7 +128,8 @@ static void gtk_graph_view_class_init(GtkGraphViewClass *klass) widget_class = (GtkWidgetClass *)klass; - widget_class->size_request = gtk_graph_view_size_request; + widget_class->get_preferred_height = gtk_graph_view_get_preferred_height; + widget_class->get_preferred_width = gtk_graph_view_get_preferred_width; widget_class->size_allocate = gtk_graph_view_size_allocate; } @@ -166,13 +170,15 @@ static void gtk_graph_view_init(GtkGraphView *view) view->support = GTK_FIXED(gtk_fixed_new()); gtk_widget_set_has_window(GTK_WIDGET(view->support), TRUE); - g_signal_connect(G_OBJECT(view->support), "expose-event", - G_CALLBACK(gtk_graph_view_expose), view); + g_signal_connect(G_OBJECT(view->support), "draw", + G_CALLBACK(gtk_graph_view_draw), view); gtk_widget_show(GTK_WIDGET(view->support)); + /* gdk_color_white(gtk_widget_get_colormap(GTK_WIDGET(view->support)), &white); gtk_widget_modify_bg(GTK_WIDGET(view->support), GTK_STATE_NORMAL, &white); + */ gtk_fixed_put(GTK_FIXED(view), GTK_WIDGET(view->support), 0, 0); @@ -182,12 +188,23 @@ static void gtk_graph_view_init(GtkGraphView *view) } + + + + + + + + + + /****************************************************************************** * * -* Paramètres : widget = composant GTK à consulter. * -* requisition = dimensions souhaitées. [OUT] * +* Paramètres : widget = composant GTK à consulter. * +* minimal = taille minimale. [OUT] * +* natural = taille idéale. [OUT] * * * -* Description : Fournit la taille de composant requise pour un plein rendu. * +* Description : Fournit la hauteur de composant requise pour un plein rendu. * * * * Retour : - * * * @@ -195,63 +212,74 @@ static void gtk_graph_view_init(GtkGraphView *view) * * ******************************************************************************/ -static void gtk_graph_view_size_request(GtkWidget *widget, GtkRequisition *requisition) +static void gtk_graph_view_get_preferred_height(GtkWidget *widget, gint *minimal, gint *natural) { - 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 */ - - fixed_class = g_type_class_peek_parent(GTK_GRAPH_VIEW_GET_CLASS(widget)); - fixed_class = g_type_class_peek_parent(fixed_class); - - GTK_WIDGET_CLASS(fixed_class)->size_request(widget, requisition); + GtkRequisition requisition; /* Taille requise */ + gpointer fixed_class; /* Classe parente */ view = GTK_GRAPH_VIEW(widget); if (view->layout != NULL) - g_graph_layout_size_request(view->layout, requisition); + { + g_graph_layout_size_request(view->layout, &requisition); + *minimal = requisition.height; + *natural = *minimal; + } - //requisition->width += 65; - //requisition->height += 65; + else + { + fixed_class = g_type_class_peek_parent(GTK_GRAPH_VIEW_GET_CLASS(widget)); + fixed_class = g_type_class_peek_parent(fixed_class); - view = GTK_GRAPH_VIEW(widget); + GTK_WIDGET_CLASS(fixed_class)->get_preferred_height(widget, minimal, natural); - /* - requisition->width += GTK_VIEW_PANEL(widget)->hadjustment->value; - requisition->height += GTK_VIEW_PANEL(widget)->vadjustment->value; - */ + } -#if 0 - /** - * 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. - */ +/****************************************************************************** +* * +* Paramètres : widget = composant GTK à consulter. * +* minimal = taille minimale. [OUT] * +* natural = taille idéale. [OUT] * +* * +* Description : Fournit la largeur de composant requise pour un plein rendu. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_graph_view_get_preferred_width(GtkWidget *widget, gint *minimal, gint *natural) +{ + GtkGraphView *view; /* Autre vision du composant */ + GtkRequisition requisition; /* Taille requise */ + gpointer fixed_class; /* Classe parente */ - left_corner = G_MAXINT; - top_corner = G_MAXINT; + view = GTK_GRAPH_VIEW(widget); - for (i = 0; i < view->children_count; i++) + if (view->layout != NULL) { - left_corner = MIN(left_corner, view->allocs[i].x); - top_corner = MIN(top_corner, view->allocs[i].y); + g_graph_layout_size_request(view->layout, &requisition); + + *minimal = requisition.width; + *natural = *minimal; + } - if (left_corner != G_MAXINT) requisition->width += left_corner; - if (top_corner != G_MAXINT) requisition->height += top_corner; -#endif + else + { + fixed_class = g_type_class_peek_parent(GTK_GRAPH_VIEW_GET_CLASS(widget)); + fixed_class = g_type_class_peek_parent(fixed_class); + + GTK_WIDGET_CLASS(fixed_class)->get_preferred_width(widget, minimal, natural); + + } } @@ -293,23 +321,23 @@ static void gtk_graph_view_size_allocate(GtkWidget *widget, GtkAllocation *alloc gtk_view_panel_compute_allocation(panel, &valloc); - gtk_widget_size_request(widget, &req); + gtk_widget_get_preferred_size(widget, NULL, &req); /* Correction de la taille du support */ view = GTK_GRAPH_VIEW(widget); - window = GTK_WIDGET(view->support)->window; + window = gtk_widget_get_window(GTK_WIDGET(view->support)); 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; - panel->hadjustment->step_increment = valloc.width * 0.1; - panel->hadjustment->page_increment = valloc.width * 0.9; + gtk_adjustment_set_page_size(panel->hadjustment, valloc.width); + gtk_adjustment_set_step_increment(panel->hadjustment, valloc.width * 0.1); + gtk_adjustment_set_page_increment(panel->hadjustment, valloc.width * 0.9); - panel->hadjustment->upper = MAX(req.width, valloc.width); + gtk_adjustment_set_upper(panel->hadjustment, MAX(req.width, valloc.width)); gtk_view_panel_reclamp_adjustment(panel->hadjustment, &changed); @@ -320,11 +348,11 @@ static void gtk_graph_view_size_allocate(GtkWidget *widget, GtkAllocation *alloc /* Défilement vertical */ - panel->vadjustment->page_size = valloc.height; - panel->vadjustment->step_increment = valloc.width * 0.1; - panel->vadjustment->page_increment = valloc.width * 0.9; + gtk_adjustment_set_page_size(panel->vadjustment, valloc.width); + gtk_adjustment_set_step_increment(panel->vadjustment, valloc.width * 0.1); + gtk_adjustment_set_page_increment(panel->vadjustment, valloc.width * 0.9); - panel->vadjustment->upper = MAX(req.height, valloc.height); + gtk_adjustment_set_upper(panel->vadjustment, MAX(req.height, valloc.height)); gtk_view_panel_reclamp_adjustment(panel->vadjustment, &changed); @@ -339,7 +367,7 @@ static void gtk_graph_view_size_allocate(GtkWidget *widget, GtkAllocation *alloc /****************************************************************************** * * * Paramètres : widget = composant GTK à redessiner. * -* event = informations liées à l'événement. * +* cr = contexte graphique associé à l'événement. * * view = support maître à consulter. * * * * Description : Met à jour l'affichage de la vue sous forme graphique. * @@ -350,10 +378,10 @@ static void gtk_graph_view_size_allocate(GtkWidget *widget, GtkAllocation *alloc * * ******************************************************************************/ -static gboolean gtk_graph_view_expose(GtkWidget *widget, GdkEventExpose *event, GtkGraphView *view) +static gboolean gtk_graph_view_draw(GtkWidget *widget, cairo_t *cr, GtkGraphView *view) { if (view->layout != NULL) - g_graph_layout_draw(view->layout, GDK_DRAWABLE(widget->window), GTK_VIEW_PANEL(view)->gc); + g_graph_layout_draw(view->layout, cr, true); return FALSE; @@ -508,8 +536,8 @@ static bool gtk_graph_view_get_address_coordinates(const GtkGraphView *view, vmp static void gtk_graph_view_scroll(GtkGraphView *view) { gtk_fixed_move(GTK_FIXED(view), GTK_WIDGET(view->support), - -GTK_VIEW_PANEL(view)->hadjustment->value, - -GTK_VIEW_PANEL(view)->vadjustment->value); + -gtk_adjustment_get_value(GTK_VIEW_PANEL(view)->hadjustment), + -gtk_adjustment_get_value(GTK_VIEW_PANEL(view)->vadjustment)); } @@ -548,7 +576,7 @@ static void gtk_graph_view_cache_glance(GtkGraphView *view, cairo_t *cairo, cons cairo_scale(cairo, scale, scale); if (view->layout != NULL) - _g_graph_layout_draw(view->layout, cairo, false); + g_graph_layout_draw(view->layout, cairo, false); } |