您如何在Linux上构建“像素完美”GUI?

时间:2010-05-03 08:46:26

标签: linux user-interface gtk x11 xlib

我想构建一个GUI,每个像素都在我的控制之下(即不使用GTK +提供的标准小部件)。 Renoise是我想要制作的一个很好的例子。

最好的方法是采用Xlib或XCB级别,还是可以通过GTK +等更高级别的框架实现这一目标(甚至可能是PyGTK)?我应该在开罗看画吗?

如果可能的话,我想在Python或Ruby中工作,但C也很好。

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

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

至少有几个GUI使用这种基于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] www.libsdl.org/
[4] libagar.org/
[5] picogui.org/
[6] guichan.sourceforge.net/wiki/index.php/Main_Page

答案 2 :(得分:3)

你可能想要pygame之类的东西。

答案 3 :(得分:1)

GTK和PyGTK可能是错误的工具。这并非不可能,因为你可以让你的整个应用程序成为一个大的gtk.DrawingArea(这个实际上有意义的例子是Gargoyle)但是对于任何类型的复杂GUI你都会疯狂。 / p>

答案 4 :(得分:1)

http://www.oluyede.org/blog/writing-a-widget-using-cairo-and-pygtk-28/展示了如何使用PyGTK和Cairo创建一个简单的小部件。

答案 5 :(得分:1)

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

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