diff src/ftfont.c @ 95358:9c54d4f00cf6

(ftfont_spec_pattern): Don't set FC_SPACING to pattern. (ftfont_list): Check spacing here. Don't include FC_CHARSET in objset.
author Kenichi Handa <handa@m17n.org>
date Wed, 28 May 2008 11:45:29 +0000
parents 38cbd89dd626
children 3ffecc48d809
line wrap: on
line diff
--- a/src/ftfont.c	Wed May 28 09:27:18 2008 +0000
+++ b/src/ftfont.c	Wed May 28 11:45:29 2008 +0000
@@ -468,7 +468,6 @@
   FcLangSet *langset = NULL;
   int n;
   int dpi = -1;
-  int spacing = -1;
   int scalable = -1;
   Lisp_Object name = Qnil;
   Lisp_Object script = Qnil;
@@ -485,8 +484,6 @@
 
   if (INTEGERP (AREF (spec, FONT_DPI_INDEX)))
     dpi = XINT (AREF (spec, FONT_DPI_INDEX));
-  if (INTEGERP (AREF (spec, FONT_SPACING_INDEX)))
-    spacing = XINT (AREF (spec, FONT_SPACING_INDEX));
   if (INTEGERP (AREF (spec, FONT_AVGWIDTH_INDEX))
       && XINT (AREF (spec, FONT_AVGWIDTH_INDEX)) == 0)
     scalable = 1;
@@ -589,9 +586,6 @@
   if (dpi >= 0
       && ! FcPatternAddDouble (pattern, FC_DPI, dpi))
     goto err;
-  if (spacing >= 0
-      && ! FcPatternAddInteger (pattern, FC_SPACING, spacing))
-    goto err;
   if (scalable >= 0
       && ! FcPatternAddBool (pattern, FC_SCALABLE, scalable ? FcTrue : FcFalse))
     goto err;
@@ -633,6 +627,7 @@
   int fc_charset_idx;
   char otlayout[15];		/* For "otlayout:XXXX" */
   struct OpenTypeSpec *otspec = NULL;
+  int spacing = -1;
   
   if (! fc_initialized)
     {
@@ -643,6 +638,8 @@
   pattern = ftfont_spec_pattern (spec, &fc_charset_idx, otlayout, &otspec);
   if (! pattern)
     return Qnil;
+  if (INTEGERP (AREF (spec, FONT_SPACING_INDEX)))
+    spacing = XINT (AREF (spec, FONT_SPACING_INDEX));
   registry = AREF (spec, FONT_REGISTRY_INDEX);
   family = AREF (spec, FONT_FAMILY_INDEX);
   if (! NILP (family))
@@ -661,7 +658,7 @@
 
   objset = FcObjectSetBuild (FC_FOUNDRY, FC_FAMILY, FC_WEIGHT, FC_SLANT,
 			     FC_WIDTH, FC_PIXEL_SIZE, FC_SPACING, FC_SCALABLE,
-			     FC_CHARSET, FC_FILE,
+			     FC_FILE,
 #ifdef FC_CAPABILITY
 			     FC_CAPABILITY,
 #endif	/* FC_CAPABILITY */
@@ -676,6 +673,16 @@
     {
       Lisp_Object entity;
 
+      if (spacing >= 0)
+	{
+	  int this;
+
+	  if ((FcPatternGetInteger (fontset->fonts[i], FC_SPACING, 0, &this)
+	       == FcResultMatch)
+	      && spacing != this)
+	    continue;
+	}
+
 #ifdef FC_CAPABILITY
       if (otlayout[0])
 	{