2011-06-13 61 views
2

我正在尝试开发一套用于在Linux中创建GUI的自定义库,包括窗口小部件,按钮等。因此,我现在正在学习使用X11来创建用户界面,以及其Xlib。我认识到在指定的位置有指定尺寸的大小的窗口,指定背景颜色,绘制点,矩形,圆弧的可能性。然而,当我画了我的第一圈,我真的很失望的事实,该圈是没有antialiased。我可以将每个像素看作一个正方形。使用Xlib启用抗锯齿

现在问题很简单。有没有什么办法可以告诉X:请在绘制之前对抗任何东西?或者我必须避免使用XDrawArc并使用为圆的每个点调用XDrawPoint的自定义函数?或者有第三种解决方案?

在此先感谢。

回答

4

简短答案是“否”。 Xlib不会执行反走样。

较长的答案是“您可以使用更高级别的API,如开罗图形”。没有必要推出自己的。

+0

开罗Craphics可能会做客户端光栅化和上传。如果你想继续使用X11,通常使用XRender。 – datenwolf 2011-06-14 09:44:53

+0

@datenwolf:我的理解是,开罗可以使用XRender。 – 2011-06-14 11:02:47

+0

是的,我可以这样做,如果编译有正确的选项。不过我有一个印象,OP希望尽可能接近X11。 – datenwolf 2011-06-14 11:47:23

2

您遇到的是X11核心协议的局限性;从技术上来说,完全可以向它添加抗锯齿功能,但是这没有发生。

取而代之的是XRender扩展,它提供了很好的抗锯齿基元。您还需要查看Xft以使用矢量字体渲染反锯齿文本。

0

您可以推出自己的抗锯齿算法。您只需要2个基元:1)绘制TrueColor点的函数(即,如果使用XCB,则为xcb_poly_point());以及2)循环。