[gtk+/gtk-3-18] box: Fix rtl allocation with center widget
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-18] box: Fix rtl allocation with center widget
- Date: Sat, 20 Feb 2016 22:16:35 +0000 (UTC)
commit 4331ff2939c44109763306fb3f45355f4d08ab24
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Feb 20 16:41:53 2016 -0500
box: Fix rtl allocation with center widget
The code for adjusting the center widget allocation in case
of uneven sides never worked right in RTL. This was finally
noticed for tabs with close button, which commonly use a
centered label.
gtk/gtkbox.c | 24 ++++++++++++++----------
1 files changed, 14 insertions(+), 10 deletions(-)
---
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index f85459c..0005413 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -1058,7 +1058,8 @@ gtk_box_size_allocate_with_center (GtkWidget *widget,
{
child_allocation.y = allocation->y;
child_allocation.height = MAX (1, allocation->height);
- if (packing == GTK_PACK_START)
+ if ((packing == GTK_PACK_START && direction == GTK_TEXT_DIR_LTR) ||
+ (packing == GTK_PACK_END && direction == GTK_TEXT_DIR_RTL))
x = allocation->x;
else
x = allocation->x + allocation->width;
@@ -1105,7 +1106,8 @@ gtk_box_size_allocate_with_center (GtkWidget *widget,
child_allocation.x = x + (child_size - child_allocation.width) / 2;
}
- if (packing == GTK_PACK_START)
+ if ((packing == GTK_PACK_START && direction == GTK_TEXT_DIR_LTR) ||
+ (packing == GTK_PACK_END && direction == GTK_TEXT_DIR_RTL))
{
x += child_size + priv->spacing;
}
@@ -1114,10 +1116,6 @@ gtk_box_size_allocate_with_center (GtkWidget *widget,
x -= child_size + priv->spacing;
child_allocation.x -= child_size;
}
-
- if (direction == GTK_TEXT_DIR_RTL)
- child_allocation.x = allocation->x + allocation->width - (child_allocation.x -
allocation->x) - child_allocation.width;
-
}
else /* (private->orientation == GTK_ORIENTATION_VERTICAL) */
{
@@ -1159,10 +1157,16 @@ gtk_box_size_allocate_with_center (GtkWidget *widget,
else
center_pos = allocation->y + (box_size - center_size) / 2;
- if (center_pos < side[GTK_PACK_START])
- center_pos = side[GTK_PACK_START];
- else if (center_pos + center_size > side[GTK_PACK_END])
- center_pos = side[GTK_PACK_END] - center_size;
+ if (priv->orientation == GTK_ORIENTATION_HORIZONTAL &&
+ direction == GTK_TEXT_DIR_RTL)
+ packing = GTK_PACK_END;
+ else
+ packing = GTK_PACK_START;
+
+ if (center_pos < side[packing])
+ center_pos = side[packing];
+ else if (center_pos + center_size > side[1 - packing])
+ center_pos = side[1 - packing] - center_size;
if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]