Как рисовать усеченный текст с помощью ATSUI

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

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

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...?? если нет, как мне нарисовать строку, усеченную до прямоугольника.

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


person Abhinay K Reddyreddy    schedule 13.10.2010    source источник


Ответы (1)


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

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

person Peter Hosey    schedule 14.10.2010
comment
Спасибо, Питер, я нашел способ измерить размеры выложенного текста с помощью функций ATSUI. Меня пока не интересуют 64-битные. - person Abhinay K Reddyreddy; 29.10.2010
comment
Abhinay K Reddyreddy: Если ваше решение отличается от моего, почему бы не опубликовать его как ответ и не принять его? - person Peter Hosey; 29.10.2010