请教高手说一下gnome结构

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
kk123cn
帖子: 48
注册时间: 2007-10-22 21:48

请教高手说一下gnome结构

#1

帖子 kk123cn » 2008-05-24 13:39

本人想了解gnome结构,如果我在纯linux里建立自己gnome.开发环境已建好(其实本人想了解gnome 和kde的结构,好想在纯linux里修改源代码建立属于自己的类似gnome或kde的桌面。请不要误会我,我不是要源代码,kde的我在kde的网址看了结构说明,在gnome网上我没找到。)如果有人也想知道,我会把我有的资料共享,让想知道的人也能了解。
Ubuntu陌生的名字.
有一天认识了它.
随着认识的开始.
我越来越喜欢它.
全世界的礼物<-----------Ubuntu------------->
头像
kk123cn
帖子: 48
注册时间: 2007-10-22 21:48

#2

帖子 kk123cn » 2008-05-24 13:55

下面的模型是面向开发人员的KDE基本架构视图:
http://www.kdecn.org/whatiskde/devview.php
Ubuntu陌生的名字.
有一天认识了它.
随着认识的开始.
我越来越喜欢它.
全世界的礼物<-----------Ubuntu------------->
头像
kk123cn
帖子: 48
注册时间: 2007-10-22 21:48

#3

帖子 kk123cn » 2008-05-24 13:58

下面是各种开发kde的工具介绍:
http://www.kdecn.org/kdesoft/kde3/kdesdk.php
Ubuntu陌生的名字.
有一天认识了它.
随着认识的开始.
我越来越喜欢它.
全世界的礼物<-----------Ubuntu------------->
头像
kk123cn
帖子: 48
注册时间: 2007-10-22 21:48

#4

帖子 kk123cn » 2008-05-24 14:09

