summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Lillqvist <tml@novell.com>2008-05-26 21:30:59 +0000
committerTor Lillqvist <tml@src.gnome.org>2008-05-26 21:30:59 +0000
commit3c3df8f0f19f6fb87931bd68b8dbb61bc3af0de0 (patch)
tree6a69f8ad6f512e8b08ab4049d7a32beed36d56f1
parentc72e69c91322e2b76521baabac154dcea6692160 (diff)
downloadpango-3c3df8f0f19f6fb87931bd68b8dbb61bc3af0de0.tar.gz
Prune duplicated face names. Makes the GTK+ font selector look a bit saner
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. svn path=/trunk/; revision=2638
-rw-r--r--ChangeLog19
-rw-r--r--pango/pangowin32-fontmap.c45
2 files changed, 56 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index efdc331b..264cbcc3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+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.
+
2008-05-26 Tor Lillqvist <tml@novell.com>
* pango/pangowin32-private.h
diff --git a/pango/pangowin32-fontmap.c b/pango/pangowin32-fontmap.c
index cff43126..3ee1d1d1 100644
--- a/pango/pangowin32-fontmap.c
+++ b/pango/pangowin32-fontmap.c
@@ -357,22 +357,51 @@ pango_win32_family_list_faces (PangoFontFamily *family,
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 *