[gtk+/native-layout] Added gtk_extended_layout_is_height_for_width()



commit 24950ec14413cc409c9f2f15a3c5af3f950b336f
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sat Apr 10 22:32:55 2010 -0400

    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.

 gtk/gtk.symbols         |    1 +
 gtk/gtkextendedlayout.c |   37 ++++++++++++++++++++++++++++++
 gtk/gtkextendedlayout.h |   57 +++++++++++++++++++++++++++-------------------
 3 files changed, 71 insertions(+), 24 deletions(-)
---
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index dbbfa39..97838cd 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 9b9c9ce..a8293e3 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 9944fed..1d0d531 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
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]