GIMP 工具包简介

作者:Otto Hammersmith

GIMP 工具包 gtk+ 是为 GIMP 编写的 GUI 库,作为 Motif 的替代品。(请参阅 Michael Hammel 在 LJ 十一月至一月刊上发表的 GIMP 系列文章。)虽然 gtk+ 是为 GIMP 创建的,但它可用于任何 GUI 应用程序。事实上,最近 gtk+ 发行版已从 GIMP 发行版中分离出来,以 anticipation 1.0 版本的发布。

gtk+ 的功能?

与所有 GUI 工具包一样,gtk+ 提供了各种 GUI 组件,也称为小部件。gtk+ 与 Motif 等工具包的区别在于它提供的小部件的广泛性。当然,所有工具包都提供某种形式的按钮小部件。gtk+ 还提供了诸如选项卡式笔记本和功能齐全的颜色选择器等组件,这些组件未包含在其他工具包的核心小部件中。图 1 和图 2 提供了屏幕截图,作为 gtk+ 小部件外观的示例。

An Introduction to the GIMP Tool Kit

图 1. 笔记本小部件

An Introduction to the GIMP Tool Kit

图 2. 颜色选择小部件

gtk+ 的另一个优点是它不限于单一语言。即使 gtk+ 是用 C 编写的,最初也旨在从 C 中使用,但它也绑定了许多其他语言。其中一小部分是 C++、Objective C、Python、Scheme、Perl——列表还在继续,并且经常添加新的语言。很可能已经有人开始为您喜欢的语言进行绑定。

最重要的是,gtk+ 采用 Library GNU Public License (LGPL) 许可,因此在编写软件时完全没有许可问题。

组成部分

GIMP 工具包由三个不同的层组成。每一层都有其独特的功能,并依赖于其下方的层。这三层是

  1. glib:这是一个支持库,在许多 C 程序中非常有用,即使是非 GUI 应用程序也是如此。它的大多数实用程序是通用的数据结构,例如链表 (GList) 和便捷功能,以简化 Unices 之间的移植,例如,围绕 mallocfree 的包装器 (gmallocgfree)。

  2. gdk:这个库基本上是 Xlib 和一些 Xt 之上的一个薄层,用于处理在 X 显示器上绘图和处理 X 事件的基础知识。拥有这个库意味着应用程序编写者永远不必看到底层的 X 库即可完成工作。该库还包含一些有用的函数,用于处理诸如处理计时器、轮询文件描述符等。

  3. gtk:这个库是 gtk+ 的核心,所有 GUI 元素都在其中定义。这个库严重依赖 gdk 和 glib 来完成其工作。

学习 gtk+

对于有 C 编程经验的人来说,gtk+ 应该很容易上手。gtk+ 的内部结构使用了一些高级 C 特性,如函数指针和一些结构体技巧,但应用程序编写者永远不需要担心 gtk+ 的内部结构。当然,任何使用其他 GUI 工具包(尤其是 Motif)的经验都会使学习 gtk+ 变得更容易。

长期以来,gtk+ 的唯一文档是源代码和示例应用程序 GIMP。幸运的是,http://levien.com/slow/gtk/ 上的 gtk+ 教程已经填补了这一空白。

但是,gtk+ 是一个不断变化的目标(仍在开发中),因此请保持警惕。如果对某些文档的有效性有任何疑问,请始终对照源代码仔细检查。而且,与往常一样,没有什么比实际编写代码来测试选项更好的了。

还有一个专门讨论 gtk+ 的邮件列表。要订阅,请发送邮件至 gtk-list-request@redhat.com,主题为“subscribe email-address”,并将 email-address 替换为您的电子邮件地址。

gtk+ 状态

在学习 gtk+ 时,请记住它仍在开发中,但对于重要的应用程序(例如 GIMP)来说,它肯定是可用的。仍然有很多小错误,甚至有一些您需要解决的主要错误。例如,在撰写本文时,文本小部件仍然需要大量工作。但在任何人以印刷形式阅读这篇文章之前的两个月或更长时间里,可能会发生很多事情。检查 gtk+ 库的当前状态并获取源代码的最佳位置是 http://www.gimp.org/gtk/。

Otto 是 Red Hat Software 的一名开发人员,目前正忙于 Red Hat Linux 的下一个版本。可以通过电子邮件 otto@redhat.com 与他联系。

加载 Disqus 评论