gtk2/gtk2-bnc310710-bgo524166-underallocated-gtklabel-position.diff

34 lines
1.4 KiB
Diff

2007-12-17 Federico Mena Quintero <federico@novell.com>
* gtk/gtklabel.c (get_layout_location): For single-line labels,
align the requisition to the allocation unconditionally, even if
we are under-allocated. For multi-line labels, try to show the
top of the text as before. Fixes
https://bugzilla.novell.com/show_bug.cgi?id=310710
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index cd6c5ac..6e38a7d 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -2362,9 +2362,17 @@ get_layout_location (GtkLabel *label,
else
x = MIN (x, widget->allocation.x + widget->allocation.width - misc->xpad);
- y = floor (widget->allocation.y + (gint)misc->ypad
- + MAX (((widget->allocation.height - widget->requisition.height) * misc->yalign),
- 0));
+ /* For single-line labels, *do* align the requisition with respect to the allocation, even
+ * if we are under-allocated. For multi-line labels, always show the top of the text when
+ * they are under-allocated.
+ */
+ if (pango_layout_get_line_count (label->layout) == 1)
+ y = floor (widget->allocation.y + (gint)misc->ypad
+ + (widget->allocation.height - widget->requisition.height) * misc->yalign);
+ else
+ y = floor (widget->allocation.y + (gint)misc->ypad
+ + MAX (((widget->allocation.height - widget->requisition.height) * misc->yalign),
+ 0));
if (xp)
*xp = x;