From ec81ccd5f923984fb384af04d8bc9d1ee858dbcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Sat, 15 Aug 2020 17:03:46 +0200 Subject: [PATCH] label: Try to avoid a pango_layout_get_extents call Measuring text is quite expensive, so only do this if really necessary. --- gtk/gtklabel.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 1e9f566346..378069d8a5 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -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);