3 个版本

使用旧的 Rust 2015

0.1.3 2018年5月30日
0.1.1 2018年1月30日
0.1.0 2018年1月30日

#848GUI

Download history 59/week @ 2024-03-11 64/week @ 2024-03-18 68/week @ 2024-03-25 123/week @ 2024-04-01 38/week @ 2024-04-08 58/week @ 2024-04-15 63/week @ 2024-04-22 57/week @ 2024-04-29 47/week @ 2024-05-06 57/week @ 2024-05-13 54/week @ 2024-05-20 52/week @ 2024-05-27 50/week @ 2024-06-03 28/week @ 2024-06-10 49/week @ 2024-06-17 41/week @ 2024-06-24

172 每月下载量
3 个工具包中使用 (通过 iui)

MIT 许可证

1MB
35K SLoC

C 14K SLoC // 0.1% comments C++ 10K SLoC // 0.1% comments Objective-C 9K SLoC // 0.1% comments Rust 1.5K SLoC // 0.0% comments Go 137 SLoC // 0.0% comments Swift 68 SLoC // 0.0% comments GNU Style Assembly 45 SLoC Shell 18 SLoC // 0.1% comments Batch 8 SLoC

改进的用户界面

基于 libui 的跨平台 UI 工具包

libui-rs travis build status libui-rs appveyor build status badge actively developed badge

iui: iui crates.io 版本徽章 docs.rs for iui ui-sys: ui-sys crates.io 版本徽章 docs.rs for ui-sys

iui 是一个简单、小巧、易于分发的 GUI 库,一个绑定到平台原生 API 的 Rust 用户界面库。这些是通过 ui-sys 绑定工具包对最小化本地 UI 库 [libui][libui] 的工作中版本绑定。

iui 添加到项目中

iui = "0.3"

组织

  • iui 是安全的 Rust 包装器,供大多数用户使用。
  • ui 是安全包装器的旧版本。不要使用此版本。
  • ui-sys 是对 libui C 代码的原始不安全绑定。需要 cmake 以构建 libui
  • libui 作为子模块包含在内。

基于 @pcwalton 的工作。MIT 许可。

示例

Three example GUI applications running on Linux

extern crate iui;
use iui::prelude::*;
use iui::controls::{Label, Button, VerticalBox, Group};

fn main() {
    // Initialize the UI library
    let ui = UI::init().expect("Couldn't initialize UI library");
    // Create a window into which controls can be placed
    let mut win = Window::new(&ui, "Test App", 200, 200, WindowType::NoMenubar);

    // Create a vertical layout to hold the controls
    let mut vbox = VerticalBox::new(&ui);
    vbox.set_padded(&ui, true);

    let mut group_vbox = VerticalBox::new(&ui);
    let mut group = Group::new(&ui, "Group");

    // Create two buttons to place in the window
    let mut button = Button::new(&ui, "Button");
    button.on_clicked(&ui, {
        let ui = ui.clone();
        move |btn| {
            btn.set_text(&ui, "Clicked!");
        }
    });

    let mut quit_button = Button::new(&ui, "Quit");
    quit_button.on_clicked(&ui, {
        let ui = ui.clone();
        move |_| {
            ui.quit();
        }
    });

    // Create a new label. Note that labels don't auto-wrap!
    let mut label_text = String::new();
    label_text.push_str("There is a ton of text in this label.\n");
    label_text.push_str("Pretty much every unicode character is supported.\n");
    label_text.push_str("🎉 用户界面 사용자 인터페이스");
    let label = Label::new(&ui, &label_text);

    vbox.append(&ui, label, LayoutStrategy::Stretchy);
    group_vbox.append(&ui, button, LayoutStrategy::Compact);
    group_vbox.append(&ui, quit_button, LayoutStrategy::Compact);
    group.set_child(&ui, group_vbox);
    vbox.append(&ui, group, LayoutStrategy::Compact);

    // Actually put the button in the window
    win.set_child(&ui, vbox);
    // Show the window
    win.show(&ui);
    // Run the application
    ui.main();
}

构建 ui-sys

ui-sys 包含 libui 作为子模块,并允许在默认功能 fetchbuild 的情况下即时构建。禁用 fetch 时,它将简单地构建现有的源代码而不更新它们,禁用 build 时,将不构建任何内容,假设系统或本地(在 ./lib/)版本 libui 可用。

请注意,大多数情况下,在运行时动态构建 libui 是您所希望的。但这确实需要一份 cmak,以及必要的构建工具等。

依赖项