2014-01-19 2 views
4

Как нарисовать текст, используя barebone X11 соединение через сокет?голые кости x11 как рисовать truetype или другой сглаженный шрифт?

Я подключаюсь к серверу x11 через сокет и обрабатываю протокол вручную. Я не использую Xlib или XCB, оставляю в покое Qt, GTK или даже Freetype. У меня есть одна нерешенная проблема, я не могу рисовать шрифты, кроме древних растровых шрифтов. Я хотел бы сделать что-то вроде FreeSans или других шрифтов с поддержкой Unicode с поддержкой субпиксельной ЖК-панели, но используя только встроенную функциональность x11. Вероятно, используя некоторое расширение x11. Но какой? Какую функцию использовать? Как выбрать шрифт, локально или на сервере? Может ли X11 визуализировать шрифт для меня, используя предоставленную информацию о стиле, включая цвет, цвет фона, название шрифта, размер и оформление?

+0

Видя, как вы заново изобретать колесо, почему бы не использовать тупой рок? :-) Попробуйте использовать WireShark для захвата сообщений X11, отправленных/полученных «привет, мир!». в каком-нибудь наборе инструментов, который * позволяет * легко использовать шрифты UniCode с субпиксельной рендерингом. (Спросите глупый вопрос, получите глупые предложения) –

+0

, но многие приложения будут отображать шрифт на стороне клиента, используя freetype или аналогичную библиотеку, я бы хотел декодировать пакеты, если бы знал, что приложение, которое определенно делает то, что я ищу, может вы предлагаете такое приложение? – exebook

+0

напишите сами в (Unicode, Sub-pixel aware -supporting) инструментарий. Затем захватите трафик от него. Если вы не можете/не будете этого делать, тогда у вас нет бизнеса, пишущего приложение, использующее протокол X11. –

ответ

4

Нет, X не отображает для вас шрифты, но может отображать последовательности сглаженных pixmap «Символы». Если вы хотите использовать только протокол X, вам придется отображать все на стороне клиента (большинство библиотек делают это в любом случае, как правило, с помощью библиотеки cairo).

Что я предлагаю попробовать: 1) предварительно визуализировать все глифы для вашего шрифта локально с помощью FreeType; 2) Загрузка шрифтов с помощью запроса CreateGlyphSet Xrender; 3) Нарисуйте строку с помощью запроса CompositeGlyphs8/16/32. Прочтите раздел 12 «Оформление Glyph» XRender documentation. Каждый глиф имеет собственное значение смещения, однако нет способа определить пары кернинга.

Вам также придется обращаться с другими сложностями (справа налево, по вертикали и т. Д.). Это очень сложная задача, чтобы сделать 100% правильной, но безрезультатные случаи вполне выполнимы и хороший образовательный проект.

Вы можете посмотреть на примере сокеты + Xrender связи в моей JavaScript х клиентской библиотеки: https://github.com/sidorares/node-x11

+1

отличная привязка работы x11 к узлу. Вы думали о внедрении расширения Xft (freetype на стороне сервера)? http://keithp.com/~keithp/talks/xtc2001/paper/ Я также видел протокол PDF. – exebook

+2

Я думаю о расширении «серверной стороны javascript», чтобы вы могли загружать скрипты в X11. Не так уверен в расширении freetype - вы можете добиться всего, что он делает с XRender и созданием локального глифа –

+0

Я хотел бы добавить функциональность шрифтов в node-x11 (или поверх нее - https://github.com/sidorares/ ntk), но у меня, вероятно, будет API, похожий на веб-шрифты –

Смежные вопросы