mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-11 05:28:35 +00:00
Example showing various methods of creating windows
- ui.window(...).build() versus ui.window.begin() - ui.child_window(...)
This commit is contained in:
parent
7953c4858b
commit
54598aa24d
69
imgui-examples/examples/creating_windows.rs
Normal file
69
imgui-examples/examples/creating_windows.rs
Normal file
@ -0,0 +1,69 @@
|
||||
mod support;
|
||||
|
||||
fn main() {
|
||||
let system = support::init(file!());
|
||||
|
||||
system.main_loop(move |_, ui| {
|
||||
// If we don't explicitly create a window before creating some kind of widget, then Dear Imgui will automatically create one
|
||||
ui.text("This text will appear in a default window titled 'Debug'");
|
||||
|
||||
// However, in almost all cases it's best to make a window, so it has a useful title etc
|
||||
|
||||
// imgui-rs has two main methods of creating windows (and these same approaches
|
||||
// apply to many other widgets). First, callback based:
|
||||
|
||||
ui.window("My window via callback")
|
||||
.build(||{
|
||||
ui.text("This content appears in a window");
|
||||
|
||||
// Everything in this callback appears in the window, like this button:
|
||||
ui.button("This button");
|
||||
});
|
||||
|
||||
// Often the callback approach is most convenient, however occasionally the callbacks can be hard to use.
|
||||
// In this case, there is the "token based" approach. You call a method and get a "window token",
|
||||
// everything that happens until the token is dropped is included in the window this is more-or-less how
|
||||
// the Dear ImGui C++ API works)
|
||||
|
||||
// Here we (maybe) get a window token:
|
||||
let window_token = ui.window("Token based window").begin();
|
||||
if let Some(_t) = window_token {
|
||||
// If the token is Some(...) then the window contents are visible, so we need to draw them!
|
||||
ui.text("Window contents!")
|
||||
}
|
||||
|
||||
// Here we create a window with a specific size, and force it to always have a vertical scrollbar visible
|
||||
ui.window("Big complex window")
|
||||
.size([200.0, 100.0], imgui::Condition::FirstUseEver)
|
||||
.always_vertical_scrollbar(true)
|
||||
.build(||{
|
||||
ui.text("Imagine something complicated here..");
|
||||
|
||||
// Note you can create windows inside other windows, however, they both appear as separate windows.
|
||||
// For example, somewhere deep inside a complex window, we can quickly create a widget to display a
|
||||
// variable, like a graphical "debug print"
|
||||
ui.window("Confusion").build(||{
|
||||
ui.text(format!("Some variable: {:?}", ui.io().mouse_pos))
|
||||
})
|
||||
});
|
||||
|
||||
// If you want to nest windows inside other windows, you can a "child window".
|
||||
// This is essentially a scrollable area, with all the same properties as a regular window
|
||||
ui.window("Parent window").build(||{
|
||||
ui.child_window("Child window")
|
||||
.size([100.0, 100.0])
|
||||
.build(||{
|
||||
for _ in 0..10 {
|
||||
ui.text("Lines and");
|
||||
}
|
||||
});
|
||||
ui.child_window("Second child window")
|
||||
.size([100.0, 100.0])
|
||||
.build(||{
|
||||
for _ in 0..10 {
|
||||
ui.text("More and");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user