Clean up context menu documentation

This commit is contained in:
Emil Ernerfeldt 2021-12-28 13:09:14 +01:00
parent 369ce95bbd
commit f919b0cc05
3 changed files with 26 additions and 19 deletions

View file

@ -313,16 +313,6 @@ impl CtxRef {
pub fn debug_painter(&self) -> Painter {
Self::layer_painter(self, LayerId::debug())
}
/// Respond to secondary clicks (right-clicks) by showing the given menu.
pub(crate) fn show_context_menu(
&self,
response: &Response,
add_contents: impl FnOnce(&mut Ui),
) {
self.context_menu_system()
.context_menu(response, add_contents);
}
}
// ----------------------------------------------------------------------------
@ -332,7 +322,7 @@ impl CtxRef {
/// This is the first thing you need when working with egui.
/// Use [`CtxRef`] to create and refer to a [`Context`].
///
/// Contains the [`InputState`], [`Memory`], [`Output`], and more.///
/// Contains the [`InputState`], [`Memory`], [`Output`], and more.
///
/// Almost all methods are marked `&self`, [`Context`] has interior mutability (protected by mutexes).
/// Multi-threaded access to a [`Context`] is behind the feature flag `multi_threaded`.

View file

@ -42,7 +42,7 @@ impl BarState {
ctx.memory().data.insert_temp(bar_id, self);
}
/// Show a menu at pointer if right-clicked response.
/// Show a menu at pointer if primary-clicked response.
/// Should be called from [`Context`] on a [`Response`]
pub fn bar_menu<R>(
&mut self,
@ -87,8 +87,11 @@ pub fn bar<R>(ui: &mut Ui, add_contents: impl FnOnce(&mut Ui) -> R) -> InnerResp
add_contents(ui)
})
}
/// Construct a top level menu in a menu bar. This would be e.g. "File", "Edit" etc.
///
/// Responds to primary clicks.
///
/// Returns `None` if the menu is not open.
pub fn menu_button<R>(
ui: &mut Ui,
@ -97,8 +100,11 @@ pub fn menu_button<R>(
) -> InnerResponse<Option<R>> {
stationary_menu_impl(ui, title, Box::new(add_contents))
}
/// Construct a nested sub menu in another menu.
///
/// Opens on hover.
///
/// Returns `None` if the menu is not open.
pub(crate) fn submenu_button<R>(
ui: &mut Ui,
@ -150,7 +156,9 @@ pub(crate) fn menu_ui<'c, R>(
inner_response
}
/// build a top level menu with a button
/// Build a top level menu with a button.
///
/// Responds to primary clicks.
fn stationary_menu_impl<'c, R>(
ui: &mut Ui,
title: impl Into<WidgetText>,
@ -275,7 +283,10 @@ impl MenuRoot {
}
(MenuResponse::Stay, None)
}
/// interaction with a stationary menu, i.e. fixed in another Ui
/// Interaction with a stationary menu, i.e. fixed in another Ui.
///
/// Responds to primary clicks.
fn stationary_interaction(
response: &Response,
root: &mut MenuRootManager,
@ -310,7 +321,8 @@ impl MenuRoot {
}
MenuResponse::Stay
}
/// interaction with a context menu
/// Interaction with a context menu (secondary clicks).
fn context_interaction(
response: &Response,
root: &mut Option<MenuRoot>,
@ -328,10 +340,9 @@ impl MenuRoot {
destroy = root.id == response.id;
}
if !in_old_menu {
let in_target = response.hovered();
if in_target && pointer.secondary_down() {
if response.hovered() && pointer.secondary_down() {
return MenuResponse::Create(pos, id);
} else if (in_target && pointer.primary_down()) || destroy {
} else if (response.hovered() && pointer.primary_down()) || destroy {
return MenuResponse::Close;
}
}
@ -339,6 +350,7 @@ impl MenuRoot {
}
MenuResponse::Stay
}
fn handle_menu_response(root: &mut MenuRootManager, menu_response: MenuResponse) {
match menu_response {
MenuResponse::Create(pos, id) => {
@ -348,11 +360,14 @@ impl MenuRoot {
MenuResponse::Stay => {}
}
}
/// Respond to secondary (right) clicks.
pub fn context_click_interaction(response: &Response, root: &mut MenuRootManager, id: Id) {
let menu_response = Self::context_interaction(response, root, id);
Self::handle_menu_response(root, menu_response);
}
// Responds to primary clicks.
pub fn stationary_click_interaction(response: &Response, root: &mut MenuRootManager, id: Id) {
let menu_response = Self::stationary_interaction(response, root, id);
Self::handle_menu_response(root, menu_response);

View file

@ -491,7 +491,9 @@ impl Response {
/// # });
/// ```
pub fn context_menu(self, add_contents: impl FnOnce(&mut Ui)) -> Self {
self.ctx.show_context_menu(&self, add_contents);
self.ctx
.context_menu_system()
.context_menu(&self, add_contents);
self
}
}