pango r2707 - in trunk: . pango
- From: behdad svn gnome org
- To: svn-commits-list gnome org
- Subject: pango r2707 - in trunk: . pango
- Date: Fri, 22 Aug 2008 16:41:14 +0000 (UTC)
Author: behdad
Date: Fri Aug 22 16:41:14 2008
New Revision: 2707
URL: http://svn.gnome.org/viewvc/pango?rev=2707&view=rev
Log:
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.
Modified:
trunk/ChangeLog
trunk/pango/pango-layout-private.h
trunk/pango/pango-layout.c
Modified: trunk/pango/pango-layout-private.h
==============================================================================
--- trunk/pango/pango-layout-private.h (original)
+++ trunk/pango/pango-layout-private.h Fri Aug 22 16:41:14 2008
@@ -73,6 +73,7 @@
PangoTabArray *tabs;
GSList *lines;
+ guint line_count; /* Number of lines in @lines. 0 if lines is %NULL */
};
gboolean _pango_layout_line_ellipsize (PangoLayoutLine *line,
Modified: trunk/pango/pango-layout.c
==============================================================================
--- trunk/pango/pango-layout.c (original)
+++ trunk/pango/pango-layout.c Fri Aug 22 16:41:14 2008
@@ -202,6 +202,7 @@
layout->log_attrs = NULL;
layout->lines = NULL;
+ layout->line_count = 0;
layout->tab_width = -1;
layout->unknown_glyphs_count = -1;
@@ -423,7 +424,12 @@
{
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 @@
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 @@
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 @@
/* we prepend, then reverse the list later */
layout->lines = g_slist_prepend (layout->lines, line);
+ layout->line_count++;
if (layout->height >= 0)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]