Чтение онлайн

на главную - закладки

Жанры

Программирование в X Window средствами Free Pascal

Семериков С. А.

Шрифт:

Как мы уже говорили ранее, текст, как правило, рисуется шрифтом, выбранным в графическом контексте. X версии 11.4 и ниже поддерживает только растровые шрифты, а начиная с версии 11.5 и выше X Window имеет также и векторные шрифты.

В растровых шрифтах каждому символу соответствует некоторый битовый шаблон, определяющий порядок закраски пикселей при рисовании. Если бит шаблона равен 1, то соответствующий элемент изображения закрашивается цветом переднего плана GC, если же он равен 0, то он закрашивается либо цветом фона, либо вообще не рисуется.

В векторных шрифтах каждый символ описывается последовательностью линий, которые, будучи составлены вместе, и дают его изображение. Размеры символов варьируются от шрифта к шрифту. Для их описания используется структура TXCharStruct. Сам шрифт описывается структурой TXFontStruct.

Перед тем, как выводить текст, используя тот или иной шрифт, последний должен быть загружен в X Window и выбран в графическом контексте.

Загрузка шрифта осуществляется процедурой XLoadFont. Она берет в качестве аргумента имя шрифта, находит его и возвращает программе соответствующий идентификатор. Этот идентификатор передается затем процедуре XSetFont, чтобы выбрать шрифт в GC. Заметим, что реально шрифт с данным именем загружается сервером лишь один раз. После этого при обращениях к XLoadFont с тем же именем шрифта, функция возвращает ссылку на шрифт, уже находящийся в памяти компьютера.

По умолчанию X ищет файл со шрифтом в директории /usr/lib/X11/fonts. Программист может задать дополнительные директории для поиска с помощью процедуры XSetFontPath.

Имя шрифта в X начинается с "-" и состоит из двух частей. Между ними стоит "-". В свою очередь, каждая из частей состоит из полей-слов, разделенных "-".

• В первой части указывается следующее:

1. изготовитель шрифтам (foundry), например adobe;

2. семейство шрифта (font family), например courier, helvetica;

3. жирность шрифта (weight), например bold;

4. наклон шрифта (slant);

5. ширина букв шрифта (width).

• Во второй части указывается следующее:

1. размер шрифта в пикселах (pixels);

2. размер шрифта в десятых долях "точки" ("точка" равна 1/72 дюйма);

3. горизонтальное разрешение устройства, для которого разработан шрифт (horizontal resolution in dpi); величина измеряется в числе точек на дюйм;

4. вертикальное разрешение устройства, для которого разработан шрифт (vertical resolution in dpi); величина измеряется в числе точек на дюйм;

5. тип шрифта (spacing); возможные значения параметра следующие: m– шрифт с фиксированной шириной символов; p– пропорциональный шрифт с переменной шириной символов;

6. средняя ширина символов шрифта, измеренная в десятых долях пикселя (average width);

7. множество символов шрифта в кодировке ISO (International Standards Organisation) или других (character set).

Ниже приведен пример названия шрифта.

– adobe-courier-bold-o-normal-10-100-75-75-m-60-iso8859-1

Части имени могут заменяться символом "*" или "?". В этом случае X подбирает шрифт, сличая имена имеющихся шрифтов с предоставленным шаблоном, так, как это делается при поиске файлов в UNIX. Например, шаблону

*charter-medium-i-*-240-*

соответствуют имена

– hit-charter-medium-i-normal-25-240-75-75-p-136-iso8859-1

– hit-charter-medium-i-normal-33-240-100-75-p-136-iso8859-1

Названия шрифтов, доступных в системе, хранятся в соответствующей базе данных. Получить список имен шрифтов можно с помощью процедуры XListFonts или XListFontsWithInfo. Список шрифтов, возвращаемый этими функциями, должен быть освобожден вызовом XFreeFontNames.

Некоторые шрифты, такие как "fixed" или "9x15", доступны всегда.

Получить информацию о загруженном шрифте можно с помощью функции XQueryFont, которая возвращает заполненную структуру типа XFontInfo. Одновременно загрузить шрифт и получить информацию о нем можно с помощью процедуры XLoadQueryFont.

Когда информация о шрифте больше не нужна, ее следует освободить с помощью XFreeFontInfo. Когда становится не нужен и сам шрифт, последний надо "сбросить", обратившись к процедуре XUnloadFont. Функция XFreeFont объединяет в себе XFreeFontInfo и XUnloadFont.

Следующий фрагмент кода загружает шрифт "courier", создает GC и выводит с его помощью строку "Hello, world!".

var

 prDisplay: PDisplay;

 prGC: TGC;

 nWnd: TWindow;

 prFontInfo: PXFontStruct;

(* Загружаем шрифт *)

prFontInfo:= XLoadQueryFont(prDisplay, '*-courier-*');

if (prFontInfo = NIL) then 
 begin

 writeln('Font not found!');

 halt(1);

end;

(* Создаем GC и рисуем строку *)

prGC:= XCreateGC(prDisplay, nWnd, 0, NIL);

XSetForeground(prDisplay, prGC, XBlackPixel(prDisplay, 0));

XSetFont(prDisplay, prGC, prFontInfo^.fid);

XDrawString(prDisplay, nWnd, prGC, 10, 50, 'Hello, world!',
strlen('Hello, world!'));

XFreeGC(prDisplay, prGC);

(* "Сбрасываем" шрифт *)

XFreeFont (prDisplay, prFontInfo);

Для отображения символов кириллицы необходимо использовать один из локализованных шрифтов в той кодировке, которая поддерживается вашей системой (как правило, это koi8-r (koi8-u)). По умолчанию загружается первый из шрифтов, соответствующий шаблону, поэтому для корректного отображения текста с кириллицей необходимо в шаблоне указывать кодировку.

Поделиться:
Популярные книги

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Портрет дьявола: Собрание мистических рассказов

Скотт Вальтер
Проза:
классическая проза
8.09
рейтинг книги
Портрет дьявола: Собрание мистических рассказов

Боярич Морозов

Шелег Дмитрий Витальевич
3. Наследник старого рода
Фантастика:
героическая фантастика
боевая фантастика
альтернативная история
7.12
рейтинг книги
Боярич Морозов

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Идеальный мир для Лекаря 19

Сапфир Олег
19. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 19

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

ЖЛ 9

Шелег Дмитрий Витальевич
9. Живой лёд
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
ЖЛ 9

Наномашины, внучок! Том 2

Новиков Николай Васильевич
2. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, внучок! Том 2

Я Гордый часть 5

Машуков Тимур
5. Стальные яйца
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Я Гордый часть 5

Наследник с Меткой Охотника

Тарс Элиан
1. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник с Меткой Охотника

Древесный маг Орловского княжества 6

Павлов Игорь Васильевич
6. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 6