Шрифты и текст

Для вывода текста используются функции text, textf, textAlign и textSize. Смотрите их описание ниже. Цвет выводимого теста определяется функцией stroke.

Вы можете загружать и использовать собственные шрифты из файлов (TrueType или OpenType) при помощи функций createFont и textFont.

Прежде чем выводить текст на экран формируется его разметка — определяются координаты и размеры каждого символа. Это делается автоматически и не требует никаких дополнительных действий. Однако для больших текстов эта операция может занять некоторое время. И если вы хотите увеличить производительность своей программы, то можете выполнить разметку текста заранее вызвав функцию createTextLayout (или createTextLayoutf) и, затем, выводить её на экран функцией textLayoutDraw.

Функции:

void text(double x, double y, const char *text);

Вывести текст в заданной точке. Расположение текста относительно указанной точки задаётся функцией textAlign. Шрифт и размер задаются функциями textFont и textSize. Цвет текста задаётся функцией stroke. См. также textf, createTextLayout.

Параметры:

text — текст для вывода;
x, y — координаты начальной точки.

void textf(double x, double y, const char *format, ...);

Форматированный вывод текста в заданной точке. Форматирование текста устроено так же как и в стандартной функции printf. Расположение текста относительно указанной точки задаётся функцией textAlign. Шрифт и размер задаются функциями textFont и textSize. Цвет текста задаётся функцией stroke. См. также text, createTextLayoutf.

Параметры:

text — текст для вывода;
x, y — координаты начальной точки.

void textAlign(HAlign hor, VAlign vert);

Установить расположение текста относительно начальной точки (см. функцию text)

Параметры:

hor — горизонтальное расположение начальной точки текста, может принимать значения:
    HALIGN_LEFT — начальная точка находится по левому краю текста;
    HALIGN_CENTER — начальная точка находится в середине текста;
    HALIGN_RIGHT — начальная точка находится по правому краю текста.
vert — вертикальное расположение начальной точки текста, может принимать значения:
    VALIGN_TOP — начальная точка находится по верхнему краю текста;
    VALIGN_CENTER — начальная точка находится в середине текста;
    VALIGN_BOTTOM — начальная точка находится по нижнему краю текста.

void textSize(double size);

Установить размер текста (см. функцию text).

Параметры:

size — размер текста в пикселях.

Font createFont(const char *path);

Загрузить шрифт из файла. Функция возвращает значение типа Font, которое является адресом в памяти — указателем на описание шрифта внутри библиотеки Helianthus.

Данная функция только загружает шрифт в память, для того чтобы писать текст этим шрифтом на экране вам нужно вызвать ещё и функцию textFont. Вы может иметь множество загруженных шрифтов в программе и переключать их функцией textFont.

См. также fontDestroy. и createFontFromMemory.

Параметры:

path — путь к файлу шрифта.

Font createFontFromMemory(const void *data, int size);

Создать шрифт из байтов файла шрифта уже загруженных в оперативную память. Функция возвращает значение типа Font, которое является адресом в памяти — указателем на описание шрифта внутри библиотеки Helianthus. См. также fontDestroy и createFont.

Параметры:

data — указатель на первый байт данных шрифта;
size — количество байтов.

void fontClone(Font font);

Создать новый шрифт из ранее загруженного — сделать копию.

void fontDestroy(Font font);

Выгрузить шрифт из памяти.

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на шрифт. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на шрифт. Вы можете занести в эту переменную другой шрифт, но использовать старое значение переменной больше нельзя это приведёт у ошибкам и непредсказуемому поведению программы.

void textFont(Font font);

Выбрать ранее загруженный из файла шрифт для вывода текста (см. функции createFont и text). Вернуть стандартный шрифт можно командой textFontDefault.

Параметры:

font — шрифт загруженный функцией createFont.

void textFontDefault();

Вернуть стандартный шрифт для вывода текста. Отменяет действие функции textFont.

TextLayout createTextLayout(const char *text);

