Перейти к содержанию

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: Выровненная начальная позиция..