30 个版本 (9 个重大更新)

新增 0.11.3 2024 年 8 月 22 日
0.11.0 2024 年 7 月 26 日

#144GUI

Download history 141/week @ 2024-05-03 141/week @ 2024-05-10 324/week @ 2024-05-17 27/week @ 2024-05-24 262/week @ 2024-05-31 552/week @ 2024-06-07 126/week @ 2024-06-14 367/week @ 2024-06-21 4/week @ 2024-06-28 463/week @ 2024-07-05 258/week @ 2024-07-12 55/week @ 2024-07-19 178/week @ 2024-07-26 25/week @ 2024-08-02 88/week @ 2024-08-09 291/week @ 2024-08-16

每月 594 次下载

Apache-2.0 OR MIT

7MB
130K SLoC

Zng 是一个跨平台 GUI 框架,它提供了高度可定制的预构建小部件、响应式布局、实时数据绑定、易于本地化、自动焦点导航和可访问性、异步和多线程任务、强大的多进程架构等功能。

Zng 发音为 "zing",或者作为缩写:ZNG (Z Nesting Graphics)。

用法

首先将 zng 添加到您的 Cargo.toml,或者调用 cargo add zng -F view_prebuilt

[dependencies]
zng = { version = "0.11.3", features = ["view_prebuilt"] }

然后创建您的第一个窗口

use zng::prelude::*;

fn main() {
    zng::env::init!();
    APP.defaults().run_window(async {
        let size = var(layout::Size::new(800, 600));
        Window! {
            title = size.map(|s| formatx!("Button Example - {s}"));
            size;
            child_align = Align::CENTER;
            child = Button! {
                on_click = hn!(|_| {
                    println!("Button clicked!");
                });
                text::font_size = 28;
                child = Text!("Click Me!");
            }
        }
    })
}

有关更多详细信息,请参阅文档

项目模板

您还可以使用 cargo zng new 生成一个带有有用样板代码和预配置的发行版包装的新项目。

cargo install cargo-zng
cargo zng new "My App!"

上面的示例安装了 cargo-zng 并使用它从默认模板生成一个名为 './my-app' 的新 crate。

Cargo 功能

此 crate 提供了 31 个功能标志,其中 4 个默认启用。

"view"

包含默认的视图处理实现。

仅在 not(target_arch = "wasm32") 构建

"view_prebuilt"

将默认视图处理实现作为嵌入式预编译的二进制文件包含在内。

仅在 not(any(target_arch = "wasm32", target_os = "android")) 构建

"http"

启用小部件和服务的 HTTP 任务和 Web 功能。

"debug_default"

在调试构建中启用 "dyn_*""inspector" 功能。

默认启用。

"dyn_node"

通过启用 UiNode::cfg_boxed 来使用节点级别的更多动态调度。

这会缩短编译时间,但会牺牲运行时性能。

"inspector"

使用“Inspector”节点对每个属性和窗口实例进行度量,并扩展到Ctrl+Shift+I时进行检查。

"hot_reload"

启用热重载构建。

请注意,您必须配置目标库以启用热重载,有关详细信息,请参阅 zng::hot_reload

仅在 not(any(target_arch = "wasm32", target_os = "android")) 构建

"dyn_app_extension"

在应用程序扩展级别使用动态调度。

这会缩短编译时间,但会牺牲运行时性能。

"dyn_closure"

在适当的位置(例如 Var::map)包装闭包,减少单态化类型的数量。

这会缩短编译时间,但会牺牲运行时性能。

"test_util"

测试工具。

"multi_app"

允许每个进程有多个应用程序实例。

此功能允许同时运行多个应用程序,每次一个应用程序。 LocalContext 跟踪每个线程当前运行的应用程序,并且 app_local! 静态根据当前线程切换到每个应用程序的值。

默认未启用,但通过 feature="test_util" 启用。

"single_instance"

启用单个应用程序进程实例模式。

具有此功能构建的版本只允许一个应用程序进程,后续尝试生成应用程序将重定向到正在运行的应用程序进程。

仅在 not(any(target_arch = "wasm32", target_os = "android")) 构建

"crash_handler"

允许应用程序进程崩溃处理器。

具有此功能的构建将为每个应用程序进程生成一个崩溃监视器进程。

仅在 not(any(target_arch = "wasm32", target_os = "android")) 构建

默认启用。

"trace_widget"

对每个最外层节点进行度量以跟踪UI方法。

"trace_wgt_item"

对每个属性和内部节点进行度量以跟踪UI方法。

请注意,这可能导致非常大的跟踪文件和性能下降。

"deadlock_detection"

在应用程序创建时启动一个线程,检查并打印 parking_lot 死锁。

"hyphenation_embed_all"

嵌入所有受支持语言的连字符字典。

如果启用,将嵌入大约2.8MB的数据,您可以使用 HYPHENATION::init_data_source 方法提供替代字典源。

"material_icons"

在默认应用程序中包含所有 Material Icons 图标集。

"material_icons_outlined"

Material Icons Outlined 图标集。

如果启用,此集合中的一些图标用于某些命令。

"material_icons_filled"

Material Icons Filled 图标集。

"material_icons_rounded"

Material Icons Rounded 图标集。

"material_icons_sharp"

Material Icons Sharp 图标集。

"toml"

启用 TOML 配置。

"ron"

启用 RON 配置。

"yaml"

启用 YAML 配置。

"view_software"

在默认视图进程中启用软件渲染器回退。

如果启用并且没有可用的原生OpenGL 3.2驱动程序,则使用 swgl 软件渲染器。

默认启用。

"view_bundle_licenses"

收集并捆绑 zng-view crate 使用的第三方许可证。

需要 cargo-about 和网络连接以进行构建。

默认未启用。请注意,"view_prebuilt" 总是捆绑许可证。

"ipc"

启用 IPC 任务,预构建视图以及连接到运行在另一个进程中的视图。

仅在 not(any(target_os = "android", target_arch = "wasm32")) 构建中启用。

默认启用。

"built_res"

首先检查 zng::env::res 路径是否在 init_built_res 中可用。

默认在调试构建中启用,在 Android 和 Wasm 中忽略。

"android_game_activity"

标准的 Android 后端,需要能够编译 Java 或 Kotlin 以及获取 Android 依赖项的构建系统。

有关更多详细信息,请参阅 https://docs.rs/winit/latest/winit/platform/android/

"android_native_activity"

不需要 Java 的基本 Android 后端。

有关更多详细信息,请参阅 https://docs.rs/winit/latest/winit/platform/android/

仓库

有关构建要求、示例和许可信息,请参阅 zng-ui/zng 仓库的 README。

依赖项

25–70MB
~1M SLoC