emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 1229e61: * src/macfont.m (macfont_create_family_wit


From: YAMAMOTO Mitsuharu
Subject: [Emacs-diffs] master 1229e61: * src/macfont.m (macfont_create_family_with_symbol): Accept localized names.
Date: Tue, 25 Aug 2015 02:08:20 +0000

branch: master
commit 1229e61ab8fe7143fbe7d8a2686a6521627b77a2
Author: YAMAMOTO Mitsuharu <address@hidden>
Commit: YAMAMOTO Mitsuharu <address@hidden>

    * src/macfont.m (macfont_create_family_with_symbol): Accept localized names.
---
 src/macfont.m |   55 +++++++++++++++++++++++++------------------------------
 1 files changed, 25 insertions(+), 30 deletions(-)

diff --git a/src/macfont.m b/src/macfont.m
index 02dc468..d0d7252 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -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;
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]