Знаете ли вы что такое CoreText и NSAttributedString (CFAttributedString)?
Всё банально.
Хотя на этом и строится весь "нативный" рендеринг текста под MacOS и iOS.
Попробую в двух словах объяснить.
NSAttributedString = class
Text : NSString;
Attributes : T(?)Attributes;
end;//NSAttributedString
Где T(?)Attributes:
T(?)Attributes = array of Decoration;
Где Decoration:
Decoration = record
Start : Integer;
Finish: Integer;
Font : TFont;
Style : TStyle;
GlyphRunnerDelegate : TGlyphRunnerDelegate; // - вот это САМЫЙ интересный член. Он позволяет вставлять КАРТИНКИ
...
etc // например SpaceBefore или SpaceAfter...
...
end;//Decorations
Атрибуты - "натянуты" на Text. Сверху наложены. Как "прозрачные" стёклышки.
И есть возможность "отрендерить" NSAttributedString в указанный прямоугольник.
И ЗАПОМНИТЬ результаты рендеринга. И анализировать из. С "точностью до буквы". Точнее - Glyph'а. И потом выводить эти результаты в реальное место контекста вывода.
В принципе - схема - знакомая. У меня в EVD - так всё примерно и устроено. С "точностью до запятых".
Интересная тема? Стоит про неё писать?
Там есть "подводные камни"... Например с системой координат.
Но если - "сразу неинтересно" - писать не буду...
Всё банально.
Хотя на этом и строится весь "нативный" рендеринг текста под MacOS и iOS.
Попробую в двух словах объяснить.
NSAttributedString = class
Text : NSString;
Attributes : T(?)Attributes;
end;//NSAttributedString
Где T(?)Attributes:
T(?)Attributes = array of Decoration;
Где Decoration:
Decoration = record
Start : Integer;
Finish: Integer;
Font : TFont;
Style : TStyle;
GlyphRunnerDelegate : TGlyphRunnerDelegate; // - вот это САМЫЙ интересный член. Он позволяет вставлять КАРТИНКИ
...
etc // например SpaceBefore или SpaceAfter...
...
end;//Decorations
Атрибуты - "натянуты" на Text. Сверху наложены. Как "прозрачные" стёклышки.
И есть возможность "отрендерить" NSAttributedString в указанный прямоугольник.
И ЗАПОМНИТЬ результаты рендеринга. И анализировать из. С "точностью до буквы". Точнее - Glyph'а. И потом выводить эти результаты в реальное место контекста вывода.
В принципе - схема - знакомая. У меня в EVD - так всё примерно и устроено. С "точностью до запятых".
Интересная тема? Стоит про неё писать?
Там есть "подводные камни"... Например с системой координат.
Но если - "сразу неинтересно" - писать не буду...
Интересная тема. Я даже более общую бы взял. Интересно как устроена работа с GUI в целом.
ОтветитьУдалитьРоман, ничего кстати "нового" по сравнению с "виндой" - нет. Те же "контексты", те же "примитивы вывода". Плюс/минус. ОЧЕНЬ (ИМХО) похоже на GDI+. Только про трансформации и Layer'ы - ничего пока сказать не могу. Ибо - чайник в них. Там - есть "зерно". Да. Но тоже - не думаю, что Apple - "первопроходцы".
УдалитьКрасиво. Не Винды. :-(
ОтветитьУдалитьДим, да. "Навскидку" многое в Cocoa. Quartz и CoreText - user-friendly. И "очень правильно". Но не стоит ОБОЛЬЩАТЬСЯ. Там ТОЖЕ есть "шероховатости". А что до "не винды" - да в целом - "ничего нового". Те же контексты (hDC) и "окна" (View). Вопрос только в том, что КАКИЕ-ТО моменты там - БОЛЬШЕ проработаны. А какие-то кстати - меньше...
ОтветитьУдалить