pango r2638 - in trunk: . pango



Author: tml
Date: Mon May 26 21:30:59 2008
New Revision: 2638
URL: http://svn.gnome.org/viewvc/pango?rev=2638&view=rev

Log:
2008-05-27  Tor Lillqvist  <tml novell com>

	* pango/pangowin32-fontmap.c (pango_win32_family_list_faces):
	Prune duplicated face names. Makes the GTK+ font selector look a
	bit saner for the "sans", "serif" and "monospace" standard pseudo
	font families with just one instance of each style.

	That we get duplicated styles in the first place is because of the
	magic code snippet in pango_win32_insert_font() that sets up the
	list of faces for the standard pseudo font families. I don't like
	that code but without it these families wouldn't currently show up
	in the font selector at all.

	A problem is still that the magic code blindly adds all random
	fonts that claim to be FF_ROMAN to the list of faces for the
	"serif" family, etc. I think it would be preferrable to do it only
	for well-known sensible fonts. That would be those that are listed
	in builtin_aliases in pango-utils.c, I guess.



Modified:
   trunk/ChangeLog
   trunk/pango/pangowin32-fontmap.c

Modified: trunk/pango/pangowin32-fontmap.c
==============================================================================
--- trunk/pango/pangowin32-fontmap.c	(original)
+++ trunk/pango/pangowin32-fontmap.c	Mon May 26 21:30:59 2008
@@ -357,22 +357,51 @@
 			       int              *n_faces)
 {
   PangoWin32Family *win32family = PANGO_WIN32_FAMILY (family);
+  GSList *p;
+  int n;
+
+  p = win32family->faces;
+  n = 0;
+  while (p)
+    {
+      GSList *q;
+      q = win32family->faces;
+      while (q != p)
+	{
+	  if (strcmp (pango_win32_face_get_face_name ((PangoFontFace *) q->data),
+		      pango_win32_face_get_face_name ((PangoFontFace *) p->data)) == 0)
+	    break;
+	  q = q->next;
+	}
+      if (q == p)
+	n++;
+      p = p->next;
+    }
 
-  *n_faces = g_slist_length (win32family->faces);
   if (faces)
     {
-      GSList *tmp_list;
-      int i = 0;
+      int i;
 
-      *faces = g_new (PangoFontFace *, *n_faces);
+      *faces = g_new (PangoFontFace *, n);
 
-      tmp_list = win32family->faces;
-      while (tmp_list)
+      p = win32family->faces;
+      i = 0;
+      while (p)
 	{
-	  (*faces)[i++] = tmp_list->data;
-	  tmp_list = tmp_list->next;
+	  int j;
+	  for (j = 0; j < i; j++)
+	    {
+	      if (strcmp (pango_win32_face_get_face_name ((*faces)[j]),
+			  pango_win32_face_get_face_name ((PangoFontFace *) p->data)) == 0)
+		break;
+	    }
+	  if (j == i)
+	    (*faces)[i++] = p->data;
+	  p = p->next;
 	}
     }
+  if (n_faces)
+    *n_faces = n;
 }
 
 static const char *



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]