pango r2707 - in trunk: . pango



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]