Эквивалент CoreText для [NSFont fontWithName]

В нашем приложении мы храним шрифты для пользовательских объектов в виде строк, содержащих имя шрифта (как получено из панели шрифтов), и создаем экземпляры шрифтов, используя

+ (NSFont *)fontWithName:(NSString *)fontName

Теперь при загрузке или импорте файлов мы хотели бы проверить, действительно ли имя шрифта будет разрешено в текущей системе.

Из-за определенных конструктивных ограничений нам нужно выполнить проверку на старом, простом C/C++, то есть в наши дни с использованием CoreText.

Однако, похоже, не существует эквивалентного вызова API CoreText, работающего аналогично fontWithName::

  • CTFontCreateWithName всегда возвращает шрифт, так как использует альтернативную стратегию
  • CTFontCopyFullName кажется, использует другие имена, чем те, которые принимаются / используются NSFont..?

Так что в основном вопрос заключается в следующем:
Как мы можем использовать функциональность CoreText, чтобы проверить, существует ли шрифт в текущей системе, и можно ли успешно создать его шрифт, используя [NSFont fontWithName:] потом..?

1 ответ

Похоже, что CTFontCopyPostScriptName() всегда будет возвращать действительный результат для любой строки, которая понимается [NSFont fontWithName:] - и наоборот.

По крайней мере, в моих экспериментах через 10.8 - 10.10 и с использованием действительных и выдуманных имен шрифтов результаты CTFontCopyPostScriptName() всегда можно использовать для проверки правильности имени шрифта NSFont,

Правка № 1
Некоторые эксперименты показывают, что было бы неплохо добавить запасной вариант с CTFontCopyFamilyName() быть на безопасной стороне.

Другие вопросы по тегам