3 releases
Uses old Rust 2015
| 0.1.3 | May 30, 2018 |
|---|---|
| 0.1.1 | Jan 30, 2018 |
| 0.1.0 | Jan 30, 2018 |
#1918 in GUI
124 downloads per month
Used in 3 crates
(via iui)
1MB
35K
SLoC
Improved User Interface
A cross-platform UI toolkit for Rust based on libui
iui is a simple, small, easy to distribute GUI library, a Rusty user interface library that binds to platform native APIs.
These are work-in-progress bindings to the minimalistic native UI library [libui][libui] via the ui-sys bindings crate.
Add iui to your project with:
iui = "0.3"
Organization
iuiis the safe Rust wrapper, to be used by most users.uiis the old version of the safe wrapper. Don't use this.ui-sysis the raw unsafe bindings to thelibuiC code. Requirescmakeso it can buildlibui.libuiis included as a submodule.
Based on work by @pcwalton. Licensed MIT.
Example

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();
}
Building ui-sys
ui-sys includes libui as a sub-module and allows it to be built on-the-fly with the
default features fetch and build. Withfetch disabled, it will simply build the
existing sources without updating them, and with build disabled it will build nothing,
assuming either a system or local (in ./lib/) version of libui is available.
Note that most of the time, building libui on the fly is what you want. It does however
require a copy of cmake, essential build tools, et cetera.