#gtk #state #widgets #libadwaita

gtk_estate

GTK 和 libadwaita 状态关联库

3 个版本 (破坏性更新)

0.3.0 2024年6月3日
0.2.0 2024年4月22日
0.1.3 2023年7月21日

#129 in GUI

每月 35 次下载
2 crates 中使用

MIT/Apache

94KB
2K SLoC

GTK Estate

Crates.io License Downloads Docs Twitch Status

X | Twitch | Youtube | Mastodon | GitHub | GitHub Sponsors

GTK Estate 是一个使用优秀的 GTK 4libadwaita 库的 GTK 小部件状态关联库。


GTK Estate 的主要目的是提供一个方便的方法,将用户定义的状态对象与 GTK 和 libadwaita 容器小部件关联起来。使用用户定义的对象,您可以控制其关联小部件的用户中心状态并对其信号做出反应。GTK Estate 还包含 TimeOut 和辅助函数等对象,可以帮助您以编程方式构建动态 GTK 应用程序。

StateContainers 结构是一个单例,包含小部件状态关联哈希表,每种类型的小部件都得到自己的映射实例。



mod application_state;

use gtk_estate::{adw::{prelude::*, Application}, StateContainers};

use crate::application_state::ApplicationState;

fn main()
{

    let app = Application::builder().application_id("org.example_gui").build();

    //Explicit initialisation of the StateContainers object is no longer required as of v0.3.0.

    //StateContainers::init();

    //The ApplicationState (which you define) should add itself to the StateContainers instance from within its own constructor.

    ApplicationState::new(&app);

    //Run the application

    _ = app.run();

}


在上面的示例中,首先构建了一个 adw::Application,然后实例化了 ApplicationState 并传递了对 Application 的引用(其克隆将成为其状态的一部分)。ApplicationState 对象必须实现 ApplicationStateContainer,同样,小部件状态容器对象(包括窗口)必须实现 WidgetStateContainer(请参阅 示例应用程序)。

StateContainers 是一个单线程单例,应仅包含处理 UI 和线程间通信相关任务的状态,可能使用类似于 act_rs 的 crate 来实现后者。


构建需求

需要在您的系统上安装 GTK4 库二进制文件(有关 GTK 安装说明,请参阅 GTK 书籍)。

如果您想使用任何 adw 功能,请在软件仓库中搜索 libadwaita 库。


功能

GTK4

功能 启用功能
gtk_v4_14 gtk4/v4_14
gtk_v4_12 gtk4/v4_12
gtk_v4_10 gtk4/v4_10
gtk_v4_8 gtk4/v4_8
gtk_v4_6 gtk4/v4_6
gtk_v4_4 gtk4/v4_4
gtk_v4_2 gtk4/v4_2
gtk_gnome_45 gtk4/gnome_45
gtk_gnome_44 gtk4/gnome_44
gtk_gnome_43 gtk4/gnome_43
gtk_gnome_42 gtk4/gnome_42
gtk_unsafe-assume-initialized gtk4/unsafe-assume-initialized
gtk_xml_validation gtk4/xml_validation
gtk_blueprint gtk4/blueprint

libadwaita

功能 启用功能
adw dep:adw
adw_gtk_v4_2 adw/gtk_v4_2
adw_gtk_v4_4 adw/gtk_v4_4
adw_gtk_v4_6 adw/gtk_v4_6
adw_gtk_v4_8 adw/gtk_v4_8
adw_gtk_v4_10 adw/gtk_v4_10
adw_gtk_v4_12 adw/gtk_v4_12
adw_v1_2 adw/v1_2
adw_v1_3 adw/v1_3
adw_v1_4 adw/v1_4
adw_v1_5 adw/v1_5

此外

GTK 资产重新暴露

  • GTK4 (gtk)
  • libadwaita (adw (如果选择))
  • Corlib (corlib)

待办事项

  • 添加更多 GTK/adw 辅助函数和辅助对象。
  • 添加更多文档。

示例应用程序


编码风格

该项目使用一种编码风格,强调使用空白而非尽可能降低行和列计数。

所以这个

fn foo()
{

    bar();

}

不是这个

fn foo()
{
    bar();
}


许可

许可方式为以下之一

由您自行决定


贡献

请克隆仓库并创建一个问题,说明您想添加哪些功能或功能,或者您想修复哪些错误,以及您打算如何实现这些添加或修复。尽量包含详细信息,但不需要详尽无遗,我们将根据可用性来处理。


除非您明确表示,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,都应按照上述方式双重许可,不附加任何其他条款或条件。

依赖关系

~16–24MB
~451K SLoC