你将如何在Linux上构build“像素完美”的graphics用户界面?

我想build立一个GUI,每个像素都在我的控制之下(即不使用像GTK +提供的标准小部件)。 雷诺兹是我期望生产的一个很好的例子。

是否要走向Xlib或XCB级别是最好的方法,还是有可能通过像GTK +(甚至是PyGTK)这样的更高级别的框架来实现? 我应该看看开罗的绘图?

如果可能的话,我想用Python或Ruby来工作,但C也不错。

使用Clutter工具包(或其他一些画布构件/工具包),您可以构建这样一个接口。 我不会建议去Xlib / XCB或DrawingArea的级别,因为它需要实现画布中已经存在的许多通用功能。

在X中,这种方法存在一个问题,您可能没有考虑到这个问题。 字体大小以点为单位(一点是1/72英寸),因此(像素)大小随分辨率和显示器大小而变化。 文本字符串的长度也会根据语言的不同而不同,所以确定按钮和按钮的大小是不太可能的。 为X设计的通用GUI工具包就是为此而设计的。 除此之外,为GTK编写自己的主题引擎很容易,它可以完全按照您的需要绘制所有小部件(使用Cairo [1]或GDK [2]),并使您的应用程序始终使用该主题。 也许你的应用程序也可以根据DPI设置默认的字体大小(以点为单位),以总是以像素为单位获得相同的大小(当然不会让你的应用程序变得可翻译)。

至少有几个图形用户界面使用基于SDL [3]的像素完美方法,例如AGAR [4],PicoGUI [5]和Guichan [6]。 他们中的大多数是用C ++编写的,还有一些用C编写的,据我所知,他们都没有绑定Python和Ruby。 然后使用SDL,您只能有一个顶层窗口,这意味着您的应用程序(或您使用的GUI工具包)必须自行管理各种对话框等。 但我想这就是你想要的。

[1] cairographics.org/
[2] library.gnome.org/devel/gdk/unstable/index.html
[3] http://www.libsdl.org/
[4] libagar.org/
[5] picogui.org/
[6] guichan.sourceforge.net/wiki/index.php/Main_Page

那么你可能会想要像pygame那样的东西。

GTK和PyGTK可能是使用错误的工具。 这不是不可能的,因为你可以让你的整个应用程序成为一个大的gtk.DrawingArea (这是一个真正有意义的例子是Gargoyle ),但是对于任何一种复杂的GUI,你都会发疯。

用最简单的话来说,你需要一些东西给你一个边界矩形和自由的统治来绘制你想要的东西。 这样的对象通常被称为“画布”。 我之前(在Ruby中)使用通过Fox工具包提供的FXCanvas类来完成此工作,但也有其他工具可用(例如wxWidgets,但我对此工具箱没有个人经验)。

但是请注意。 像这样的低级接口提供了很大的灵活性,但是他们也需要更多的工作。