03-GTK+框架
16.2 GTK+框架
GTK+(以下简称gtk)是一个用C语言创建的跨平台GUI框架。由于是跨平台的,所以使用gtk开发的应用程序可以在大部分主流平台上运行,例如Windows、Linux或macOS。gtk项目最初是为开发用于Linux的GNU图像处理程序(GNU Image Manipulation Program,GIMP)而创建的,后来开源了。gtk也被许多其他软件项目所使用,例如许多Linux发行版上的Gnome桌面环境,会使用它构建一些实用程序。在架构方面,gtk由几个软件包组成,这些程序库协同工作,一起处理渲染所需的各种细节,并促进用户在应用程序中与窗口或小部件的交互,其中一些组件如下所示。
- Glib :这是基本的核心库,提供了几种数据结构、可移植性包装器,以及运行时功能的接口,例如事件循环、线程支持、动态加载及对象系统。Glib本身由诸如提供对象模型的GObject和GIO之类的组件构成,GIO为I/O提供高级抽象。
- Pango :它是一个提供文本渲染和国际化功能的程序库。
- Cairo :这是一个 2D 图形库,负责在屏幕上绘制内容,并尝试在多个设备上保持一致性,以及处理硬件加速等细节。
- ATK :ATK 是可访问性工具箱程序库,负责为屏幕阅读器、放大镜或替代性输入设备等提供可访问性。
gtk还有一个名为Glade的接口构建器,它为应用程序的快速开发提供一个gtk源代码框架。
gtk使用面向对象的模型来表示小部件和窗口,它利用GObject库来提供这种抽象。gtk-rs项目在Rust中使用gtk程序库,该项目包含的许多程序库都遵循与gtk软件包中的程序库相同的命名约定,并为这些程序库提供原生的C语言绑定。在gtk-rs项目包含的所有程序库中,我们将使用gtk程序库来构建应用程序。
gtk程序库提供了用于构建GUI的窗口和小部件系统,并尝试对与原生C程序库相同的API进行建模,但由于Rust中没有面向对象的类型系统,因此存在一些差异。gtk程序库中的小部件是智能指针类型。为了在使用API时保持灵活性,用户可以拥有大量的可变引用,类似于Rust内部提供的可变引用。gtk中的任何重要的小部件都继承自某些基本的小部件类型。Rust通过IsA