pierro 0.1.0

An immediate mode UI library for Rust
Documentation

#[derive(Clone)]
struct DockingTab {
    text: &'static str,
    n: i32
}

impl pierro::DockingTab for DockingTab {

    type Context = ();

    fn title(&self) -> String {
        self.text.to_owned()
    }

    fn render(&mut self, ui: &mut pierro::UI, _context: &mut ()) {
        pierro::label(ui, format!("{}: {}", self.text, self.n));
        if pierro::button(ui, "Add 100!").mouse_clicked() {
            self.n += 100;
        }
    }
    
    fn add_tab_dropdown<F: FnMut(Self)>(ui: &mut pierro::UI, mut add_tab: F, _context: &mut ()) {
        if pierro::menu_button(ui, "Hey").mouse_clicked() {
            add_tab(Self {
                text: "Hey",
                n: 0,
            });
        }
        if pierro::menu_button(ui, "Goodbye").mouse_clicked() {
            add_tab(Self {
                text: "Goodbye",
                n: 123,
            });
        }
    }

}

struct DockingApp {
    docking_state: pierro::DockingState<DockingTab>,
}

impl pierro::App for DockingApp {

    fn window_config() -> pierro::WindowConfig {
        pierro::WindowConfig::default()
            .with_title("Pierro Docking")
    }

    fn tick(&mut self, ui: &mut pierro::UI) {
        pierro::menu_bar(ui, |ui| {
            pierro::menu_bar_item(ui, "Menu", |ui| {
                pierro::menu_button(ui, "Some");
                pierro::menu_button(ui, "Stuff");
                pierro::menu_button(ui, "Here");
            });
        });
        self.docking_state.render(ui, &mut ());
    }

}

fn main() {
    pierro::run(DockingApp {
        docking_state: pierro::DockingState::new(vec![
            DockingTab { text: "Hello", n: 0 },
            DockingTab { text: "World", n: 0 },
        ]),
    });
}