mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-14 15:08:36 +00:00
Unsafe function to get the "current UI" out of thin air
This commit is contained in:
parent
21dca8bae6
commit
91eec219f6
19
src/lib.rs
19
src/lib.rs
@ -233,7 +233,12 @@ impl ImGui {
|
||||
io.display_size.y = height as c_float;
|
||||
io.delta_time = delta_time;
|
||||
}
|
||||
unsafe { imgui_sys::igNewFrame() };
|
||||
unsafe {
|
||||
imgui_sys::igNewFrame();
|
||||
CURRENT_UI = Some(Ui {
|
||||
imgui: mem::transmute(self as &'a ImGui)
|
||||
});
|
||||
}
|
||||
Ui {
|
||||
imgui: self
|
||||
}
|
||||
@ -243,11 +248,14 @@ impl ImGui {
|
||||
impl Drop for ImGui {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
CURRENT_UI = None;
|
||||
imgui_sys::igShutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static mut CURRENT_UI: Option<Ui<'static>> = None;
|
||||
|
||||
#[cfg(feature = "sdl2")]
|
||||
impl ImGui {
|
||||
pub fn update_mouse(&mut self, mouse: &::sdl2::mouse::MouseUtil) {
|
||||
@ -315,7 +323,7 @@ impl<'ui> Ui<'ui> {
|
||||
let mut im_draw_data = mem::zeroed();
|
||||
RENDER_DRAW_LISTS_STATE.0 = &mut im_draw_data;
|
||||
imgui_sys::igRender();
|
||||
RENDER_DRAW_LISTS_STATE.0 = 0 as *mut imgui_sys::ImDrawData;
|
||||
RENDER_DRAW_LISTS_STATE.0 = ptr::null_mut();
|
||||
|
||||
for &cmd_list in im_draw_data.cmd_lists() {
|
||||
let draw_list =
|
||||
@ -326,6 +334,7 @@ impl<'ui> Ui<'ui> {
|
||||
};
|
||||
try!(f(draw_list));
|
||||
}
|
||||
CURRENT_UI = None;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@ -350,6 +359,12 @@ impl<'ui> Ui<'ui> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Ui<'a> {
|
||||
pub unsafe fn current_ui() -> Option<&'a Ui<'a>> {
|
||||
CURRENT_UI.as_ref()
|
||||
}
|
||||
}
|
||||
|
||||
// Window
|
||||
impl<'ui> Ui<'ui> {
|
||||
pub fn window<'p>(&self) -> Window<'ui, 'p> { Window::new() }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user