From 2445e04bc11f0e42b61640f1a4cc54778449400d Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 22 Aug 2008 16:41:14 +0000 Subject: [PATCH] =?utf8?q?Bug=20549003=20=E2=80=93=20pango=5Flayout=5Fset?= =?utf8?q?=5Fheight():=20layout=20should=20not=20be=20cleared?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-08-22 Behdad Esfahbod Bug 549003 – pango_layout_set_height(): layout should not be cleared unless required * pango/pango-layout-private.h: * pango/pango-layout.c (pango_layout_init), (pango_layout_set_height), (pango_layout_get_line_count), (pango_layout_clear_lines), (add_line): Don't invalidate layout if the new height does not force ellipsization. svn path=/trunk/; revision=2707 --- ChangeLog | 12 ++++++++++++ pango/pango-layout-private.h | 1 + pango/pango-layout.c | 12 ++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 263703d..5a81d1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-08-22 Behdad Esfahbod + + Bug 549003 – pango_layout_set_height(): layout should not be cleared + unless required + + * pango/pango-layout-private.h: + * pango/pango-layout.c (pango_layout_init), + (pango_layout_set_height), (pango_layout_get_line_count), + (pango_layout_clear_lines), (add_line): + Don't invalidate layout if the new height does not force + ellipsization. + 2008-08-22 Richard Hult * pango/pangoatsui.c: (_pango_atsui_font_set_font_map): Fix build, diff --git a/pango/pango-layout-private.h b/pango/pango-layout-private.h index f82c589..99d0efb 100644 --- a/pango/pango-layout-private.h +++ b/pango/pango-layout-private.h @@ -73,6 +73,7 @@ struct _PangoLayout PangoTabArray *tabs; GSList *lines; + guint line_count; /* Number of lines in @lines. 0 if lines is %NULL */ }; gboolean _pango_layout_line_ellipsize (PangoLayoutLine *line, diff --git a/pango/pango-layout.c b/pango/pango-layout.c index f4c307d..e5b6e26 100644 --- a/pango/pango-layout.c +++ b/pango/pango-layout.c @@ -202,6 +202,7 @@ pango_layout_init (PangoLayout *layout) layout->log_attrs = NULL; layout->lines = NULL; + layout->line_count = 0; layout->tab_width = -1; layout->unknown_glyphs_count = -1; @@ -423,7 +424,12 @@ pango_layout_set_height (PangoLayout *layout, { layout->height = height; - if (layout->ellipsize != PANGO_ELLIPSIZE_NONE) + /* Do not invalidate if the number of lines requested is + * larger than the total number of lines in layout. + * Bug 549003 + */ + if (layout->ellipsize != PANGO_ELLIPSIZE_NONE && + !(layout->lines && layout->is_ellipsized == FALSE && layout->line_count <= -height)) pango_layout_clear_lines (layout); } } @@ -1278,7 +1284,7 @@ pango_layout_get_line_count (PangoLayout *layout) g_return_val_if_fail (layout != NULL, 0); pango_layout_check_lines (layout); - return g_slist_length (layout->lines); + return layout->line_count; } /** @@ -2717,6 +2723,7 @@ pango_layout_clear_lines (PangoLayout *layout) g_slist_free (layout->lines); layout->lines = NULL; + layout->line_count = 0; /* This could be handled separately, since we don't need to * recompute log_attrs on a width change, but this is easiest @@ -3446,6 +3453,7 @@ add_line (PangoLayoutLine *line, /* we prepend, then reverse the list later */ layout->lines = g_slist_prepend (layout->lines, line); + layout->line_count++; if (layout->height >= 0) { -- 2.7.4