From 1d0858c5a38d3cbd049d0536a39ae7c4b69d74ed Mon Sep 17 00:00:00 2001 From: Rodrigo Rivas Costa Date: Wed, 5 Apr 2023 16:39:05 +0200 Subject: [PATCH] Add functions `begin_popup_context_*`. --- imgui/src/popups.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/imgui/src/popups.rs b/imgui/src/popups.rs index b22cd7a..038a42d 100644 --- a/imgui/src/popups.rs +++ b/imgui/src/popups.rs @@ -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> { + 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>( + &self, + str_id: Label, + ) -> Option> { + 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>( + &self, + str_id: Label, + ) -> Option> { + 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>( + &self, + str_id: Label, + ) -> Option> { + 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!(