6

我正在尝试使用 Xlib 来更深入地了解 Linux GUI 程序的工作原理。我编写了一个在窗口中显示“Hello, world”的简单程序,但它看起来相当不合时宜,因为文本没有抗锯齿。

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

4

3 回答 3

6

X 协议的文本渲染工具不支持抗锯齿,而且现在使用得不多。(我认为原因是 X 字体协议没有任何用于 Alpha 通道的位置。)

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

于 2009-12-11T01:29:22.777 回答
6

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

Pango 和 Qt 都使用了一个废弃的 FreeType 布局引擎的分叉版本,但这正在被整合到HarfBuzz项目中。

另请参阅 Behdad Esfahbod 的这篇文章:Pango vs HarfBuzz,以及这个更长更全面的文档:文本渲染状态

于 2009-12-11T01:53:59.660 回答
4

自由类型。GTK+ 使用 Pango,Qt 有自己的文本布局库,但最终都使用 FreeType,并且一些应用程序(例如启用了抗锯齿字体的 XTerm)通过 Xorg 附带的较低级别的 libXft 库使用 FreeType。

于 2009-12-11T00:46:49.403 回答