Как правильно рисовать текст с помощью «Core Text» в перевернутом NSView - PullRequest
0 голосов
/ 24 мая 2018

Я использую свой собственный NSView с

- (BOOL) isFlipped { return TRUE; }

, чтобы получить координату слева-сверху.Проблема в том, что я рисую текст с помощью Core Text:

CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, size, NULL);
CFAttributedStringRef attrStr = makeAttrStringRef(str, font);
CTLineRef line = CTLineCreateWithAttributedString(attrStr);
CGContextSetTextPosition(context, pos.x, pos.y); // pos is left-top corener
CTLineDraw(line, context);

текст переворачивается:

enter image description here

Если я перевожу перевернутыйматрица к CTFontCreateWithFontDescriptor

CGAffineTransform flipped = (CGAffineTransform){1,0,0,-1,0,0};

текст смещен (левый верхний угол текста, если не на pos):

enter image description here

Как правильно рисовать текст в перевернутом NSView, сохраняя координаты слева-сверху?

1 Ответ

0 голосов
/ 25 мая 2018

Вы всегда должны инициализировать текстовую матрицу перед рендерингом текста, как правило, для идентификации:

CGContextSetTextMatrix(context, CGAffineTransformIdentity);

Прошло немного времени, поэтому я не могу сразу вспомнить, нужно ли перевернуть ее для перевернутого представленияна macOS.(Если у вас возникли проблемы, добавьте комментарий, и я найду правильное преобразование.)

...