Skip to content

Commit

Permalink
Add functions begin_popup_context_*.
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigorc committed Jul 23, 2023
1 parent ba02f22 commit c6decca
Showing 1 changed file with 79 additions and 0 deletions.
79 changes: 79 additions & 0 deletions imgui/src/popups.rs
Expand Up @@ -247,6 +247,85 @@ impl Ui {
pub fn close_current_popup(&self) {
unsafe { sys::igCloseCurrentPopup() };
}

/// Open+begin popup when clicked with the right mouse button on last item.
/// If you want to use that on a non-interactive item such as text() use [`Self::begin_popup_context_item_id`].
#[doc(alias = "BeginPopupContextItem")]
pub fn begin_popup_context_item(&self) -> Option<PopupToken<'_>> {
let render = unsafe {
sys::igBeginPopupContextItem(
std::ptr::null(),
imgui_sys::ImGuiPopupFlags_MouseButtonRight as i32,
)
};

if render {
Some(PopupToken::new(self))
} else {
None
}
}

/// Open+begin popup when clicked with the right mouse button on the given item.
/// If you want to use the last item and it has an id you, you can use [`Self::begin_popup_context_item`].
#[doc(alias = "BeginPopupContextItem")]
pub fn begin_popup_context_item_id<Label: AsRef<str>>(
&self,
str_id: Label,
) -> Option<PopupToken<'_>> {
let render = unsafe {
sys::igBeginPopupContextItem(
self.scratch_txt(str_id),
imgui_sys::ImGuiPopupFlags_MouseButtonRight as i32,
)
};

if render {
Some(PopupToken::new(self))
} else {
None
}
}

/// Open+begin popup when clicked on current window.
#[doc(alias = "BeginPopupContextWindow")]
pub fn begin_popup_context_window<Label: AsRef<str>>(
&self,
str_id: Label,
) -> Option<PopupToken<'_>> {
let render = unsafe {
sys::igBeginPopupContextWindow(
self.scratch_txt(str_id),
imgui_sys::ImGuiPopupFlags_MouseButtonRight as i32,
)
};

if render {
Some(PopupToken::new(self))
} else {
None
}
}

/// Open+begin popup when clicked in void (where there are no windows).
#[doc(alias = "BeginPopupContextVoid")]
pub fn begin_popup_context_void<Label: AsRef<str>>(
&self,
str_id: Label,
) -> Option<PopupToken<'_>> {
let render = unsafe {
sys::igBeginPopupContextWindow(
self.scratch_txt(str_id),
imgui_sys::ImGuiPopupFlags_MouseButtonRight as i32,
)
};

if render {
Some(PopupToken::new(self))
} else {
None
}
}
}

create_token!(
Expand Down

0 comments on commit c6decca

Please sign in to comment.