summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@gnome.org>2008-08-22 16:41:14 +0000
committerBehdad Esfahbod <behdad@src.gnome.org>2008-08-22 16:41:14 +0000
commit2445e04bc11f0e42b61640f1a4cc54778449400d (patch)
tree9b758664bd86fcce92cccc807cc50719382ec494
parent2b7d389184f703db6042a3fe64aad99e4516b05e (diff)
downloadpango-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--ChangeLog12
-rw-r--r--pango/pango-layout-private.h1
-rw-r--r--pango/pango-layout.c12
3 files changed, 23 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 263703d8..5a81d1b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
{