#ui-toolkit #cross-platform-ui #gtk #user-interface #ui #macos

libui

本机、跨平台且轻量级的 UI 工具包

4 个版本 (重大变更)

使用旧的 Rust 2015

0.3.0 2023 年 8 月 6 日
0.2.0 2023 年 4 月 28 日
0.1.0 2023 年 3 月 29 日
0.0.0 2023 年 3 月 12 日

#658 in GUI

MIT 许可证

1.5MB
47K SLoC

C 19K SLoC // 0.1% comments C++ 14K SLoC // 0.1% comments Objective-C 10K SLoC // 0.1% comments Rust 3.5K SLoC // 0.1% comments Go 132 SLoC Swift 67 SLoC GNU Style Assembly 44 SLoC Python 23 SLoC // 0.1% comments Shell 17 SLoC // 0.1% comments Batch 7 SLoC

libui Crates.io 构建状态 许可证: MIT 许可证: Apache

Rust 的本机跨平台 UI 工具包

libui 是一个 简单小巧易于分发 的 GUI 库。它通过利用您的系统 API 而不是实现另一个外观不匹配的渲染器来为您的平台提供本机 UI。因此,所有 libui 应用程序都是轻量级的,具有本机外观和感觉,并且从高度优化的基础开始,该基础与每个平台上的生态系统良好集成。因为它仅实现了这些平台 API 的公共子集,所以您的应用程序将在所有平台上运行,并且不会出现重大行为不一致,无需您进行额外的工作。但是,如果您只计划支持一个平台,则专门的 crate 将提供更好的体验。

技术上,libui 是 C 库 libui-ng 的 "rustification" 包装器,该库实际上抽象了本机 GUI 框架。即 Windows 上的 Win32 API、Mac OS X 上的 Cocoa,以及 Linux 和其他平台上的 GTK3。

示例

使用以下方法将 libui 添加到 cargo.toml 的依赖项列表中:

libui = "0.3.0"

或使用仓库中的最新版本

libui = { git = "https://github.com/libui-rs/libui" }

接下来,我们建议您查看 示例应用程序 或从下面打印的简化示例开始

#![cfg_attr(not(test), windows_subsystem = "windows")]
#![cfg_attr(test, windows_subsystem = "console")]

extern crate libui;
use libui::controls::*;
use libui::prelude::*;

fn main() {
    let ui = UI::init()
        .expect("Couldn't initialize UI library");
    
    let mut win = Window::new(&ui, "Example", 300, 200, 
        WindowType::NoMenubar);
    let layout = VerticalBox::new();

    // add controls to your layout here

    win.set_child(layout);
    win.show();
    ui.main();
}

我们还在 docs.rs 上为所有已发布版本提供了文档。

屏幕截图

在左边可以看到一个在GNOME桌面(GTK 3)上运行的libui应用程序。在右边是Windows 10下的本地用户界面。

Example application running under Linux and Windows

更多截图,请参见此处

兼容性

libui 0.2.0可支持到2018版,并在以下系统上成功测试:

  • Windows 7 SP1
  • Windows 10 22H2
  • Debian 12 w/ GNOME 43 & GTK 3.24
  • macOS Big Sur 11.6

libui 0.3.0可支持到2021版,并在以下系统上成功测试:

  • Debian 12 w/ GNOME 43 & GTK 3.24
  • Windows 10 22H2

先决条件 & 构建

要构建底层libui-ng,您的系统必须安装某些工具,除了Rust工具链。我将尽可能地减少不便。

Linux

  • libgtk-3-dev(Debian软件包)- 用于编译libui-ng
  • libclang(Debian软件包)- 用于生成libui-ng绑定

Windows

  • MSVC(通过Windows SDK或Visual Studio)
  • LLVM - 用于生成libui-ng绑定

注意:MinGW-64可以编译和链接,但由于MinGW缺少TaskDialog(),应用程序无法启动。据报道,版本≥5.X时,此功能可用。

致谢

实体 致谢 更多信息
@pcwalton 初始作者。在很大程度上塑造了这个库。 pcwalton/libui-rs
@NoraCodes和其他人 进一步开发和维护。 rust-native-ui/libui-rs
@tobia libui::layout!宏,以简化UI描述。 tobia/iui-builder
@andlabs libui的C库作者。 andlabs/libui
@szanni@cody271 libui-ng的维护者。此包装器的基础库。 libui-ng/libui-ng

依赖项

~0–3MB
~49K SLoC