mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-27 13:28:28 +00:00
[Ui] Add popup_modal wrapper
This commit is contained in:
parent
b98e57d055
commit
e68047efd1
@ -25,6 +25,7 @@ pub use input::{
|
|||||||
pub use menus::{Menu, MenuItem};
|
pub use menus::{Menu, MenuItem};
|
||||||
pub use plothistogram::PlotHistogram;
|
pub use plothistogram::PlotHistogram;
|
||||||
pub use plotlines::PlotLines;
|
pub use plotlines::PlotLines;
|
||||||
|
pub use popup_modal::PopupModal;
|
||||||
pub use progressbar::ProgressBar;
|
pub use progressbar::ProgressBar;
|
||||||
pub use sliders::{
|
pub use sliders::{
|
||||||
SliderFloat, SliderFloat2, SliderFloat3, SliderFloat4, SliderInt, SliderInt2, SliderInt3,
|
SliderFloat, SliderFloat2, SliderFloat3, SliderFloat4, SliderInt, SliderInt2, SliderInt3,
|
||||||
@ -49,6 +50,7 @@ mod input;
|
|||||||
mod menus;
|
mod menus;
|
||||||
mod plothistogram;
|
mod plothistogram;
|
||||||
mod plotlines;
|
mod plotlines;
|
||||||
|
mod popup_modal;
|
||||||
mod progressbar;
|
mod progressbar;
|
||||||
mod sliders;
|
mod sliders;
|
||||||
mod string;
|
mod string;
|
||||||
@ -1204,6 +1206,9 @@ impl<'ui> Ui<'ui> {
|
|||||||
unsafe { sys::igEndPopup() };
|
unsafe { sys::igEndPopup() };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn popup_modal<'p>(&self, str_id: &'p ImStr) -> PopupModal<'ui, 'p> {
|
||||||
|
PopupModal::new(self, str_id)
|
||||||
|
}
|
||||||
pub fn close_current_popup(&self) {
|
pub fn close_current_popup(&self) {
|
||||||
unsafe { sys::igCloseCurrentPopup() };
|
unsafe { sys::igCloseCurrentPopup() };
|
||||||
}
|
}
|
||||||
|
|||||||
44
src/popup_modal.rs
Normal file
44
src/popup_modal.rs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
use std::marker::PhantomData;
|
||||||
|
use std::ptr;
|
||||||
|
|
||||||
|
use super::{ImGuiWindowFlags, ImStr, Ui};
|
||||||
|
|
||||||
|
use sys;
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
pub struct PopupModal<'ui, 'p> {
|
||||||
|
label: &'p ImStr,
|
||||||
|
opened: Option<&'p mut bool>,
|
||||||
|
flags: ImGuiWindowFlags,
|
||||||
|
_phantom: PhantomData<&'ui Ui<'ui>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'ui, 'p> PopupModal<'ui, 'p> {
|
||||||
|
pub fn new(_: &Ui<'ui>, label: &'p ImStr) -> Self {
|
||||||
|
PopupModal {
|
||||||
|
label,
|
||||||
|
opened: None,
|
||||||
|
flags: ImGuiWindowFlags::empty(),
|
||||||
|
_phantom: PhantomData,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn opened(mut self, opened: &'p mut bool) -> Self {
|
||||||
|
self.opened = Some(opened);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
pub fn build<F: FnOnce()>(self, f: F) {
|
||||||
|
let render = unsafe {
|
||||||
|
sys::igBeginPopupModal(
|
||||||
|
self.label.as_ptr(),
|
||||||
|
self.opened
|
||||||
|
.map(|x| x as *mut bool)
|
||||||
|
.unwrap_or(ptr::null_mut()),
|
||||||
|
self.flags,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
if render {
|
||||||
|
f();
|
||||||
|
unsafe { sys::igEndMenu() };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user