summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-04-10 22:32:55 -0400
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-04-10 22:32:55 -0400
commit24950ec14413cc409c9f2f15a3c5af3f950b336f (patch)
treeab09789352b69528c7fcbc838e2029e00976e30c
parent629bb5a2658e2035912c4da1b03d43027fc41564 (diff)
downloadgdk-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.symbols1
-rw-r--r--gtk/gtkextendedlayout.c37
-rw-r--r--gtk/gtkextendedlayout.h57
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