Создать разметку для заданного текста. Разметка определяет координаты и размер каждого символа текста. Разметка запоминает действующий на момент её создания шрифт (textFont) и выравнивание (textAlign), и, рисование данной разметки будет производиться только этим шрифтом. Однако, вы можете менять размер шрифта (textSize) и его цвет (stroke) непосредственно перед выводом данной разметки на экран. Вы можете узнать ширину (textLayoutGetWidth) и высоту (textLayoutGetHeight) текстового блока, а также выводить на экран весь текст (textLayoutDraw) или отдельные его части (textLayoutDrawSubstr) с применением разных способов заливки.

См. также createTextLayoutEx, createTextLayoutf, textLayoutDestroy.

TextLayout createTextLayoutEx(const char *text, int length);

Создать разметку для заданного текста, точно так же как и createTextLayout. Разница лишь в том, что данная функция создаёт разметку не для всего текста, а только для указанного количества его байтов.

См. также createTextLayoutf, textLayoutDestroy.

TextLayout createTextLayoutf(const char *format, ...);

Сформировать текст по заданному формату и создать разметку для этого текста. Форматирование текста устроено так же как и в стандартной функции printf. Подробнее о разметке текста смотрите в описании функции createTextLayout. См. также textLayoutDestroy.

void textLayoutDestroy(TextLayout layout);

Удалить разметку из памяти. См. также createTextLayout.

Важно: Скорее всего у вас в программе останется переменная в которой хранился указатель на разметку. Этот указатель станет недействителен — будет указывать на неопределённую область памяти — не на разметку. Вы можете занести в эту переменную другую разметку, но использовать старое значение переменной больше нельзя это приведёт к ошибкам и непредсказуемому поведению программы.

void textLayoutDraw(TextLayout layout, double x, double y);

Вывести ранее созданную текстовую разметку на экран в заданных координатах. См. также createTextLayout и textLayoutDrawSubstr.

void textLayoutDrawFrom(TextLayout layout, double x, double y, int start);

Вывести в заданных координатах часть текста разметки начиная от заданного символа (параметр start) до конца текста. См. textLayoutDraw, textLayoutDrawSubstr, createTextLayout.

void textLayoutDrawSubstr(TextLayout layout, double x, double y, int start, int length);

Вывести в заданных координатах часть текста разметки длиной length начиная от start. См. textLayoutDraw, textLayoutDrawFrom, createTextLayout.

double textLayoutGetLeft(TextLayout layout);

double textLayoutGetTop(TextLayout layout);

Данные функции возвращают смещение верхнего левого угла границы текстового блока (см. рисунок) относительно базовой точки с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout.

double textLayoutGetWidth(TextLayout layout);

Возвращает ширину текстового блока с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout, textLayoutGetTop.

double textLayoutGetHeight(TextLayout layout);

Возвращает ширину текстового блока с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout, textLayoutGetTop.

double textLayoutGetTopAscenderLine(TextLayout layout);

Возвращает координату верхней линии выносных элементов строчных букв (ascender-line) первой строки текстового блока с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout, textLayoutGetTop.

double textLayoutGetTopXLine(TextLayout layout);

Возвращает координату средней линии (верхняя граница строчных букв, x-line) первой строки текстового блока с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout, textLayoutGetTop.

double textLayoutGetBottomBaseline(TextLayout layout);

Возвращает координату базовой линии последней строки текстового блока с учётом действующего в данный момент размера шрифта (textSize). См. также createTextLayout, textLayoutGetTop.

int textLayoutCursorUp(TextLayout layout, int cursor);

Возвращает порядковый номер символа находящегося в тексте непосредственно над заданным символом. См. также textLayoutCursorDown и createTextLayout.

int textLayoutCursorDown(TextLayout layout, int cursor);

Возвращает порядковый номер символа находящегося в тексте непосредственно под заданным символом. См. также textLayoutCursorUp и createTextLayout.

double textLayoutCursorGetX(TextLayout layout, int cursor);

Возвращает координату X левого нижнего края заданного символа. См. также textLayoutCursorGetY и createTextLayout.

double textLayoutCursorGetY(TextLayout layout, int cursor);

Возвращает координату Y левого нижнего края заданного символа. См. также textLayoutCursorGetX и createTextLayout.

double textLayoutCursorGetHeight(TextLayout layout, int cursor);

Возвращает высоту заданного символа. См. также textLayoutCursorGetX, textLayoutCursorGetY и createTextLayout.