diff --git a/egui/src/lib.rs b/egui/src/lib.rs index 4afed355..837d8d27 100644 --- a/egui/src/lib.rs +++ b/egui/src/lib.rs @@ -7,10 +7,12 @@ //! With it you can then get access to an `Ui` where you can put widgets. //! Use one of `SidePanel`, `TopPanel`, `CentralPanel`, `Window` or `Area`. For instace: //! -//! ``` ignore -//! egui::CentralPanel::default().show(ctx, |ui| { +//! ``` +//! # let mut ctx = egui::Context::new(); +//! # ctx.begin_frame(Default::default()); +//! egui::CentralPanel::default().show(&ctx, |ui| { //! ui.label("Hello"); -//! }) +//! }); //! ``` //! //! diff --git a/egui/src/memory.rs b/egui/src/memory.rs index 900d6f12..822b9488 100644 --- a/egui/src/memory.rs +++ b/egui/src/memory.rs @@ -144,6 +144,11 @@ impl Memory { } } + /// Stop editing of active `TextEdit` (if any). + pub fn stop_text_input(&mut self) { + self.interaction.kb_focus_id = None; + } + /// Forget window positions, sizes etc. /// Can be used to auto-layout windows. pub fn reset_areas(&mut self) { diff --git a/egui/src/menu.rs b/egui/src/menu.rs index 8ebb228c..1775a528 100644 --- a/egui/src/menu.rs +++ b/egui/src/menu.rs @@ -1,7 +1,7 @@ //! Menu bar functionality (very basic so far). //! //! Usage: -//! ``` rust +//! ``` //! fn show_menu(ui: &mut egui::Ui) { //! use egui::{menu, Button}; //! diff --git a/egui/src/types.rs b/egui/src/types.rs index 3c7237b3..3acb7cd5 100644 --- a/egui/src/types.rs +++ b/egui/src/types.rs @@ -153,10 +153,12 @@ impl std::ops::BitOr for Response { /// To summarize the response from many widgets you can use this pattern: /// -/// ``` ignore -/// let mut response = ui.add(some_widget); -/// response |= ui.add(some_other_widget); -/// response |= ui.add(some_widget); +/// ``` +/// # let mut ui = egui::Ui::__test(); +/// # let (widget_a, widget_b, widget_c) = (egui::Label::new("a"), egui::Label::new("b"), egui::Label::new("c")); +/// let mut response = ui.add(widget_a); +/// response |= ui.add(widget_b); +/// response |= ui.add(widget_c); /// if response.active { ui.label("You are interacting with one of the widgets"); } /// ``` impl std::ops::BitOrAssign for Response { diff --git a/egui/src/ui.rs b/egui/src/ui.rs index dde0a53a..6282aa6b 100644 --- a/egui/src/ui.rs +++ b/egui/src/ui.rs @@ -104,6 +104,19 @@ impl Ui { } } + /// Empty `Ui` for use in tests. + pub fn __test() -> Self { + let mut ctx = Context::new(); + ctx.begin_frame(Default::default()); + let id = Id::new("__test"); + let layer_id = LayerId { + order: Order::Middle, + id, + }; + let rect = Rect::from_min_size(Pos2::new(0.0, 0.0), vec2(1000.0, 1000.0)); + Self::new(ctx, layer_id, id, rect, rect) + } + // ------------------------------------------------- pub fn id(&self) -> Id { @@ -799,10 +812,11 @@ impl Ui { /// Temporarily split split an Ui into several columns. /// - /// ``` ignore + /// ``` + /// # let mut ui = egui::Ui::__test(); /// ui.columns(2, |columns| { - /// columns[0].add(egui::widgets::label!("First column")); - /// columns[1].add(egui::widgets::label!("Second column")); + /// columns[0].label("First column"); + /// columns[1].label("Second column"); /// }); /// ``` pub fn columns(&mut self, num_columns: usize, add_contents: F) -> R diff --git a/egui/src/widgets/text_edit.rs b/egui/src/widgets/text_edit.rs index 9292c3c3..db415583 100644 --- a/egui/src/widgets/text_edit.rs +++ b/egui/src/widgets/text_edit.rs @@ -9,6 +9,18 @@ pub(crate) struct State { } /// A text region that the user can edit the contents of. +/// +/// Example: +/// +/// ``` +/// # let mut ui = egui::Ui::__test(); +/// # let mut my_string = String::new(); +/// let response = ui.add(egui::TextEdit::new(&mut my_string).multiline(false)); +/// if response.has_kb_focus && ui.input().key_pressed(egui::Key::Enter) { +/// ui.memory().stop_text_input(); +/// // use my_string +/// } +/// ``` #[derive(Debug)] pub struct TextEdit<'t> { text: &'t mut String,