]> code.delx.au - gnu-emacs/commitdiff
* src/macfont.m (macfont_create_family_with_symbol): Accept localized names.
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Tue, 25 Aug 2015 02:06:27 +0000 (11:06 +0900)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Tue, 25 Aug 2015 02:06:27 +0000 (11:06 +0900)
src/macfont.m

index 02dc46824e993106bdb9ae2e0a9d61d4e0c1070e..d0d7252f3508f81233545d2e3716faa92aa2308a 100644 (file)
@@ -1038,49 +1038,44 @@ static CFStringRef
 macfont_create_family_with_symbol (Lisp_Object symbol)
 {
   CFStringRef result = NULL, family_name;
-  CFComparatorFunction family_name_comparator;
+  CFDictionaryRef attributes = NULL;
+  FontDescriptorRef pat_desc = NULL;
 
   if (macfont_get_family_cache_if_present (symbol, &result))
     return result ? CFRetain (result) : NULL;
 
   family_name = cfstring_create_with_string_noencode (SYMBOL_NAME (symbol));
-  if (family_name == NULL)
-    return NULL;
-
+  if (family_name)
     {
-      family_name_comparator = CTFontManagerCompareFontFamilyNames;
+      attributes =
+       CFDictionaryCreate (NULL,
+                           (const void **) &MAC_FONT_FAMILY_NAME_ATTRIBUTE,
+                           (const void **) &family_name, 1,
+                           &kCFTypeDictionaryKeyCallBacks,
+                           &kCFTypeDictionaryValueCallBacks);
+      CFRelease (family_name);
     }
-
-  if ((*family_name_comparator) (family_name, CFSTR ("LastResort"), NULL)
-      == kCFCompareEqualTo)
-    result = CFSTR ("LastResort");
-  else
+  if (attributes)
     {
-      CFIndex i, count;
-      CFArrayRef families = macfont_copy_available_families_cache ();
+      pat_desc = mac_font_descriptor_create_with_attributes (attributes);
+      CFRelease (attributes);
+    }
+  if (pat_desc)
+    {
+      FontDescriptorRef desc =
+       mac_font_descriptor_create_matching_font_descriptor (pat_desc, NULL);
 
-      if (families)
+      if (desc)
        {
-         count = CFArrayGetCount (families);
-         i = CFArrayBSearchValues (families, CFRangeMake (0, count),
-                                   (const void *) family_name,
-                                   family_name_comparator, NULL);
-         if (i < count)
-           {
-             CFStringRef name = CFArrayGetValueAtIndex (families, i);
-
-             if ((*family_name_comparator) (name, family_name, NULL)
-                 == kCFCompareEqualTo)
-               result = CFRetain (name);
-           }
-         CFRelease (families);
+         result =
+           mac_font_descriptor_copy_attribute (desc,
+                                               MAC_FONT_FAMILY_NAME_ATTRIBUTE);
+         CFRelease (desc);
        }
+      macfont_set_family_cache (symbol, result);
+      CFRelease (pat_desc);
     }
 
-  CFRelease (family_name);
-
-  macfont_set_family_cache (symbol, result);
-
   return result;
 }