84 个版本
0.20.1 | 2024 年 8 月 12 日 |
---|---|
0.20.0 | 2024 年 7 月 10 日 |
0.19.9 | 2024 年 6 月 26 日 |
0.19.3 | 2024 年 3 月 19 日 |
0.0.3 | 2015 年 7 月 18 日 |
#16 在 GUI
379,477 每月下载次数
用于 901 个 Crates (314 个直接使用)
2.5MB
54K SLoC
Rust GLib 和 GObject 绑定
Rust 对 GLib 的绑定和包装器,是 gtk-rs-core 的一部分。
GLib 2.56 是支持的最低版本。
此库包含对 GLib 和 GObject 类型以及 API 的绑定,以及用于手工和机器生成的 GTK 和其他基于 GLib 的库绑定的常用构建块。
它是具有统一 Rusty (安全且强类型) API 的高级库的基础。它尽可能地避免暴露 GLib 特定的数据类型,并不旨在提供全面的 GLib 绑定,这通常会导致重复 Rust 标准库或其他实用程序 Crates。
最低支持的 Rust 版本
目前,最低支持的 Rust 版本是 1.70.0
。
动态类型
GLib 家族中的大多数类型都有 Type
标识符。它们对应的 Rust 类型实现了 StaticType
特性。
动态类型的 Value
可以携带任何 StaticType
的值。 Variants 可以携带 StaticVariantType
的值。
错误
错误由 Error
表示,它可以携带来自各种错误域的值,例如 FileError
。
对象
每个类和接口都有一个表示该类型实例的智能指针结构(例如,Object
用于 GObject
或 gtk4::Widget
用于 GtkWidget
)。它们具有引用计数,并且具有内部可变性,类似于 Rust 的 Rc<RefCell<T>>
习惯用法。因此,克隆对象成本低,其方法不需要可变借用。如果两个智能指针指向同一对象,则它们相等。
对象层次结构的根是 Object
。继承和子类型使用 IsA
标记特质表示。Cast
特质使向上转换和向下转换成为可能。
接口和非叶类也有相应的特质(例如,ObjectExt
或 WidgetExt
),它们为其所有子类型都进行了泛型实现。
您可以创建新的 Object
或其他对象类型的子类。查看模块的文档以获取更多详细信息和一个代码示例。
内部工作原理
基于 GLib 的库主要在指向各种装箱或引用计数的结构体指针上操作,因此绑定必须实现相应的智能指针(包装器),这些包装器封装资源管理和安全检查。这些包装器通过 wrapper!
宏定义,该宏使用 wrapper
、boxed
、shared
和 object
模块中定义的抽象。translate
模块定义并部分实现了高级 Rust 类型(包括上述包装器)及其 FFI 对应类型的转换。
文档
使用
我们建议使用 crates.io 上的 crate,如此处所示。
如果您想跟踪最新进展,请使用 git 依赖项
[dependencies]
glib = { git = "https://github.com/gtk-rs/gtk-rs-core.git", package = "glib" }
避免像这样混合带有版本和 git crate
# This will not compile
[dependencies]
glib = "0.13"
glib = { git = "https://github.com/gtk-rs/gtk-rs-core.git", package = "glib" }
许可证
glib 在 MIT 许可证下提供,请参阅它。
依赖项
~2.2–10MB
~101K SLoC