diff options
author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2010-04-10 22:32:55 -0400 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2010-04-10 22:32:55 -0400 |
commit | 24950ec14413cc409c9f2f15a3c5af3f950b336f (patch) | |
tree | ab09789352b69528c7fcbc838e2029e00976e30c | |
parent | 629bb5a2658e2035912c4da1b03d43027fc41564 (diff) | |
download | gdk-pixbuf-24950ec14413cc409c9f2f15a3c5af3f950b336f.tar.gz |
Added gtk_extended_layout_is_height_for_width()
Added an indicator telling whether a widget prefers to be allocated
as height-for-width or width-for-height. Usually this depends on the
orientation of a container or the nature of a content widget like GtkLabel.
This indicator is only used in the seldom case where a parent is allocating
free space to the child and the child can flow in either direction, GtkWindow
and GtkScrolledWindow are users of this api.
-rw-r--r-- | gtk/gtk.symbols | 1 | ||||
-rw-r--r-- | gtk/gtkextendedlayout.c | 37 | ||||
-rw-r--r-- | gtk/gtkextendedlayout.h | 57 |
3 files changed, 71 insertions, 24 deletions
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index dbbfa39f4..97838cd00 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -1517,6 +1517,7 @@ gtk_extended_layout_get_type G_GNUC_CONST gtk_extended_layout_get_desired_size gtk_extended_layout_get_height_for_width gtk_extended_layout_get_width_for_height +gtk_extended_layout_is_height_for_width #endif #endif diff --git a/gtk/gtkextendedlayout.c b/gtk/gtkextendedlayout.c index 9b9c9cef0..a8293e32d 100644 --- a/gtk/gtkextendedlayout.c +++ b/gtk/gtkextendedlayout.c @@ -70,6 +70,37 @@ gtk_extended_layout_get_desired_size (GtkExtendedLayout *layout, _gtk_size_group_compute_desired_size (GTK_WIDGET (layout), minimum_size, natural_size); } + + +/** + * gtk_extended_layout_is_height_for_width: + * @layout: a #GtkExtendedLayout instance + * + * Gets whether the widget prefers a height-for-width layout + * or a width-for-height layout + * + * Returns: %TRUE if the widget prefers height-for-width, %FALSE if + * the widget should be treated with a width-for-height preference. + * + * Since: 3.0 + */ +gboolean +gtk_extended_layout_is_height_for_width (GtkExtendedLayout *layout) +{ + GtkExtendedLayoutIface *iface; + + g_return_val_if_fail (GTK_IS_EXTENDED_LAYOUT (layout), FALSE); + + iface = GTK_EXTENDED_LAYOUT_GET_IFACE (layout); + if (iface->is_height_for_width) + return iface->is_height_for_width (layout); + + /* By default widgets are height-for-width. */ + return TRUE; +} + + + /** * gtk_extended_layout_get_width_for_height: * @layout: a #GtkExtendedLayout instance @@ -92,6 +123,12 @@ gtk_extended_layout_get_width_for_height (GtkExtendedLayout *layout, g_return_if_fail (GTK_IS_EXTENDED_LAYOUT (layout)); + /* XXX Maybe here we do _gtk_size_group_compute_width_for_height() + * and return hard coded minimum widths/heights for for widgets with + * explicit size requests as well as fetch the common minimum/natural + * widths/heights for size grouped widgets. + */ + iface = GTK_EXTENDED_LAYOUT_GET_IFACE (layout); iface->get_width_for_height (layout, height, minimum_width, natural_width); diff --git a/gtk/gtkextendedlayout.h b/gtk/gtkextendedlayout.h index 9944fedad..1d0d531d4 100644 --- a/gtk/gtkextendedlayout.h +++ b/gtk/gtkextendedlayout.h @@ -42,32 +42,41 @@ struct _GtkExtendedLayoutIface /* virtual table */ - void (*get_desired_size) (GtkExtendedLayout *layout, - GtkRequisition *minimum_size, - GtkRequisition *natural_size); - void (*get_width_for_height) (GtkExtendedLayout *layout, - gint height, - gint *minimum_width, - gint *natural_width); - void (*get_height_for_width) (GtkExtendedLayout *layout, - gint width, - gint *minimum_height, - gint *natural_height); + + /* TODO: Change for get_desired_width()/get_desired_height() for clarity sake */ + void (* get_desired_size) (GtkExtendedLayout *layout, + GtkRequisition *minimum_size, + GtkRequisition *natural_size); + + gboolean (* is_height_for_width) (GtkExtendedLayout *layout); + + void (* get_width_for_height) (GtkExtendedLayout *layout, + gint height, + gint *minimum_width, + gint *natural_width); + void (* get_height_for_width) (GtkExtendedLayout *layout, + gint width, + gint *minimum_height, + gint *natural_height); }; -GType gtk_extended_layout_get_type (void) G_GNUC_CONST; - -void gtk_extended_layout_get_desired_size (GtkExtendedLayout *layout, - GtkRequisition *minimum_size, - GtkRequisition *natural_size); -void gtk_extended_layout_get_width_for_height (GtkExtendedLayout *layout, - gint height, - gint *minimum_width, - gint *natural_width); -void gtk_extended_layout_get_height_for_width (GtkExtendedLayout *layout, - gint width, - gint *minimum_height, - gint *natural_height); +GType gtk_extended_layout_get_type (void) G_GNUC_CONST; + +void gtk_extended_layout_get_desired_size (GtkExtendedLayout *layout, + GtkRequisition *minimum_size, + GtkRequisition *natural_size); + + +gboolean gtk_extended_layout_is_height_for_width (GtkExtendedLayout *layout); +void gtk_extended_layout_get_width_for_height (GtkExtendedLayout *layout, + gint height, + gint *minimum_width, + gint *natural_width); +void gtk_extended_layout_get_height_for_width (GtkExtendedLayout *layout, + gint width, + gint *minimum_height, + gint *natural_height); + G_END_DECLS |