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 日

#16GUI

Download history 93168/week @ 2024-05-04 89579/week @ 2024-05-11 89991/week @ 2024-05-18 87307/week @ 2024-05-25 83328/week @ 2024-06-01 76473/week @ 2024-06-08 84338/week @ 2024-06-15 82938/week @ 2024-06-22 85451/week @ 2024-06-29 86123/week @ 2024-07-06 88871/week @ 2024-07-13 88530/week @ 2024-07-20 91846/week @ 2024-07-27 91585/week @ 2024-08-03 93315/week @ 2024-08-10 86532/week @ 2024-08-17

379,477 每月下载次数
用于 901 个 Crates (314 个直接使用)

MIT 许可证

2.5MB
54K SLoC

Rust GLib 和 GObject 绑定

RustGLib 的绑定和包装器,是 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 用于 GObjectgtk4::Widget 用于 GtkWidget)。它们具有引用计数,并且具有内部可变性,类似于 Rust 的 Rc<RefCell<T>> 习惯用法。因此,克隆对象成本低,其方法不需要可变借用。如果两个智能指针指向同一对象,则它们相等。

对象层次结构的根是 Object。继承和子类型使用 IsA 标记特质表示。Cast 特质使向上转换和向下转换成为可能。

接口和非叶类也有相应的特质(例如,ObjectExtWidgetExt),它们为其所有子类型都进行了泛型实现。

您可以创建新的 Object 或其他对象类型的子类。查看模块的文档以获取更多详细信息和一个代码示例。

内部工作原理

基于 GLib 的库主要在指向各种装箱或引用计数的结构体指针上操作,因此绑定必须实现相应的智能指针(包装器),这些包装器封装资源管理和安全检查。这些包装器通过 wrapper! 宏定义,该宏使用 wrapperboxedsharedobject 模块中定义的抽象。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