label: Try to avoid a pango_layout_get_extents call

Measuring text is quite expensive, so only do this if really necessary.
This commit is contained in:
Timm Bäder 2020-08-15 17:03:46 +02:00 committed by Matthias Clasen
parent 8acd60fda9
commit ec81ccd5f9

View File

@ -2782,7 +2782,6 @@ gtk_label_get_measuring_layout (GtkLabel *self,
PangoLayout *existing_layout,
int width)
{
PangoRectangle rect;
PangoLayout *copy;
if (existing_layout != NULL)
@ -2820,13 +2819,17 @@ gtk_label_get_measuring_layout (GtkLabel *self,
* can just return the current layout, because for measuring purposes, it will be
* identical.
*/
pango_layout_get_extents (self->layout, NULL, &rect);
if ((width == -1 || rect.width <= width) &&
!pango_layout_is_wrapped (self->layout) &&
if (!pango_layout_is_wrapped (self->layout) &&
!pango_layout_is_ellipsized (self->layout))
{
g_object_ref (self->layout);
return self->layout;
PangoRectangle rect;
if (width == -1)
return g_object_ref (self->layout);
pango_layout_get_extents (self->layout, NULL, &rect);
if (rect.width <= width)
return g_object_ref (self->layout);
}
copy = pango_layout_copy (self->layout);