diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2008-08-22 16:41:14 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2008-08-22 16:41:14 +0000 |
commit | 2445e04bc11f0e42b61640f1a4cc54778449400d (patch) | |
tree | 9b758664bd86fcce92cccc807cc50719382ec494 | |
parent | 2b7d389184f703db6042a3fe64aad99e4516b05e (diff) | |
download | pango-2445e04bc11f0e42b61640f1a4cc54778449400d.tar.gz |
Bug 549003 – pango_layout_set_height(): layout should not be cleared
2008-08-22 Behdad Esfahbod <behdad@gnome.org>
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
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | pango/pango-layout-private.h | 1 | ||||
-rw-r--r-- | pango/pango-layout.c | 12 |
3 files changed, 23 insertions, 2 deletions
@@ -1,3 +1,15 @@ +2008-08-22 Behdad Esfahbod <behdad@gnome.org> + + 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 <richard@imendio.com> * 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 f82c589c..99d0efbc 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 f4c307db..e5b6e269 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) { |