X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtklabel.c;h=ea963b185379f16c69eb1d453f78b6020535f95a;hb=26c10075f95268ed2d8dbfacadeb1cdc0f559da6;hp=73a772f6738e6150e0cee92f61b97732e0e186ae;hpb=4134c346f9e68367e515345c0ded07aa2b857a1a;p=~andy%2Fgtk diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 73a772f67..ea963b185 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -3236,9 +3236,26 @@ get_layout_location (GtkLabel *label, x = MIN (x, widget->allocation.x + widget->allocation.width - misc->xpad); x -= logical.x; - y = floor (widget->allocation.y + (gint)misc->ypad - + MAX (((widget->allocation.height - widget->requisition.height) * misc->yalign), - 0)); + /* bgo#315462 - 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. The + * rationale is this: + * + * - Single-line labels appear in GtkButtons, and it is very easy to get them + * to be smaller than their requisition. The button may clip the label, but + * the label will still be able to show most of itself and the focus + * rectangle. Also, it is fairly easy to read a single line of clipped text. + * + * - Multi-line labels should not be clipped to showing "something in the + * middle". You want to read the first line, at least, to get some context. + */ + 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;