From 0930de944697b76008863f87d2adce7f059e5a4a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 29 Mar 2011 03:31:09 +0200 Subject: [PATCH] label: Only get font metrics if we have to Getting these metrics is expensive, so avoid it if possible. --- gtk/gtklabel.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index d17f4d7eba..e0c6c5b771 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -3091,20 +3091,12 @@ get_label_width (GtkLabel *label, { GtkLabelPrivate *priv; PangoLayout *layout; - PangoContext *context; - PangoFontMetrics *metrics; PangoRectangle rect; - gint char_width, digit_width, char_pixels, text_width, ellipsize_chars, guess_width; + gint text_width, ellipsize_chars, guess_width; priv = label->priv; layout = gtk_label_get_measuring_layout (label, NULL, -1); - context = pango_layout_get_context (layout); - metrics = get_font_metrics (context, GTK_WIDGET (label)); - char_width = pango_font_metrics_get_approximate_char_width (metrics); - digit_width = pango_font_metrics_get_approximate_digit_width (metrics); - char_pixels = MAX (char_width, digit_width); - pango_font_metrics_unref (metrics); /* Fetch the length of the complete unwrapped text */ pango_layout_get_extents (layout, NULL, &rect); @@ -3141,6 +3133,17 @@ get_label_width (GtkLabel *label, if (priv->ellipsize || priv->wrap) { + PangoContext *context; + PangoFontMetrics *metrics; + gint char_width, digit_width, char_pixels; + + context = pango_layout_get_context (layout); + metrics = get_font_metrics (context, GTK_WIDGET (label)); + char_width = pango_font_metrics_get_approximate_char_width (metrics); + digit_width = pango_font_metrics_get_approximate_digit_width (metrics); + char_pixels = MAX (char_width, digit_width); + pango_font_metrics_unref (metrics); + *minimum = char_pixels * MAX (priv->width_chars, ellipsize_chars); /* Default to the minimum width regularly guessed by GTK+ if no minimum