libui 0.4.0

A native, cross-platform and lightweight UI toolkit.
Documentation
extern crate libui;

use libui::controls::{Button, Group, Label, VerticalBox};
use libui::prelude::*;

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.clone(), "Test App", 200, 200, WindowType::NoMenubar);

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

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

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

    let mut quit_button = Button::new("Quit");
    quit_button.on_clicked({
        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(&label_text);

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

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