diff options
| author | YAMAMOTO Mitsuharu | 2015-08-25 11:06:27 +0900 |
|---|---|---|
| committer | YAMAMOTO Mitsuharu | 2015-08-25 11:06:27 +0900 |
| commit | 1229e61ab8fe7143fbe7d8a2686a6521627b77a2 (patch) | |
| tree | 133f615bd250f9b0cf8b1123cc12fadf474ca0c5 /src | |
| parent | 7b5290da89e927ba01ac51e1eaaffd828503285f (diff) | |
| download | emacs-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.m | 55 |
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 | |||
| 1038 | macfont_create_family_with_symbol (Lisp_Object symbol) | 1038 | macfont_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 | ||