看到Vim7.3里面说去掉了gtk1的支持,顺便自己一直想写一个图形的记忆单词的软件,所以就心血来潮想先简单了解一些这个鼎鼎大名的图形库。
前段时间桌面图形界的事挺多,像什么wayland开发加速,还有我最喜欢的xfce4.8发布(可惜不能用在freebsd下),Nokia和微软抱团刷副本直接让人们对Qt的前景产生怀疑,而恰好是当天Gtk+发布了3.0,不知道是不是巧合。让本身对图形一窍不通的我稍微对这方面产生了一些关注,可以说是这一系列的事件就是这篇文章的前因吧,至于开了一个头,以后肯定会继续在图形发面继续研究一些东西啦,所以又有新的领域可以写了,嘛,这会不会太轻浮了一点。。。
gtk库最早是作为gimp(GNU Image Manipulation Program)开发工具而存在的,这可以从gtk(GIMP Toolkit)的名字可以看出来,gtk是在gdk(GIMP Drawing Kit)上构建的,而gdk本身又是对最底层的低级图形函数的一层封装,比如X11下的Xlib,听说最新的gtk3已经不依赖xlib了,所以就需要像wayland这样的新图形框架提供另外一个底层,这样就做到了普遍的兼容性。其实大部分软件也一样都是这样一层层的抽象堆彻出来的。
gtk主要依赖四个库。GLib,Pango,Cairo,ATK。GLib主要负责提供一些通用的底层功能,比如较通用的数据结构,线程,事件循环等等。我今天看的时候把它和GNU的glibc搞混了,还奇怪glibc怎么归Gnome管了。。。Pango则主要负责渲染文字,强调I18n。Cairo是个大名鼎鼎的2D图形库,反正我看到关于桌面的讨论都会提到它,不过我对它没什么了解╮(╯3╰)╭。最后一个gtk的网站说是提供程序的可访问性用的,估计是类似gnome的通知图标那一类。
和其他优秀的图形库一些Gtk+有各种主流语言的绑定,而且可以在大部分操作系统上跑,我看TualatriX的博客,最新的gtk+3竟然有五个后端X11、Win32、Mac(Quartz)、HTML 5和Wayland。看来真是有着美妙的前景,不过目前让我最发愁的是freebsd上可用的桌面似乎越来越少了,本来我挺喜欢xfce,速度快界面简洁并且提供最基本的附件,不过随着halt逐渐不被各桌面支持,而且现在fb社区也没有什么进一步的动作,看了我是得长时间的使用xfce4.6了。
看着兴致起来了,就打算装个pygtk玩玩,在port里居然搜不到,我就打算用easyinstall来装,easyinstall pygtk了几次,发现中途都会没速度,反正怎么也下不下来。自己人肉把它的地址输入到浏览器下载,发现有一个重定向,而且速度巨慢,fetch下到本地。xjvf解压tar.bz2包,然后在解压的目录里easyinstall .,发现还是装不上。真郁闷,又回pygtk的官网上看了半天,也没看出什么头绪。回头想想,port不可能没有pygtk啊,于是仔细找了找
make search name=gtk | grep Port | more
果然在/usr/port/x11-toolkit/py-gtk2里,唉,为自己的粗心让费掉几个小时。