Сглаженный текст в X11

Я экспериментирую с Xlib, чтобы глубже понять, как работают программы Linux с графическим интерфейсом. Я написал простую программу, которая отображает в окне «Hello, world», но она выглядит довольно анахронично, поскольку текст не сглажен.

Как лучше всего отображать сглаженный текст в X11? Как реализовано сглаживание в GTK, Qt и других инструментах?


person Jay Conrod    schedule 11.12.2009    source источник


Ответы (3)


Средства рендеринга текста протокола X не поддерживают сглаживание и мало используются в наши дни. (Я думаю, причина в том, что в протоколе шрифтов X нет места для альфа-канала.)

GTK и Qt рендерят текст в клиенте с помощью библиотеки FreeType, получая в результате растровое изображение с альфа-каналом. Если X-сервер поддерживает расширение RENDER, клиент может отправить это растровое изображение на сервер, чтобы оно смешалось с дисплеем, используя его альфа-канал. Если X-сервер не поддерживает RENDER, клиент должен получить область экрана, где должен отображаться текст (в основном, делая небольшой снимок экрана), выполнить альфа-смешение на стороне клиента и отправить полученное непрозрачное растровое изображение. обратно на X-сервер для отображения.

person Wyzard    schedule 11.12.2009
comment
Маркировка принята, так как она описывает то, что на самом деле происходит на низком уровне. Меня удивляет, что обработка шрифтов теперь полностью на стороне клиента. - person Jay Conrod; 11.12.2009
comment
Звучит так, как будто это будет менее эффективно, но из того, что я читал, на самом деле особой разницы нет. Да, клиент теперь должен отправлять обработанные текстовые растровые изображения на сервер, но ему больше не нужно запрашивать у сервера все данные о метриках шрифта, которые ему нужны при выполнении макета текста. Это также означает отсутствие уродливых строк XLFD. :-) - person Wyzard; 12.12.2009

FreeType находится на неправильном уровне стека. Это позволит вам рисовать глифы только в определенных местах. Обычно вам нужен как минимум механизм выбора шрифта (предоставляется Fontconfig) и механизм формирования (предоставляется Pango или Qt).

И Pango, и Qt используют разветвленную версию заброшенного механизма компоновки FreeType, но он согласовывается с HarfBuzz. проект.

См. также этот пост Бехдада Исфабода: Pango vs HarfBuzz и этот более длинный и полный документ: State of Text Rendering.

person Adam Goode    schedule 11.12.2009
comment
Статья State of Text Rendering была интересной для прочтения. Спасибо. - person Jay Conrod; 11.12.2009

FreeType. GTK+ использует Pango, а Qt имеет собственную библиотеку макета текста, но в конце концов оба они используют FreeType, а некоторые приложения (например, XTerm с включенными сглаженными шрифтами) используют FreeType через низкоуровневую библиотеку libXft, которая поставляется с Xorg.

person hobbs    schedule 11.12.2009