TextEngine
Базовый движок компоновки текста, переноса строк, расчёта метрик и отрисовки встроенного inline-контента.
Обзор
TextEngine — централизованная подсистема, отвечающая за измерение ширины символов, перенос длинных текстовых фрагментов по строкам, выравнивание блоков по горизонтали и вертикали, а также позиционирование встроенных inline-элементов (иконок, бейджей, текстур).
Измерение текста и содержимого
Методы измерения рассчитывают ширину строк (measureLineWidth) и высоту текстовых блоков (measureTextHeight) с учётом метрик шрифта (ascent, descent), кодовых точек Unicode и атомарных inline-span'ов. Метод minContentWidth находит ширину самого длинного неделимого слова.
Перенос по строкам (Line Wrapping)
Метод wrapLines() разбивает форматированный текст по границам слов так, чтобы он не превышал заданную максимальную ширину (maxWidth). Если отдельное слово длиннее строки, оно разбивается по символам.
Рендеринг и inline-содержимое
При отрисовке обычного текста TextEngine передаёт команды напрямую в RenderBackend. Если текст содержит inline-элементы, движок рассчитывает точные координаты для каждого блока и вызывает соответствующий InlineContentRenderer с вычисленными границами.
Измерение и перенос форматированного текста
float maxWidth = 200.0f;
List<RichText> lines = TextEngine.wrapLines(context, richText, maxWidth);
float totalHeight = TextEngine.linesHeight(context, lines);
Отрисовка выровненного текста на холсте
TextEngine.draw(context, richText, x, y, width, height, paint, transform,
Alignment.CENTER, Alignment.CENTER);
API
TextEngine::measureLineWidth(String)
measureLineWidth(String)
Измеряет ширину строки по усреднённым глифам без активного бэкенда.
| Параметр | Тип | Описание |
|---|---|---|
text |
String |
Текст для измерения. |
Возвращает float: Ширина строки в пикселях..
TextEngine::minContentWidth(RichText)
minContentWidth(RichText)
Вычисляет ширину самого длинного неделимого слова в тексте.
| Параметр | Тип | Описание |
|---|---|---|
text |
RichText |
Rich-текст для анализа. |
Возвращает float: Минимальная контентная ширина в пикселях..
TextEngine::measureLineWidth(RenderContext, String)
measureLineWidth(RenderContext, String)
Измеряет ширину строки по метрикам шрифта активного бэкенда.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
text |
String |
Текстовая строка. |
Возвращает float: Ширина строки в пикселях..
TextEngine::measureLineWidth(RenderContext, RichText)
measureLineWidth(RenderContext, RichText)
Измеряет ширину rich-текста с учётом шрифтов и inline-элементов.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
text |
RichText |
Экземпляр RichText. |
Возвращает float: Максимальная ширина строки в пикселях..
TextEngine::measureLineWidth(RichText)
measureLineWidth(RichText)
Измеряет ширину rich-текста по встроенным в фрагменты шрифтам.
| Параметр | Тип | Описание |
|---|---|---|
text |
RichText |
Экземпляр RichText. |
Возвращает float: Ширина строки в пикселях..
TextEngine::measureTextHeight(RichText)
measureTextHeight(RichText)
Вычисляет общую высоту всех строк rich-текста.
| Параметр | Тип | Описание |
|---|---|---|
text |
RichText |
Экземпляр RichText. |
Возвращает float: Полная высота текста в пикселях..
TextEngine::measureTextHeight(RenderContext, RichText)
measureTextHeight(RenderContext, RichText)
Вычисляет высоту rich-текста по метрикам шрифта активного бэкенда.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
text |
RichText |
Экземпляр RichText. |
Возвращает float: Высота текста в пикселях..
TextEngine::wrapLines(RichText, float)
wrapLines(RichText, float)
Разбивает rich-текст на строки, укладывающиеся в максимальную ширину.
| Параметр | Тип | Описание |
|---|---|---|
text |
RichText |
Текст для переноса. |
maxWidth |
float |
Максимальная ширина строки. |
Возвращает List: Список перенесённых строк RichText..
TextEngine::wrapLines(RenderContext, RichText, float)
wrapLines(RenderContext, RichText, float)
Разбивает rich-текст на строки с использованием бэкенда.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
text |
RichText |
Текст для переноса. |
maxWidth |
float |
Максимальная ширина строки. |
Возвращает List: Список перенесённых строк RichText..
TextEngine::lineHeight(RichText)
lineHeight(RichText)
Вычисляет высоту одной строки rich-текста по фрагментам и inline-элементам.
| Параметр | Тип | Описание |
|---|---|---|
line |
RichText |
Строка текста. |
Возвращает float: Высота строки в пикселях..
TextEngine::lineHeight(RenderContext, RichText)
lineHeight(RenderContext, RichText)
Вычисляет высоту строки через метрики шрифта активного бэкенда.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
line |
RichText |
Строка текста. |
Возвращает float: Высота строки в пикселях..
TextEngine::linesHeight(List)
linesHeight(List)
Вычисляет суммарную высоту списка строк.
| Параметр | Тип | Описание |
|---|---|---|
lines |
List |
Список строк RichText. |
Возвращает float: Суммарная высота в пикселях..
TextEngine::linesHeight(RenderContext, List)
linesHeight(RenderContext, List)
Вычисляет суммарную высоту списка строк через активный бэкенд.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
lines |
List |
Список строк RichText. |
Возвращает float: Суммарная высота в пикселях..
TextEngine::draw(RenderContext, String, float, float, float, float, Paint, Transform, Alignment, Alignment)
draw(RenderContext, String, float, float, float, float, Paint, Transform, Alignment, Alignment)
Отрисовывает обычный текст с выравниванием внутри заданных границ.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
text |
String |
Текстовая строка. |
x |
float |
Координата X. |
y |
float |
Координата Y. |
width |
float |
Ширина контейнера. |
height |
float |
Высота контейнера. |
paint |
Paint |
Стиль заливки. |
transform |
Transform |
Опциональная трансформация. |
horizontalAlignment |
Alignment |
Горизонтальное выравнивание. |
verticalAlignment |
Alignment |
Вертикальное выравнивание. |
TextEngine::draw(RenderContext, RichText, float, float, float, float, Paint, Transform, Alignment, Alignment)
draw(RenderContext, RichText, float, float, float, float, Paint, Transform, Alignment, Alignment)
Отрисовывает rich-текст с выравниванием и поддержкой inline-содержимого.
| Параметр | Тип | Описание |
|---|---|---|
context |
RenderContext |
Активный контекст рендера. |
text |
RichText |
Экземпляр RichText. |
x |
float |
Координата X. |
y |
float |
Координата Y. |
width |
float |
Ширина контейнера. |
height |
float |
Высота контейнера. |
paint |
Paint |
Стиль заливки. |
transform |
Transform |
Опциональная трансформация. |
horizontalAlignment |
Alignment |
Горизонтальное выравнивание. |
verticalAlignment |
Alignment |
Вертикальное выравнивание. |
TextEngine::drawInline(DrawScope, RichText, float, float, float, float, Paint)
drawInline(DrawScope, RichText, float, float, float, float, Paint)
Выполняет раскладку и отрисовку rich-текста с inline-контентом в DrawScope.
| Параметр | Тип | Описание |
|---|---|---|
draw |
DrawScope |
Целевой DrawScope. |
text |
RichText |
Экземпляр RichText. |
x |
float |
Координата X. |
y |
float |
Координата Y. |
width |
float |
Ширина контейнера. |
height |
float |
Высота контейнера. |
paint |
Paint |
Стиль заливки. |
TextEngine::drawInline(DrawScope, RichText, float, float, float, float, Paint, float)
drawInline(DrawScope, RichText, float, float, float, float, Paint, float)
Выполняет раскладку и отрисовку rich-текста с вертикальным смещением.
| Параметр | Тип | Описание |
|---|---|---|
draw |
DrawScope |
Целевой DrawScope. |
text |
RichText |
Экземпляр RichText. |
x |
float |
Координата X. |
y |
float |
Координата Y. |
width |
float |
Ширина контейнера. |
height |
float |
Высота контейнера. |
paint |
Paint |
Стиль заливки. |
textVisualOffset |
float |
Визуальное вертикальное смещение. |
TextEngine::usesPositionalBrush(RichText)
usesPositionalBrush(RichText)
Проверяет, использует ли какой-либо фрагмент кисть с привязкой к координатам.
| Параметр | Тип | Описание |
|---|---|---|
text |
RichText |
Экземпляр RichText. |
Возвращает boolean: true, если есть позиционная кисть..
TextEngine::alignedStart(float, float, float, Alignment)
alignedStart(float, float, float, Alignment)
Вычисляет начальную координату элемента с учётом доступного места и выравнивания.
| Параметр | Тип | Описание |
|---|---|---|
start |
float |
Базовая координата смещения. |
available |
float |
Доступное пространство. |
size |
float |
Размер элемента. |
alignment |
Alignment |
Режим выравнивания. |
Возвращает float: Выровненная начальная позиция..