GNOME 是 GNU 网络对象模型环境 ( GNU's Network Object Model Environment ) 的缩写。GNOME 提出了一系列 UNIX 世界中没有的观点:

提供一个统一的用户界面
提供用户友好的工具, 以 UNIX 为基础, 更强有力.
产生一个组件编程和组件重用的标准.
提供一个统一的打印机制.
GNOME 的主要目标是提供一组用户友好的应用和一个易于使用的桌面环境。同大多数 GNU 的应用一样,GNOME 设计成可以在几乎全部的类 UNIX 操作系统中运行。

GNOME 的历史
GNU GNOME 计划是在 1997 年 8 月首次宣布, 之后经过大约一年的开发, 在整个世界范围内估计有二百名程序员参与了这个计划(的开发工作)。

最初召集开发者的通告通过多个讨论组规划了 GNOME 计划 : GNU announce mailing lists; Guile mailing list; and the GTK+ and GIMP mailing lists. 对(本)工程产生影响的主要是不同领域中, 具备专业特长, 热心于自由软件的人们, 包括图像处理和语言设计等。

GNOME 工作组坚定地工作, 为未来的自由软件开发建立一定的基础. GNOME 提供工具箱和可重复使用的组件, 以构造最终用户迫切需要的自由软件.

我们最近发行的版本是: GNOME 0.20, 第一个展示了整体印象的版本, 于 1998 年 5 月 发行. 然后是版本 0.25 -- "垂涎三尺的恒河猴 Drooling Macaque", 有了更多特色. 目前最新的公开版本是 GNOME 0.30, 命名为 "巨大的黑猩猩 Bouncing Bonobo".

GNOME 0.20 是第一个通过 CDROM 发行的版本:Red Hat 5.1 随带了一个专门的 GNOME 桌面环境预览版, 在北卡罗莱纳的 Linux 博览会上首次出演。

在 "Drooling Macaque" 版本之前, GNOME 软件发行工作是由小组中的两三个人协调. 这越来越成为一个显著的负担, 因为宝贵的时间被用来协调组织每一次发行工作. 我们已经尝试着使发行工作更加模块化, 对不同的软件包指定了维护者. 每一个(软件) 包维护者负责打包, 测试和发行, (他们的工作)独立于主干部分. 我们设想主干部分应该是核心库和桌面应用的核心部分. 到目前为止, 我们获得了一些成功, 但依然存在改进的余地. 我们将继续努力地"打磨"发行工作, 让(它)更简单.

在最近的 GNOME 版本 "Bouncing Bonobo" 中, Gnumeric, 一个 GNOME 的电子表格软件首次出现.

Red Hat 高级开发实验室
1998 年 1 月, Red Hat 宣布成立 Red Hat 高级开发实验室(RHAD). RHAD 的首个目标 是通过提供代码和程序员来帮助 GNOME, 同时协助管理工程资源.

由 RHAD 向 GNOME 提供的所有代码都是基于 GNU GPL 和 GNU LGPL 许可声明. 数个 GTK+ 和 GNOME 的开发者已经为 Red Hat 雇佣, 他们已经迅速地在 GNOME 的几个重要方面作出了贡献.

例如, Rasterman 已经实现了 "themes for GTK+"; "GTK+ themes" 允许用户改变 widgets 的外观. 这是通过将 widget 绘图例程从工具箱中抽象出来, 并放入可以 在运行时才调入的模块中实现. 因此用户可以直接改变应用的外观, 而无需关闭他们或 重新打开桌面.

GTK+ themes 充分可用, 已经有了许多实现. 在书写这篇文章时, 可用的(外观) 主题包括 Motif, Windows95, Metal, native-GTK+ 和基于位图驱动的一般应用. (具体请查看 "资源" 部分)

GNOME 所需要的GTK+ 工具箱的多种重要改进, 例如菜单中键盘导航代码和增强的 ``Drag and Drop'' 协议 (XDND 和 Motif DND), 是由 Owen Taylor 完成, 一个著名的 GTK+ 黑客, 他现在为 Red Hat 实验室工作.

目前 GNOME 各种应用也由 RHAD 产生或维护: 如 the Ghostscript front end (Jonathan Blandford), the GNOME Help Browser 和 the GNOME RPM interface (Marc Ewing 和 Michael Fullbright), the GNOME Calendar 和 GNOME Canvas (Federico Mena) 及 the ORBit CORBA 2.2 实现 (Elliot Lee).

其他捐助者
GNOME 计划早期的主要资金捐助者 GNU/Linux Debian 工作组, 同时 Alpha 布告栏 是由 Quant-X Service 和 G.m.b.H 提供帮助. 对他们的贡献, 我们在此表示深深地谢意.

一些关键的 GNOME 技术特征
GNOME 库提供了一个框架结构, 用于开发统一的应用和简化编程者的工作. 今后将会描述更多的技术特征. 下面将讨论一些目前开发中的 GNOME 库的技术特征.

Metadata(元数据)

一个问题是在桌面环境中常常需要一种机制 -- 存放一个文件的属性信息. 例如, 应用也许需要为某一种特定的执行文件帮定一个图标, 或者为一个由图像文件产生一个略图. 这些图标附属于主文件.

Macintosh OS, 例如, 他提供了一种方式将这些信息存放于 "资源分支" 文件中. 这种机制在 UNIX 环境中实现有些尴尬, 主要原因是那些"非元数据敏感"的应用会与元数据(metadata)信息失去同步.

GNOME metadata(元数据) 由 Cygnus 的 Tom Tromey 实现, 给出了设计约束和协调. (在他们的网站上有详细描述). 下面是 GNOME metadata 的特征列表:

每一个用户拥有自己对每一个文件的信息描述, 由自己管理. 系统在这之上提供缺省描述.
绑定信息根据文件特征决定, 正如 UNIX 命令 file 所做的一样.
可以使用正则表达式识别一类文件 : 例如, 正则式 *.\.gif$ 表示 gif 文件, 从而给它们一个缺省图标.
元数据系统可以充分, 紧密地与 GUI 方案配合, 而不仅仅是当前的命令行的组合.
大多数常用的文件可以继续运行, 无需元数据系统, 正如(它们)目前的状况.
现在, GNOME 已经有了大量的标准(元数据)文件属性. 例如, "View" 存放一个查看文件内容的动作; "Open" 存放类似编辑的动作; "Icon" , 它包括一个图标, 用来在桌面上显示该文件.

元数据类型属于 MIME.

Canvas(画布)

GNOME 提供了一个 Canvas(画布) widget, 它以 Tk 中出色的 Canvas 为原型. 这个 widget 简化了那些需要控制图象属性应用的工作. GNOME Canvas 最引人注目的特点是它提供了一个平滑的绘图区域, 在其上可以无抖动地插入和调整高级对象. 基本的放缩和滚动功能也是 Canvas(功能)的一部分.

插入到 Canvas 中的高级对象如同普通的 Widget 一样, (他们)可以收到 X 事件, 可以获取(输入)焦点, 可以获取鼠标等等. 与 Tk 中的(Canvas)类似, GNOME 中 的 Canvas 可以在运行期间使用类似 Tk 中的机制改变它们的属性.

GNOME Canvas 带有许多衍生自 GnomeCanvasItem 对象的东西: 直线, 矩形, 椭圆, 箭头, 折线, 及一个可以嵌入 GTK+ Widgets 的 Widget 容器. Canvas 的设计框架易于扩展. 可以证明它的扩展性的一个证据是, GNOME 的电子表格 就是以 Canvas 为核心驱动, 然后加以附加的, 电子表格特有的 CanvasItems.

注意, 当前 Canvas 使用 Gdk(一个对 Xlib 的简单包装)来绘图, 因此(图像的)质量和 特效局限于(这些工具), 下面是一些增强(这方面功能)的工作.

Raph Levien 正在为 Canvas 制作一个高级渲染驱动. 最初, 在他的 Type1 外廓字体编辑器 gfonted 中作为一个独立的 widget 出现, 在我写这篇文章时, 与 Canvas 整合的工作已经开始了.

这个驱动的特点包括(以下为术语, 望专家级的网友帮助):

Anti-aliased rendering of all items
Alpha transparency
Items for vector and bezier paths
Items for RGB and RGB plus alpha images
Vector operations, including clip (intersect), union, difference and stroke layout
PostScript Type1 font loading and rendering
这个驱动的设计目标是支持大多数 PostScript (alpha transparent)图像模型. 如此, 希望它是高质量图像应用的一个良好起点.

尽管有着实现所有的 anti-aliased 和 alpha-composited 特性的野心, 它的性能还是 不错, 可以与使用 原始 Xlib 驱动的 Canvas 相比.

他的代码将尽快地融合入 Canvas 主要代码.

独立于窗口管理器

GNOME 不依赖于任何一个特别的窗口管理器 -- 任意一个目前的窗口管理器都可以. GNOME 为窗口管理器制定了提示, 窗口管理器实现(它们)可以给予用户更好的融合入桌面的感觉,但是这些(提示)不是必须(实现的). E 窗口管理器实现了所有的 GNOME 提示, 那些想扩展他们的窗口管理器, 实现 GNOME 兼容的人们可以参考(E 窗口管理器). ICEWM 管理器一直在追从那些开发工作, 它也是一个 GNOME 兼容的窗口管理器, 虽然, 它现在有点滞后. 人们希望 WindowMaker 和 FVWM2 的维护者能够提供 GNOME 兼容的补丁。

构件编程

很长时间以来, UNIX 有一个诱人的理论, 那就是设计小的工具, 每一个只作好一件事, 而将他们组合起来, 只使用管道和简单的 shell 角本, 就可以完成复杂的工作. 当数据 对象是一般文本和作过滤操作时, 这种机制工作得极好. 但是, 这种基于命令行的理论却不能更好地适应当前的多媒体对象.

因此, GNOME 最好能够建立一种可以架构, 可以使软件重用和构件联结, 相互作用, 例如, 将小的专业工具联结起来完成复杂的工作. 有了适当的基础框架, GNOME 应用就可以重温 UNIX 那种简单而专业的工具的理论了.

为了提供这类功能, 一个 RPC(远程过程调用)系统是需要的. 所以, 我们决定使用 CORBA (the Common Object Request Broker Architecture), 它来自 the Object Management Group (OMG). CORBA 可以人为是一个面向对象的 RPC 系统, 它正巧有着各种语言的标准实现.

CORBA 向我们展开了一系列的应用. 构件编程允许我们将程序和共享库组织成为一个程序服务器, 以实现一个特定的(应用)界面.

举例来说, GNOME 邮件程序, Balsa, 实现了 GNOME::MailMessage 界面, 它(界面)允许任何 CORBA-aware(能识别CORBA)的应用远程编写和定制一封邮件, 然后发送它. 这样就可以使用任何实现了 GNOME::MailMessage 界面的程序替代(专门的)邮件程序. 只要安装了 GNOME 桌面, 进程只需实现 GNOME::MailMessage 界面(调用)即可. 这意味着, 例如, 我可以继续使用 GNUS 去读我的邮件, 可以使 GNUS 完全融合到我的桌面中. 同时(这种功能)也提供给 其他的 GNOME 构件: 地址簿, 文件管理器, 终端仿真器, 帮助浏览者, 办公应用等等.

除了提供 GNOME 基本界面外, 应用可以实现他们自己的特定界面. 这是通过 COBRA 的界面继承性做到的. 一个特定界面可以衍生自较普通的界面. 例如, GNUS 可以实现 GNOME::MailMessage 界面, 然后扩展为 GNOME::GnusMailMessage, 带有一些 GNUS 自己的特色. 设想一下, 这个界面允许用户在用 Lisp 定制, 而其他一些邮递者则不能. 另外一个例子是, GNOME::MozillaMailMessage 界面允许用户配置 Mozilla 邮件程序中的 HTML 实现.

COBRA 不仅仅只是完成这些工作, 它还可以作为内部进程之间的通讯引擎. 无需发明一种新的内部程序通讯系统, 一个 COBRA 界面就可以做到。

将一种文档嵌入到其他文档的方式随着微软的对象联结与嵌入体系结构已经越来越普及. 一套 GNOME 文档嵌入模型正在被设计(Baboon模型), 这个模型中所有 的内部进程通讯是使用 COBRA 界面描述.

起初, 我们为 COBRA 呈现出的可能性感到兴奋, 但是我们很快意识到在 GNOME 桌面中使用 COBRA 远比设想的困难.

我们尝试使用施乐的 ILU COBRA . 那时(它的)许可证还不允许修改代码和重新发布. 对于自由软件群体来说, 这可是一件重要的事, 所以我们必须寻找替代产品. 施乐因此改变了许可证策略.

在试用了几种不同的免费 COBRA的实现后, 我们选定了 MICO, 因为它是实现 COBRA 特性最全的一个. MICO 设计为 COBRA 的一个教学工具, (因此)其清晰的编码是它的主要特点。

很不幸, 我们很快发现 MICO 不是一个产品质量级, 适合于 GNOME 的工具. 其中一点是, 我们发现, 相当杂乱的 C++ 模板使用(同时存在于 MICO 和生成的接口) 浪费了大量的资源. 编译一点 GNOME , 即使使用了最简单的 COBRA, 竟然也需要 48MB 内存, 这减慢了我们的开发速度. 另外一个问题是 MICO 只支持 C++ 语言. 虽然在开始时期曾经尝试提供 C 语言帮定, 最终并未完成和很好的维护.

为了解决这些问题, i2it 的 Dick Porter 和 Red Hat 实验室的 Elliot Lee 写了一个称作 ORBit 的基于 C 的, 瘦型快速的 COBRA 2.2 实现版本. 一旦 ORBit 开始稳定, 贯穿于 GNOME 的 COBRA 的运用便开始了, 不过已经差不多耽误了 8 个月.

正是有了一个高效的, 产品质量级别, 由我们控制的 COBRA 的实现版本, 我们能够保证对应用开发者来说, COBRA-enable(COBRA激活的)内部进程通讯是一项有价值的服务, 而不只是一个杀手或者 "黔之驴" .

仔细剖析一个 GNOME 桌面应用
工具包

GNOME 桌面应用建立在面向对象的 GTK+ 工具包中之上, GTK+ 工具包原来是设计为 GNU 图像制作程序(GIMP)的 GUI 工具包.

GTK+ 的实现是基于一套简单的窗口和绘图 API , (它)被称为 Gdk(GTK 绘图包). 最初的 Gdk 版本完全是一套 Xlib 的简化包装, 但是最近向 Win32 和 Y 窗口系统的移植正在 alpha 测试阶段.

GTK+ 使用 C 实现了一个对象系统. 这个对象系统具有相当丰富的功能, 包括标准的单继承, 动态产生新的方法和类, 和一个"信号"机制 -- 它可以动态地将用户界面上发生的不同事件与处理(函数)联系起来. GTK+ 一个巨大优势是它具有广泛地(编程)语言支持, 包括 C++, Objective-C, Perl, Python, Scheme 及 Tom. 在使用 GTK+ 和编程生成新的对象时, 我们有着众多的选择.

GNOME 的一个附加的特点是 Rasterman 的 Imlib 库. 它是和 Gdk 平行生成的, 提供了一个快速而灵活的存取图像, 并在屏幕上绘出的界面. 使用 Imlib 的应用 可以快速地, 直接地处理 PNG, GIF, TIFF, JPEG and XPM 文件, 使用外部的转换过滤器处理其它格式(的文件).

支持的库

基于 C 的 GNOME 应用使用 Glib 实用库. Glib 提供给 C 编程者一套有用的数据 结构: 链表, 双链表, 哈希表(一对一映射), 树, 串操作, 内存块重用, 查错的宏, 断言和流水记录便利函数. Glib 也包括了一个可移植的, 动态模块界面.

GNOME 库

GNOME 库加入了为产生完整的应用而工具包中缺少的部分, 规定一些策略, 帮助 产生统一的用户界面, 还有本地化 GNOME 以在不同的国家地区使用.

当前的 GNOME 库是: GTK+-xmhtml, gnome-print, libgnome, libgnomeui, libgnorba, libgtop, gnome-dom and gnome-xml. 其他库是为特定的应用使用: libPropList (很快将被一个新的配置引擎替代)和音频文件.

主要的非图像类库是 libgnome. 它提供函数跟踪最近使用的文档, 配置信息, 元数据处理(见下面), 游戏积分功能和命令行参数处理. 这个库的使用无需一个窗口系统.

由于我们使用 COBRA 来部分完成桌面的融合, 因此提供一个特殊的库去处理不同的 COBRA 主题, 它被称为 libgnorba. 它提供了 GUI/COBRA 整合 (让我们的 GUI 应用表现为服务器), 在 GNOME 框架内的认证, 和服务激活.

gnomeui 库, 则正相反, 需要一个窗口系统才能运行. 它包括如下分支:

GNOME 对话管理支持
Widgets, 包括 GTK+ 的直接扩展和设计成独立于 libgnome 的部分
一套标准对话框, 不同于 GTK+ 中的, 与其他 GNOME 库很好地集成
标准属性配置对话框
标准顶层窗口处理
多文档界面(gnome-mdi)
窗口提示
需要 CORBA 整合的地方
GTK+-XmHTML 是对 Koen D'Hondt 的 XmHTML widget for Motif 的移植, 被用来实现我们的 HTML 显示需要. 我们所做的改变已经融合入主放行包中.

gtop 库允许系统应用轻松地向不同的操作系统移植; 它提供系统, 进程和文件系统信息.

gnome-xml 使 GNOME 应用能够加载, 分析, 保存 XML 文件, 它用在 GNOME 的电子表格 (Gnumeric) 和 GNOME 的文字处理程序中. gnome-dom 是为 GNOME 应用实现了 World Wide Web 组织的文档对象模型. 当你在阅读这篇文章时, gnome-dom 已经在 GNOME 办公类应用中广泛地运用. gnome-xml 和 gnome-dom 都是由 World Wide Web 组织的 Daniel Veillard 开发的.

gnome-print 实现了 GNOME 的打印体系结构. 它包括一个插座式的描述引擎, 以及一套 Widgets 和选择及配置打印机的标准对话框. 另外, gnome-print 负责管理轮廓字体, 也包括自动搜索系统中已经安装字体的脚本.

GNOME 打印成像模型仿照 PostScript. 基本操作包括矢量和 B 样条路径诠释, 平滑, 填充, 剪裁, 文字(使用 Type1 字体, 不久加入 TrueType)和图像.

当前, gnome-print 只能生成 PostScript 格式输出. 但是图像模型的设计最终将与画布的 anti-aliased 描述引擎同步. 这两个模块将期望能够协同工作. 特别地, "打印"到一个画布中是可能的, 这对于高质量的屏幕预览是有用的, 也将 实现打印一个画布的内容. 这个特性将简化使用画布应用的设计, 只需要增加一点 额外的代码去支持打印.

同一个描绘引擎将用来描绘打印页, 直接地, 无需经过 PostScript 这一步. 这条捷径是令人振奋的, 对于那些向彩色喷墨达因机进行高质量, 高性能打印工作, 即使是复杂的页面, 包括透明物体, 倾斜, 和其他在商业类 PostScript 图像模型 中认为是"需要技巧"的元素.

帮定(程序设计语言)

GNOME 一个清楚的目标是支持广泛的设计语言支持, 因为很明显不可能存在一种语言对于每一个应用都配合地天衣无缝. 为此, GTK+ 和 GNOME 库提供了许多种设计语言的帮定, 目前有 C, C++, Objective-C, Perl, Python, Scheme 和 Tom.

早期的帮定 Scheme, Tom 和 Perl 到 GTK+ 和 GNOME 工程的复杂工作使 GTK+ 和 GNOME 的 APIS 易于向其他不同语言移植. 多设计语言支持在 GTK+ 和 GNOME 的 设计过程中就已经是再三考虑的事, 而不是"亡羊补牢"之计.

开发模式
GNOME 是由世界范围内的几个松散的开发者小组进行的. 工程的协调工作是通过不同的 GNOME 邮件列表进行的.

GNOME 源代码保存在 GNOME CVS 服务器(cvs:cvs.gnome.org:/cvs/gnome/). 使用 Netscape 的 Bonsai 和 LXR 工具(http://cvs.gnome.org)可以得到 源代码, 帮助程序员熟悉 GNOME 代码基础.

许多贡献过代码, 修正过主要 BUG, 和 GNOME 文档的书写者对 CVS 有写的权限, (大家)共同养育了一种非常开放的氛围. GNOME 开发者有着不同的背景, 不同的技巧 和经验水平, 有时缺少经验的人们能够给予令人吃惊的帮助, 年长的, 更富智慧的 编码者乐于提携组中的年轻人. GNOME 开发者社区重视干净的, 可维护的编码. 甚至有着多年编程经验的程序员也说 GNOME 工程帮助他们写出了更好的代码.

GNOME 办公应用套件
随着 GNOME 基础库的更加稳定, 开发大程序工程也具备了可能性, 也允许各个开发小组将他们的应用整合起来, 组成 GNOME 办公套件.

随着 GNOME 构件的整合, GNOME 办公套件正在追上商业类软件. 通过提供一个 坚固的, 快速的, 基于构件的办公套件, GNOME 工程也许会成为自由软件开发进程中一个新纪元的开端.

GNOME 办公套件的不同构件的开发在过去一年中赋于了我们中许多人大量的知识. 我们的编程水平提高了,编码质量提高了, 编码更清晰, 更健壮了.

这些应用也提供给我们测试的温床, 使我们得以完成文档嵌入界面(Baboon 模型)。

有两个字处理项目正在进行: 一个是 GWP, 由 Hungry Programmers 的 Seth Alves 负责; 另一个是 Chris Lahey 的 GO. GWP 目前领先一些, 已经可以和 GNOME 中 的打印框架协同进行打印工作.

Gnumeric, GNOME 电子表格项目, 目标是提供一个带有更先进特性, 商业软件级别 的电子表格. 它提供了一个舒适的, 强大的用户界面. 为了同 GNOME 的其它构件 协同工作, 我们将继续工作希望能够为未来的开发提供一个坚固的, 可扩展的框架.

最近, 启动了 Acthung 项目, GNOME 介绍(presentation)程序. 它依然处于早期 开发过程中.

获取 GNOME
经过测试的源代码可以从 GNOME 的 ftp 站点下载: ftp://ftp.gnome.org/.

也可以从匿名 CVS 服务器得到最新的 GNOME 开发中的代码. 查看 GNOME 的 主页以获得如何直接从 CVS 服务器得到最新版本的方法.

关于 GNOME 的新闻将发布在 GNOME 主页 http://www.gnome.org/, 还有关于 如何运行 GNOME 和如何开发 GNOME 应用的文档。
Ubuntu陌生的名字.
有一天认识了它.
随着认识的开始.
我越来越喜欢它.
全世界的礼物<-----------Ubuntu------------->
头像
kk123cn
帖子: 48
注册时间: 2007-10-22 21:48

#5

帖子 kk123cn » 2008-05-24 14:21

一般用GTK代表软件包和共享库,用Gtk+代表GTK的图形构件集。
在用Gtk+开发Gnome的过程中,由于实际需要,在上面的构件基础上,又开发了一些新构件。一般把这些构件称为Gnome构件(与Gtk+构件相对应)。这些构件都是Gtk+构件库的补充,它们提供了许多Gtk+构件没有的功能。从本质上来说, Gtk+构件和Gnome构件是完全类似的东西。

1、Gnome的开发结构
只使用Gtk+构件也可以开发出优秀的Linux应用程序,但是Gnome构件,特别是GnomeApp、GnomeUIInfo等,使开发界面一致的应用程序变得更加容易。Gnome的一些新特性,如popt参数分析,保存应用程序设置等也是Gtk+构件所没有的。
Gnome差不多对任何语言都提供了Gnome API接口,其中包括Ada、Scheme、Python、Perl、Tom、Eiffel、Dylan以及Objective C等。至少有三种不同的C++封装。
Gnome的开发架构包含以下一些内容:
(1)非Gnome库
Glib Glib是Gnome的基础,它是一个C工具库,提供了创建和操作常用数据结构的实用函数。
Gtk+ Gtk+(GIMP Toolkit的缩写),是在Gnome应用程序中使用的GUI工具包。Gtk+依赖于glib。Gtk+包中包含了Gdk,它是对底层的X Window系统库Xlib的简化。由于Gtk+使用了Gdk而不是直接调用Xlib,因此Gdk的移植版本允许Gtk+运行在不同于X但只有相对较少的修改的窗口系统上。
对Gnome应用程序来说,Gtk+具有以下的特性:
1) 动态类型系统。
2) 用C语言编写的对象系统,可实现继承、类型检验,以及信号/回调函数的基础结构。
3) 类型和对象系统不是特别针对GUI的。
4) GtkWidget对象使用对象系统,它定义了Gtk+的图形组件的使用接口。
5) 大量的GtkWidget子类(构件)。
ORBit ORBit是一个用C开发的CORBA 2.2O RB。ORBit是以一整套库函数的方式实现的。ORBA,或称作通用对象请求中介构架(Common Object Request Broker Architecture),是一套对象请求中介,或称为ORB的规范。
Imlib Imlib (图片库)提供一些例程,其中包括加载、存储、显示,以及定绘制各种流行的图像格式(包括GIF、JPEG、PNG以及TIFF)的函数。它包括两种版本:Xlib-only版本和基于Gdk的版本。Gnome使用Gdk版本。
(2)Gnome库
下面所介绍的库是Gnome-libs包的一部分,并且是专门为Gnome项目开发的。
libgnome libgnome是一些与图形用户接口无关的函数集合,它包含分析配置文件的代码,也包含与一些外部实用程序的接口,比如国际化编程接口(通过GNU gettext 包)、变量解析(通过popt包)、声音编程接口(通过EnlightenmentDaemon,esound)等。
libgnomeui libgnomeui包含了与GUI相关的Gnome代码。libgnomeui主要包含:
1)GnomeApp构件一般用来为应用程序创建主窗口。它使用GnomeDock构件,允许用户重新排列工具栏,还可以将工具条从窗口上拖开。
2)GnomeCanvas构件用来编写复杂的、无闪烁的定制构件。
3) Gnome 内置的pixmap(包括打开、关闭、保存以及其他操作的图标) 用于创建和使用对话框的例程。GnomePixmap构件比GtkPixmap功能更多。
libgnomeui中还有几种其他构件,如GnomeEntry、GnomeFilePicker等。
libgnorba libgnorba提供与CORBA相关的实用程序,包括安全机制和对象激活。
libzvt 这个库包含一个终端构件(ZvtTerm ),可以在Gnome程序中使用它。
libart_lgp 这个库包含由Raph Levien编写的图形绘制例程。实质上它是一个矢量图形光栅图形库,功能类似于PostScript语言。
(3)其他库
这些库一般使用在Gnome应用程序中,但它不是Gnome-libs 专属的部分。
Gnome-print
Gnome-xml 由WWW协会的Daniel Veillard编写。它能按照树状结构分析XML,也能按照XML输出树状结构。这个库不依赖于任何其他的库(甚至glib),所以它只是在名义上是一个Gnome库。
Guile Guile是Scheme编程语言在一个库中的实现,它使任何应用程序都能带有一个嵌入式的Sheme解释器。
Bonobo Bonobo是一种对象嵌入式结构,类似于Microsoft的OLE。任何应用程序将能通过适当的Bonobo组件调用Gnome库,显示MIME类型数据,例如纯文本、HTML或图像。

如果用C++语言开发基于Gtk+应用程序,可以使用一个名为Gtk--的函数库,它是GTK工具包的C++风格的封装。
Ubuntu陌生的名字.
有一天认识了它.
随着认识的开始.
我越来越喜欢它.
全世界的礼物<-----------Ubuntu------------->
头像
kk123cn
帖子: 48
注册时间: 2007-10-22 21:48

#6

帖子 kk123cn » 2008-05-24 14:25

还是自己找到了:
Gnome 软件构架
http://www.gnome-cn.org/documents/devel ... chitecture
Ubuntu陌生的名字.
有一天认识了它.
随着认识的开始.
我越来越喜欢它.
全世界的礼物<-----------Ubuntu------------->
头像
lovewine
帖子: 1233
注册时间: 2006-03-25 10:36
联系:

#7

帖子 lovewine » 2008-05-24 15:11

自己动手,丰衣足食,利人利己,值得鼓励
让自由的声音传传传传传传传传天下。。。
Spread the words of freedom.
回复