X11中的消除锯齿文本

Jay*_*rod 6 linux x11 antialiasing xlib

我正在尝试使用Xlib来深入了解Linux GUI程序的工作原理.我写了一个简单的程序,在一个窗口中显示"Hello,world",但它看起来很不合时宜,因为文本没有消除锯齿.

在X11中显示消除锯齿文本的最佳方法是什么?如何在GTK,Qt和其他工具包中实现抗锯齿?

Ada*_*ode 6

FreeType处于错误的堆栈级别.它只允许你在某些地方绘制字形.通常,您至少需要一种字体选择机制(由Fontconfig提供)和一个整形引擎(由Pango或Qt提供).

Pango和Qt都使用废弃的FreeType布局引擎的分叉版本,但这正在与HarfBuzz项目协调.

另见Behdad Esfahbod撰写的这篇文章:Pango vs HarfBuzz,以及这篇更长更全面的文档:文本渲染状态.


Wyz*_*a-- 5

X协议的文本呈现工具不支持抗锯齿,现在使用不多.(我认为原因是X字体协议没有任何alpha通道的位置.)

GTK和Qt使用FreeType库在客户端渲染文本,得到带有alpha通道的像素图作为结果.如果X服务器支持RENDER扩展,则客户端可以将该pixmap发送到服务器,以使用其alpha通道将其混合到显示器上.如果X服务器不支持RENDER,则客户端必须检索要显示文本的屏幕区域(基本上采用小屏幕截图),进行alpha混合客户端,并发送生成的不透明像素图返回要显示的X服务器.