diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-04-03 20:57:45 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-04-03 20:57:45 (GMT) |
commit | d65fbe084a91d180d17767314f4e34b7456e8436 (patch) | |
tree | e7eee433871ea98be6643c1ab5a861889ed0226a /src/gtkext/gtkviewpanel.c | |
parent | 6cfa350c21c1e54cf9c597d92a9ea3d1aab01d78 (diff) |
Defined a preferred size for views and reacted on scroll events.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@500 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/gtkext/gtkviewpanel.c')
-rw-r--r-- | src/gtkext/gtkviewpanel.c | 67 |
1 files changed, 63 insertions, 4 deletions
diff --git a/src/gtkext/gtkviewpanel.c b/src/gtkext/gtkviewpanel.c index 3c8febd..1496056 100644 --- a/src/gtkext/gtkviewpanel.c +++ b/src/gtkext/gtkviewpanel.c @@ -53,6 +53,12 @@ static void gtk_view_panel_size_allocate(GtkWidget *, GtkAllocation *); /* Met à jour l'affichage du composant d'affichage. */ static gboolean gtk_view_panel_draw(GtkWidget *, cairo_t *); +/* Fournit la hauteur idéale pour le composant d'affichage. */ +static void gtk_view_panel_get_preferred_height(GtkWidget *, gint *, gint *); + +/* Fournit la largeur idéale pour le composant d'affichage. */ +static void gtk_view_panel_get_preferred_width(GtkWidget *, gint *, gint *); + /* Détermine la taille des bonds lors de défilements. */ static void gtk_view_panel_compute_scroll_inc(GtkViewPanel *, gint, GtkOrientation, gdouble *, gdouble *); @@ -116,6 +122,8 @@ static void gtk_view_panel_class_init(GtkViewPanelClass *class) widget_class->realize = gtk_view_panel_realize; widget_class->size_allocate = gtk_view_panel_size_allocate; widget_class->draw = gtk_view_panel_draw; + widget_class->get_preferred_height = gtk_view_panel_get_preferred_height; + widget_class->get_preferred_width = gtk_view_panel_get_preferred_width; panel_class->compute_inc = gtk_view_panel_compute_scroll_inc; @@ -379,6 +387,58 @@ static gboolean gtk_view_panel_draw(GtkWidget *widget, cairo_t *cr) /****************************************************************************** * * +* Paramètres : widget = composant GTK à examiner. * +* minimum = hauteur minimale à préciser ou NULL. [OUT] * +* natural = hauteur idéale à préciser ou NULL. [OUT] * +* * +* Description : Fournit la hauteur idéale pour le composant d'affichage. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_view_panel_get_preferred_height(GtkWidget *widget, gint *minimum, gint *natural) +{ + gint req; /* Dimension requise */ + + GTK_VIEW_PANEL_GET_CLASS(widget)->compute_size(GTK_VIEW_PANEL(widget), NULL, &req); + + if (minimum != NULL) *minimum = req; + if (natural != NULL) *natural = req; + +} + + +/****************************************************************************** +* * +* Paramètres : widget = composant GTK à examiner. * +* minimum = largeur minimale à préciser ou NULL. [OUT] * +* natural = largeur idéale à préciser ou NULL. [OUT] * +* * +* Description : Fournit la largeur idéale pour le composant d'affichage. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_view_panel_get_preferred_width(GtkWidget *widget, gint *minimum, gint *natural) +{ + gint req; /* Dimension requise */ + + GTK_VIEW_PANEL_GET_CLASS(widget)->compute_size(GTK_VIEW_PANEL(widget), &req, NULL); + + if (minimum != NULL) *minimum = req; + if (natural != NULL) *natural = req; + +} + + +/****************************************************************************** +* * * Paramètres : panel = composant GTK d'affichage à mettre à jour. * * size = taille de l'espace dans la direction donnée. * * orientation = indication sur le défilement à traiter. * @@ -607,12 +667,11 @@ static void gtk_view_panel_update_adjustment(GtkViewPanel *panel, GtkOrientation static void gtk_view_panel_adjustment_value_changed(GtkAdjustment *adj, GtkViewPanel *panel) { - GtkWidget *widget; /* Autre vision du composant */ + GtkOrientation orientation; /* Indification de la barre */ - widget = GTK_WIDGET(panel); + orientation = (adj == panel->hadjustment ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); - if (gtk_widget_get_realized(widget)) - gdk_window_invalidate_rect(gtk_widget_get_window(widget), NULL, false); + GTK_VIEW_PANEL_GET_CLASS(panel)->adjust(panel, adj, orientation); } |