Как нарисовать усеченный текст с ATSUI
Как нарисовать усеченный текст с 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 ответ
Вы хотите использовать HIThemeGetTextDimensions
измерить строку с помощью политики усечения. Это даст вам ширину и высоту прямоугольника и базовую линию; Вы можете сделать CGRect с этой шириной и высотой и установить его происхождение, где вы хотите текст.
Удивительно, но эта функция по-прежнему поддерживается в 64-битной версии, хотя она никогда не была документирована (для HITheme вообще не было никакой справочной документации). Посмотрите это в заголовках для деталей.