aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu2015-08-25 11:06:27 +0900
committerYAMAMOTO Mitsuharu2015-08-25 11:06:27 +0900
commit1229e61ab8fe7143fbe7d8a2686a6521627b77a2 (patch)
tree133f615bd250f9b0cf8b1123cc12fadf474ca0c5 /src
parent7b5290da89e927ba01ac51e1eaaffd828503285f (diff)
downloademacs-1229e61ab8fe7143fbe7d8a2686a6521627b77a2.tar.gz
emacs-1229e61ab8fe7143fbe7d8a2686a6521627b77a2.zip
* src/macfont.m (macfont_create_family_with_symbol): Accept localized names.
Diffstat (limited to 'src')
-rw-r--r--src/macfont.m55
1 files changed, 25 insertions, 30 deletions
diff --git a/src/macfont.m b/src/macfont.m
index 02dc46824e9..d0d7252f350 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -1038,49 +1038,44 @@ static CFStringRef
1038macfont_create_family_with_symbol (Lisp_Object symbol) 1038macfont_create_family_with_symbol (Lisp_Object symbol)
1039{ 1039{
1040 CFStringRef result = NULL, family_name; 1040 CFStringRef result = NULL, family_name;
1041 CFComparatorFunction family_name_comparator; 1041 CFDictionaryRef attributes = NULL;
1042 FontDescriptorRef pat_desc = NULL;
1042 1043
1043 if (macfont_get_family_cache_if_present (symbol, &result)) 1044 if (macfont_get_family_cache_if_present (symbol, &result))
1044 return result ? CFRetain (result) : NULL; 1045 return result ? CFRetain (result) : NULL;
1045 1046
1046 family_name = cfstring_create_with_string_noencode (SYMBOL_NAME (symbol)); 1047 family_name = cfstring_create_with_string_noencode (SYMBOL_NAME (symbol));
1047 if (family_name == NULL) 1048 if (family_name)
1048 return NULL;
1049
1050 { 1049 {
1051 family_name_comparator = CTFontManagerCompareFontFamilyNames; 1050 attributes =
1051 CFDictionaryCreate (NULL,
1052 (const void **) &MAC_FONT_FAMILY_NAME_ATTRIBUTE,
1053 (const void **) &family_name, 1,
1054 &kCFTypeDictionaryKeyCallBacks,
1055 &kCFTypeDictionaryValueCallBacks);
1056 CFRelease (family_name);
1052 } 1057 }
1053 1058 if (attributes)
1054 if ((*family_name_comparator) (family_name, CFSTR ("LastResort"), NULL)
1055 == kCFCompareEqualTo)
1056 result = CFSTR ("LastResort");
1057 else
1058 { 1059 {
1059 CFIndex i, count; 1060 pat_desc = mac_font_descriptor_create_with_attributes (attributes);
1060 CFArrayRef families = macfont_copy_available_families_cache (); 1061 CFRelease (attributes);
1062 }
1063 if (pat_desc)
1064 {
1065 FontDescriptorRef desc =
1066 mac_font_descriptor_create_matching_font_descriptor (pat_desc, NULL);
1061 1067
1062 if (families) 1068 if (desc)
1063 { 1069 {
1064 count = CFArrayGetCount (families); 1070 result =
1065 i = CFArrayBSearchValues (families, CFRangeMake (0, count), 1071 mac_font_descriptor_copy_attribute (desc,
1066 (const void *) family_name, 1072 MAC_FONT_FAMILY_NAME_ATTRIBUTE);
1067 family_name_comparator, NULL); 1073 CFRelease (desc);
1068 if (i < count)
1069 {
1070 CFStringRef name = CFArrayGetValueAtIndex (families, i);
1071
1072 if ((*family_name_comparator) (name, family_name, NULL)
1073 == kCFCompareEqualTo)
1074 result = CFRetain (name);
1075 }
1076 CFRelease (families);
1077 } 1074 }
1075 macfont_set_family_cache (symbol, result);
1076 CFRelease (pat_desc);
1078 } 1077 }
1079 1078
1080 CFRelease (family_name);
1081
1082 macfont_set_family_cache (symbol, result);
1083
1084 return result; 1079 return result;
1085} 1080}
1086 1081