Содержание | Список структур |
Эта структура как правило используется для получения информации о загружаемом или загруженном шрифте.
Формат структуры:
typedef struct { XExtData *ext_data; Font fid; unsigned direction; unsigned min_char_or_byte2; unsigned max_char_or_byte2; unsigned min_byte1; unsigned max_byte1; Bool all_chars_exist; unsigned default_char; int n_properties; XFontProp *properties; XCharStruct min_bounds; XCharStruct max_bounds; XCharStruct *per_char; int ascent; int descent; } XFontStruct;
Поле ext_data предназначено для храния дополнительной служебной информации.
Поле fig хранит идентификатор шрифта, по которому в структуре представлена информация.
Поле direction указывает на направление вывода символов. В обычном случае это FontLeftToRight - слева направо, однако, поскольку есть языки, в которых написание ведется справа налево, в этом поле может быть также значение FontRightToLeft - справа налево. Вертикальное направление вывода символов протоколом X-Window не поддерживается.
Поля min_char_or_byte2, max_char_or_byte2, min_byte1 и max_byte1 описывают набор символов, присутствующих в шрифте.
В системе X-Window существует поддержка как однобайтовых наборов символов, так и матриц с выделением двух байт на символ, а также 16-разрядных наборов символов. Любое из этих представлений символов может использоваться в шрифтах, однако текстовые запросы с однобайтовыми символами могут обращаться только к 256 символам двухбайтовых и 16-разрядных наборов.
При двухбайтовой организации расположение символов выглядит как двумерная таблица, при использовании которой первый байт (поля byte1) привязывается к номерам строк в таблице, а второй байт (поля byte2) к номерам столбцов.
Поля min_byte1 и max_byte1 указывают на диапазон используемых строк в таблице символов. min_byte1 - на первую строку таблицы, которая содержит символы, а max_byte1 - на последнюю. В случае однобайтового шрифта в этих полях будет записаны нулевые значения, что соответствует одной строке таблицы.
Поля min_char_or_byte2 и max_char_or_byte2 указывают на диапазон используемых столбцов в таблице символов. В совокупности с предыдущей парой полей эта пара образует в таблице прямоугольную область, в которой определены символы. В случае однобайтового шрифта поля min_char_or_byte2 и max_char_or_byte2 указывают на минимальный и максимальный код символа в шрифте.
Если min_byte1 и max_byte1 не равны нулю, то оба поля min_char_or_byte2 и max_char_or_byte2 будут хранить значение меньше 256 и двухбайтовый индекс символа будет получаться из линейного индекса символа в шрифте N следующим образом:
byte1 = int(N/D) + min_byte1; byte2 = mod(N/D) + min_char_or_byte2;где
D = max_char_or_byte2 - min_char_or_byte2 + 1; int(N/D) - целая часть от деления N на D; mod(N/D) - остаток от деления N на D;
что фактически делает индексацию только в пределах прямоугольной области, заданной полями min_byte1, max_byte1, min_char_or_byte2 и max_char_or_byte2. Позиции в таблице вне этой прямоугольной зоны будут недоступны.
Поле per_char является списком геометрических параметров символов в шрифте. Количество элементов в списке соответствует количеству символов, присутствующих в шрифте. Если в этом поле записано значение NULL, то это означает, сто параметры для всех символов в шрифте одинаковые и представлены в полях min_bounds и max_bounds.
Если в поле all_chars_exist записано значение True, все символы в списке per_char имеют ненулевой размер.
Поле default_char указывает на символ, который будет использоваться при попытке печати несуществующего в шрифте символа. Это 16-битный указатель символа. При использовании шрифта с двухбайтовым кодированием символов, поле default_char хранит byte1 в старшем байте, а byte2 в младшем байте. Следует иметь ввиду, что default_char просто является заглушкой для несуществующих символов, никакого вывода при печати несуществующих символов происходить не будет.
Поля max_bounds и min_bounds описывают максимальные и минимальные значения полей структуры XCharStruct в списке per_char Несуществующие символы не учитываются.
Левый верхний угол прямоугольника минимального размера, в который помещается наложение всех символов шрифта, выводимых в одно и тоже место с координатами (x,y) находится в точке с координатами
( x + min_bounds.lbearing, y - max_bounds.ascent )
Его ширина равна
max_bounds.rbearing - min_bounds.lbearing,
а высота равна
max_bounds.ascent + max_bounds.descent,
Поле ascent определяет вертикальный размер шрифта над линией основания. Оно используется для вычисления вертикального размера шрифта. Некоторые специфичные символы могут выходить за этот размер.
Поле descent определяет вертикальный размер шрифта под линией основания. Оно используется для вычисления вертикального размера шрифта. Некоторые специфичные символы могут выходить за этот размер.
Если линия основания находится на координате Y, шрифт будет занимать координаты от ( Y - ascent ) до ( Y + descent - 1 ) включительно. Обычно минимальный межстрочный интервал определяется как ascent + descent.
Поле properties является списком атрибутов, установленных для шрифта. Количество элементов в этом массиве указывается в поле n_properties. Для получения значений атрибутов можно воспользоваться функцией XGetFontProperty.
См. также: XCharStruct, XLoadFont, XUnloadFont, XQueryFont, XLoadQueryFont, XFreeFont, XGetFontProperty.
Содержание | Список структур |