代码之家  ›  专栏  ›  技术社区  ›  splicer

如何在linux上构建一个“像素完美”的gui?

  •  7
  • splicer  · 技术社区  · 15 年前

    我想建立一个图形用户界面,每个像素都在我的控制之下(即不使用像gtk+提供的标准小部件)。 Renoise 是我想要生产的一个很好的例子。

    降到xlib或xcb级别是最好的方法吗,还是可以通过更高级别的框架(比如gtk+)(甚至pygtk)来实现?我应该看看开罗的画吗?

    如果可能的话,我想用python或ruby,但是c也很好。

    6 回复  |  直到 12 年前
        1
  •  7
  •   dmitry_vk    15 年前

    Clutter toolkit(或其他一些canvas widget/toolkit)您可以构建这样的接口。我不建议使用xlib/xcb或drawingarea级别,因为它需要实现已经存在于画布中的许多通用功能。

        2
  •  5
  •   SO Stinks ennuikiller    14 年前

    在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_页面

        3
  •  3
  •   Ignacio Vazquez-Abrams    15 年前

    你可能会想要 pygame 然后。

        4
  •  1
  •   ptomato    15 年前

    gtk和pygtk可能是错误的工具。这不是不可能的,因为你可以让你的整个应用程序 gtk.DrawingArea (一个有意义的例子是 Gargoyle )但对于任何复杂的图形用户界面,你都会疯掉的。

        5
  •  1
  •   Florian Diesch    15 年前

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

        6
  •  1
  •   bta    15 年前

    最简单的说,你需要一些东西,给你一个边界矩形和自由统治权,以画成你想要的。这种物体通常被称为“画布”。我以前(在ruby中)使用过fxcanvas类 Fox toolkit ,但也有其他可用的工具(例如wxwidgets,但是我没有使用这个工具包的个人经验)。

    不过,还是要小心。像这样的低级接口提供了很大的灵活性,但它们也需要您做更多的工作。