3 releases (breaking)
Uses old Rust 2015
0.3.0 | Jun 5, 2018 |
---|---|
0.2.0 | Feb 15, 2018 |
0.1.0 | Jan 30, 2018 |
#1029 in GUI
178 downloads per month
Used in 2 crates
1.5MB
37K
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
This repository contains multiple Rust crates. Also be sure to look at our changelog and learn how to contribute.
iui
is the safe Rust wrapper, to be used by most users.ui-sys
is the raw unsafe bindings to thelibui
C code. Requirescmake
so it can buildlibui
.libui
is 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. With
fetch 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.