diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h index 1789d98c41..9df69a89d5 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 0ce66b6a03..d1c9095bc1 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5721,6 +5721,7 @@ adjust_for_align (GtkAlign align, { switch (align) { + case GTK_ALIGN_BASELINE: case GTK_ALIGN_FILL: /* change nothing */ break; @@ -13518,6 +13519,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 @@ -13529,8 +13537,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 3d57ddeb5a..97e9f7afdc 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);