GNOME中的图形

什么是GTK+?

GTK+ 是Gimp Toolkit(Gimp工具包)的缩写。最初是作为Gimp计划的一部分而写成的,但是现在已经发展成为非常出色的通用开发工具.更多信息请看:http://www.gtk.org

GTK+在GNOME中起什么作用?

GTK+是GNOME应用程序用来与用户交互的接口。类似于CDE中的Motif,KDE中的QT,或者Win32中的"the-widget-set-which-has-no-name"。

GTK+支持哪些语言?

在很多编程语言中都可以写出GTK+程序!您的谦卑的本FAQ 作者知道如下编程语言的支持:

C (最原始的)
C++
Objective C
Python
Perl 5
Scheme (Guile)
TOM
Gwydion Dylan

如果还有别的编程语言支持,请通知我们。 (看一下前面的Contact the FAQ Maintainer)

我们鼓励您添加对其他编程语言的支持,这也是一个挑战。值得注意的是,表中提到的语言支持都有了固定格式的通用的应用程序接口函数, 所以如果您想工作于新的语言支持,那么您也许要从这开始。

写完了这些之后,我不得不怀疑是否我们可以以某种方式使用CORBA来解决这个问题。 如果ORBit的开发者能够使本机的CORBA调用比一个普通的共享调用更节省系统资源,那么 何不开发CORBify GTK并且在为ORBit添加新的语言支持方面多做工作呢?据我所知, 一般认为CORBA对于大容量元素(如X调用等)来说过于“重量极”了。 嗨,别责怪我摒弃了这个疯狂的想法:我维护这个FAQ的原因就是我不会编程。

什么是imlib?

GNOME使用和GTK一起发行的imlib,一种X下的支持多种图形格式转换的面向编程者的图形库。 Imlib甚至可以使用外部的转换器如ImageMagick 或 pmbplus 将不知名的图形 格式转换成知名的图形格式,所以只要一种图形格式的转换器存在,那么你一定能够在 你的应用程序中使用这种图形格式! Imlib也支持多种位色,从24为真彩色到1位单色,并且对于编程者来说很明显,Imlib做智能的 色彩映像分配并且自动采用抖动技术以在您的显示器上达到最好的效果。 对于那些任何想在他开发的X程序中达到这种效果的人,或者那些由于当应用程序不得不分配私有的色彩映像 而忍受屏幕的抖动的人来说,它们将更喜欢这个特性。

关于imlib的更多的信息在 http://www.labs.redhat.com/imlib.

themes起什么作用?

themes允许您在不用重新编译的情况下改变GTK+应用程序的外观。最后,您可以 在一个给定的外观的情况下同时改变所有GTK+程序的themes。现在,您可以在启动时设置好themes。

如果想看一下经过主题装饰的程序的外观的一些例子,看一下: http://gtk.themes.org.

如何使themes工作?

OK,我已经使themes再我的主机上正确工作了,我的做法却有点粗暴。首先,你必须重新安装GTK。安装前先执行 "make uninstall" ,然后做以下的工作:

% cvs get -r themes-2 -d themes-gtk+ gtk+
% cd themes-gtk+
% ./autogen.sh --prefix=/opt/gnome && make && make install
% cd themes
% ./autogen.sh --prefix=/opt/gnome && make && make install

要作这项工作你需要安装最新的imlib;如果你由于没有定义 AM_PATH_GDK_IMLIB而产生编译错误, 那是因为imlib.m4没有找到,或者是因为你没有安装最新的imlib,或者是Autoconf m4文件的内容错误。 (请看 Autoconf)

这将产生一个包含有一个能使themes正常工作的GTK+版本。 现在,你需要做以下的工作。记住,在这些例子中,你应该将 "/opt/gnome"替换成你安装gnome的目录,可能跟下面的不一样。

% cd /opt/gnome/share
% mv gtkrc gtkrc.orig
% ln -s gtk/themes/$(theme)/gtkrc gtkrc

$(theme) 是gtk/themes的一个子目录;当前的是下面的情况:

Pixmap
Redmond95 (a Win95-like theme)
Notif (a Motif-like theme)
Metal

就是这些!当你做完这个符号链接后,所有的GTK程序将以那个themes启动。 你甚至可以使不同的程序在同一时间运行于不同的themes。 一个themes在程序运行期间起作用。

我更换themes太频繁了,以至于我做了一个很弱的 shell script 来代替我的工作。下面的就是:

#!/bin/sh

ls -l /opt/gnome/share/gtkrc

cd /opt/gnome/share/
test -f gtkrc && mv gtkrc gtkrc.orig

echo "select from the following theme choices:"
cd /opt/gnome/share/gtk/themes/
find -name gtkrc | sed 'sH^\.\/HHg;sH\/gtkrc$HHg'

cd /opt/gnome/share/
theme=
while ! test -f gtk/themes/$theme/gtkrc
do
   echo -n "Choose a theme: "
   read theme
done

rm -f gtkrc
ln -s gtk/themes/$theme/gtkrc gtkrc
ls -l /opt/gnome/share/gtkrc
        

什么是 OpenGL?

OpenGL是Silicon Graphics开发的基于 2D和 3D的应用程序编程接口,现在已经发展成为通用的工业标准。 从根本上讲,它是一个用于在屏幕上产生恰当的二维图形并产生一个三维视角的工具。引用SGI的FAQ就是:

OpenGL只是一个卖主中立的API,一个用来产生2D和3D图形函数的应用程序编程接口。包括模型,变换,颜色,光照,平滑底纹还有一些高级的特性如组织映射,NURBS,雾化,初级混合和移动模糊等技术。OpenGL可以在立即和保持(显示列表)两种图形模式下工作。

GNOME 使用一个叫做Mesa 的OpenGL API实现。Mesa 并非 OpenGL 本身,这是因为它是一个还没有通过OpenGL商业版权认证的 自由软件项目。但是它确实是OpenGL API 的忠诚的象征。Mesa 不是确切的 OpenGL(tm)正如 GNU/Linux 和 FreeBSD 不是 Unix(tm)。

关于Drag and Drop(拖放)的支持?

GNOME 现在用的是Xde 的拖 放协议。 XDE已经渐渐的被新的协议所取代。 这便是可以使X windows的与其他工具包的进行内部操作的拖放协议。 更多的信息: http://www.cco.caltech.edu/~jafl/xdnd/.