Only show id clash warnings in debug builds by default (#2930)

Change with `egui_ctx.options_mut(|opt| opt.warn_on_id_clash = true);`
This commit is contained in:
Emil Ernerfeldt 2023-04-19 08:53:37 +02:00 committed by GitHub
parent d486c76a9f
commit b8e798777d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 52 deletions

View File

@ -463,7 +463,13 @@ impl Context {
/// because that's where the warning will be painted. If you don't know what size to pick, just pick [`Vec2::ZERO`]. /// because that's where the warning will be painted. If you don't know what size to pick, just pick [`Vec2::ZERO`].
pub fn check_for_id_clash(&self, id: Id, new_rect: Rect, what: &str) { pub fn check_for_id_clash(&self, id: Id, new_rect: Rect, what: &str) {
let prev_rect = self.frame_state_mut(move |state| state.used_ids.insert(id, new_rect)); let prev_rect = self.frame_state_mut(move |state| state.used_ids.insert(id, new_rect));
if let Some(prev_rect) = prev_rect {
if !self.options(|opt| opt.warn_on_id_clash) {
return;
}
let Some(prev_rect) = prev_rect else { return };
// it is ok to reuse the same ID for e.g. a frame around a widget, // it is ok to reuse the same ID for e.g. a frame around a widget,
// or to check for interaction with the same widget twice: // or to check for interaction with the same widget twice:
if prev_rect.expand(0.1).contains_rect(new_rect) if prev_rect.expand(0.1).contains_rect(new_rect)
@ -525,7 +531,6 @@ impl Context {
show_error(new_rect, format!("Second use of {} ID {}", what, id_str)); show_error(new_rect, format!("Second use of {} ID {}", what, id_str));
} }
} }
}
// --------------------------------------------------------------------- // ---------------------------------------------------------------------

View File

@ -21,7 +21,6 @@ pub(crate) struct AccessKitFrameState {
#[derive(Clone)] #[derive(Clone)]
pub(crate) struct FrameState { pub(crate) struct FrameState {
/// All [`Id`]s that were used this frame. /// All [`Id`]s that were used this frame.
/// Used to debug [`Id`] clashes of widgets.
pub(crate) used_ids: IdMap<Rect>, pub(crate) used_ids: IdMap<Rect>,
/// Starts off as the screen_rect, shrinks as panels are added. /// Starts off as the screen_rect, shrinks as panels are added.

View File

@ -121,6 +121,11 @@ pub struct Options {
/// This can lead to fewer texture operations, but may use up the texture atlas quicker /// This can lead to fewer texture operations, but may use up the texture atlas quicker
/// if you are changing [`Style::text_styles`], of have a lot of text styles. /// if you are changing [`Style::text_styles`], of have a lot of text styles.
pub preload_font_glyphs: bool, pub preload_font_glyphs: bool,
/// Check reusing of [`Id`]s, and show a visual warning on screen when one is found.
///
/// By default this is `true` in debug builds.
pub warn_on_id_clash: bool,
} }
impl Default for Options { impl Default for Options {
@ -130,6 +135,7 @@ impl Default for Options {
tessellation_options: Default::default(), tessellation_options: Default::default(),
screen_reader: false, screen_reader: false,
preload_font_glyphs: true, preload_font_glyphs: true,
warn_on_id_clash: cfg!(debug_assertions),
} }
} }
} }

View File

@ -48,6 +48,9 @@ impl super::Demo for IdTest {
impl super::View for IdTest { impl super::View for IdTest {
fn ui(&mut self, ui: &mut egui::Ui) { fn ui(&mut self, ui: &mut egui::Ui) {
// Make sure the warnings are on (by default they are only on in debug builds).
ui.ctx().options_mut(|opt| opt.warn_on_id_clash = true);
ui.heading("Name collision example"); ui.heading("Name collision example");
ui.label("\ ui.label("\