[gtk+/wip/baseline3: 1/17] Add GTK_ALIGN_BASELINE to GtkAlign



commit f7361c6eb931c6b62749e9f7e78577a52b9d73c7
Author: Alexander Larsson <alexl redhat com>
Date:   Tue Mar 5 15:06:12 2013 +0100

    Add GTK_ALIGN_BASELINE to GtkAlign
    
    Setting this means baseline aware containers should align the widget
    according to the baseline. For other containers this behaves like
    FILL.
    
    In order to not suprise old code with a new enum value we always
    return _FILL for _BASELINE unless you specifically request it via
    gtk_widget_get_valign_with_baseline().

 gtk/gtkenums.h  |    8 +++++++-
 gtk/gtkwidget.c |   16 ++++++++++++++--
 gtk/gtkwidget.h |    1 +
 3 files changed, 22 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h
index 1789d98..9df69a8 100644
--- a/gtk/gtkenums.h
+++ b/gtk/gtkenums.h
@@ -51,6 +51,7 @@ G_BEGIN_DECLS
  *     or top
  * @GTK_ALIGN_CENTER: center natural width of widget inside the
  *     allocation
+ * @GTK_ALIGN_BASELINE: align the widget according to the baseline. Since 3.10.
  *
  * Controls how a widget deals with extra space in a single (x or y)
  * dimension.
@@ -64,13 +65,18 @@ G_BEGIN_DECLS
  *
  * Note that in horizontal context @GTK_ALIGN_START and @GTK_ALIGN_END
  * are interpreted relative to text direction.
+ *
+ * GTK_ALIGN_BASELINE support for it is optional for containers and widgets, and
+ * it is only supported for vertical alignment.  When its not supported by
+ * a child or a container it is treated as @GTK_ALIGN_FILL.
  */
 typedef enum
 {
   GTK_ALIGN_FILL,
   GTK_ALIGN_START,
   GTK_ALIGN_END,
-  GTK_ALIGN_CENTER
+  GTK_ALIGN_CENTER,
+  GTK_ALIGN_BASELINE
 } GtkAlign;
 
 
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index e571aec..9207e15 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -5604,6 +5604,7 @@ adjust_for_align (GtkAlign  align,
 {
   switch (align)
     {
+    case GTK_ALIGN_BASELINE:
     case GTK_ALIGN_FILL:
       /* change nothing */
       break;
@@ -13206,6 +13207,13 @@ gtk_widget_set_halign (GtkWidget *widget,
   g_object_notify (G_OBJECT (widget), "halign");
 }
 
+GtkAlign
+gtk_widget_get_valign_with_baseline (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), GTK_ALIGN_FILL);
+  return _gtk_widget_get_aux_info_or_defaults (widget)->valign;
+}
+
 /**
  * gtk_widget_get_valign:
  * @widget: a #GtkWidget
@@ -13217,8 +13225,12 @@ gtk_widget_set_halign (GtkWidget *widget,
 GtkAlign
 gtk_widget_get_valign (GtkWidget *widget)
 {
-  g_return_val_if_fail (GTK_IS_WIDGET (widget), GTK_ALIGN_FILL);
-  return _gtk_widget_get_aux_info_or_defaults (widget)->valign;
+  GtkAlign align;
+
+  align = gtk_widget_get_valign_with_baseline (widget);
+  if (align == GTK_ALIGN_BASELINE)
+    return GTK_ALIGN_FILL;
+  return align;
 }
 
 /**
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 962e4a6..ea0f9b9 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -760,6 +760,7 @@ GtkAlign gtk_widget_get_halign        (GtkWidget *widget);
 void     gtk_widget_set_halign        (GtkWidget *widget,
                                        GtkAlign   align);
 GtkAlign gtk_widget_get_valign        (GtkWidget *widget);
+GtkAlign gtk_widget_get_valign_with_baseline (GtkWidget *widget);
 void     gtk_widget_set_valign        (GtkWidget *widget,
                                        GtkAlign   align);
 gint     gtk_widget_get_margin_left   (GtkWidget *widget);


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