summaryrefslogtreecommitdiff
path: root/gtk/gtkboxgadget.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkboxgadget.c')
-rw-r--r--gtk/gtkboxgadget.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/gtk/gtkboxgadget.c b/gtk/gtkboxgadget.c
index 6533b6e77a..e8198d7d97 100644
--- a/gtk/gtkboxgadget.c
+++ b/gtk/gtkboxgadget.c
@@ -38,9 +38,10 @@ struct _GtkBoxGadgetPrivate {
GtkOrientation orientation;
GArray *children;
- guint draw_focus : 1;
- guint draw_reverse : 1;
+ guint draw_focus : 1;
+ guint draw_reverse : 1;
guint allocate_reverse : 1;
+ guint align_reverse : 1;
};
typedef gboolean (* ComputeExpandFunc) (GObject *object, GtkOrientation orientation);
@@ -84,6 +85,21 @@ gtk_box_gadget_child_get_align (GtkBoxGadget *gadget,
return align;
}
+static GtkAlign
+effective_align (GtkAlign align,
+ gboolean reverse)
+{
+ switch (align)
+ {
+ case GTK_ALIGN_START:
+ return reverse ? GTK_ALIGN_END : GTK_ALIGN_START;
+ case GTK_ALIGN_END:
+ return reverse ? GTK_ALIGN_START : GTK_ALIGN_END;
+ default:
+ return align;
+ }
+}
+
static void
gtk_box_gadget_measure_child (GObject *child,
GtkOrientation orientation,
@@ -304,6 +320,7 @@ gtk_box_gadget_allocate_child (GObject *child,
allocation->width,
&minimum, &natural,
&minimum_baseline, &natural_baseline);
+
switch (child_align)
{
case GTK_ALIGN_FILL:
@@ -407,7 +424,7 @@ gtk_box_gadget_allocate (GtkCssGadget *gadget,
child_align = gtk_box_gadget_child_get_align (GTK_BOX_GADGET (gadget), child);
gtk_box_gadget_allocate_child (child->object,
priv->orientation,
- child_align,
+ effective_align (child_align, priv->align_reverse),
&child_allocation,
baseline,
&child_clip);
@@ -441,7 +458,7 @@ gtk_box_gadget_allocate (GtkCssGadget *gadget,
child_align = gtk_box_gadget_child_get_align (GTK_BOX_GADGET (gadget), child);
gtk_box_gadget_allocate_child (child->object,
priv->orientation,
- child_align,
+ effective_align (child_align, priv->align_reverse),
&child_allocation,
-1,
&child_clip);
@@ -595,6 +612,15 @@ gtk_box_gadget_set_allocate_reverse (GtkBoxGadget *gadget,
priv->allocate_reverse = allocate_reverse;
}
+void
+gtk_box_gadget_set_align_reverse (GtkBoxGadget *gadget,
+ gboolean align_reverse)
+{
+ GtkBoxGadgetPrivate *priv = gtk_box_gadget_get_instance_private (gadget);
+
+ priv->align_reverse = align_reverse;
+}
+
static GtkCssNode *
get_css_node (GObject *child)
{