В Xcode 11.1 я использую CoreText для рендеринга следующего арабского текста…
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
CFRelease(attrString); CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CTFrameDraw(frame, myContext);
ХОРОШО. Когда я нахожусь в Мохаве (macOS 10.14), он правильно рисует приписанную строку, и единственная строка фрейма состоит только из одного прогона ...
CTLineRef myLine = (CTLineRef) CFArrayGetValueAtIndex(lines, 0);
CFIndex countOfRuns = CFArrayGetCount(runArray);
countOfRuns равно 1, чтоправильно и что ожидается. 101
счетчик прогонов = 1, диапазон строк = (0, 69), ширина = 481,191, счетчик глифов = 69, диапазон строк прогона = (0, 69)…
Но когда я нахожусь в Каталине (macOS 10.15), хотя он все еще правильно рисует приписанную строку, единственная линия фрейма состоит из трех запусков!
CTLineRef myLine = (CTLineRef) CFArrayGetValueAtIndex(lines, 0);
CFIndex countOfRuns = CFArrayGetCount(runArray);
countOfRuns теперь равно 3, что не должно быть, и это нарушает мою программу! ☹
run count = 3, диапазон строк = (0, 69), ширина = 481.191, количество символов = 70,диапазон строки первого запуска = (58, 11), диапазон строки второго запуска = (56, 2) и диапазон строки третьего запуска = (0, 56)…
Кодточно так же в Мохаве и Каталине, но каждый macOS возвращает различное количество прогонов глифа! Как это может быть? Были ли сделаны какие-то изменения в CoreText или в Catalina? Чего мне не хватает?