Как нарисовать усеченный текст с ATSUI - PullRequest
0 голосов
/ 13 октября 2010

Как нарисовать усеченный текст с помощью ATSUI ?? У меня есть устаревшее приложение, которое использует QuickDraw API. он использует функции StringWidth, TruncString и DrawString. Я мог бы заменить StringWidth и DrawString на ATSUII ATSUMeasureTextImage и ATSUDrawText. Однако я не смог найти способ обрезать строку так, чтобы она вписывалась в прямоугольник.

Я использовал Quartz с QuickDraw, прежде чем выбрать ATSUI. Кварц не предоставляет никаких функций для оценки размера (в пикселях) нарисованного текста.

CGContextSelectFont(cgContext,
    "Geneva", 12.0, kCGEncodingMacRoman);
CGContextSetTextMatrix(cgContext,
    CGAffineTransformMake(1.0,0.0, 0.0,
    -1.0, 0.0, 0.0));
CGContextShowTextAtPoint(cgContext,
    inPoint.h, inPoint.v + 12.00, (const
    char*)&(inString[1]), inString[0]);

Есть ли в ATSUI какая-либо функция, которая выполняет усечение строки, например TruncString ... ?? если нет, то как нарисовать строку, обрезанную до прямоугольника.

Спасибо, Абхинай.

1 Ответ

1 голос
/ 14 октября 2010

Вы хотите использовать HIThemeGetTextDimensions для измерения строки с помощью политики усечения. Это даст вам ширину и высоту прямоугольника и базовую линию; Вы можете создать CGRect с такой шириной и высотой и установить его источник так, как вам нужен текст.

Удивительно, но эта функция по-прежнему поддерживается в 64-битном режиме, хотя она никогда не документировалась (для HITheme вообще не было никакой справочной документации). Посмотрите это в заголовках для деталей.

...