From abb56a617d913f1556f037cfd3103f475d8e4944 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Tue, 27 Aug 2024 10:49:39 +0200 Subject: [PATCH] Make sure `egui_extras` compile even without `serde` feature --- crates/egui_extras/src/syntax_highlighting.rs | 47 ++++++++++++++----- crates/egui_extras/src/table.rs | 23 ++++++--- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/crates/egui_extras/src/syntax_highlighting.rs b/crates/egui_extras/src/syntax_highlighting.rs index 557925d9187..8ddd4606507 100644 --- a/crates/egui_extras/src/syntax_highlighting.rs +++ b/crates/egui_extras/src/syntax_highlighting.rs @@ -153,16 +153,22 @@ impl CodeTheme { /// /// There is one dark and one light theme stored at any one time. pub fn from_memory(ctx: &egui::Context) -> Self { - if ctx.style().visuals.dark_mode { - ctx.data_mut(|d| { - d.get_persisted(egui::Id::new("dark")) - .unwrap_or_else(Self::dark) - }) + #![allow(clippy::needless_return)] + + let (id, default) = if ctx.style().visuals.dark_mode { + (egui::Id::new("dark"), Self::dark as fn() -> Self) } else { - ctx.data_mut(|d| { - d.get_persisted(egui::Id::new("light")) - .unwrap_or_else(Self::light) - }) + (egui::Id::new("light"), Self::light as fn() -> Self) + }; + + #[cfg(feature = "serde")] + { + return ctx.data_mut(|d| d.get_persisted(id).unwrap_or_else(default)); + } + + #[cfg(not(feature = "serde"))] + { + return ctx.data_mut(|d| d.get_temp(id).unwrap_or_else(default)); } } @@ -170,11 +176,17 @@ impl CodeTheme { /// /// There is one dark and one light theme stored at any one time. pub fn store_in_memory(self, ctx: &egui::Context) { - if self.dark_mode { - ctx.data_mut(|d| d.insert_persisted(egui::Id::new("dark"), self)); + let id = if ctx.style().visuals.dark_mode { + egui::Id::new("dark") } else { - ctx.data_mut(|d| d.insert_persisted(egui::Id::new("light"), self)); - } + egui::Id::new("light") + }; + + #[cfg(feature = "serde")] + ctx.data_mut(|d| d.insert_persisted(id, self)); + + #[cfg(not(feature = "serde"))] + ctx.data_mut(|d| d.insert_temp(id, self)); } } @@ -245,9 +257,15 @@ impl CodeTheme { pub fn ui(&mut self, ui: &mut egui::Ui) { ui.horizontal_top(|ui| { let selected_id = egui::Id::NULL; + + #[cfg(feature = "serde")] let mut selected_tt: TokenType = ui.data_mut(|d| *d.get_persisted_mut_or(selected_id, TokenType::Comment)); + #[cfg(not(feature = "serde"))] + let mut selected_tt: TokenType = + ui.data_mut(|d| *d.get_temp_mut_or(selected_id, TokenType::Comment)); + ui.vertical(|ui| { ui.set_width(150.0); egui::widgets::global_dark_light_mode_buttons(ui); @@ -288,7 +306,10 @@ impl CodeTheme { ui.add_space(16.0); + #[cfg(feature = "serde")] ui.data_mut(|d| d.insert_persisted(selected_id, selected_tt)); + #[cfg(not(feature = "serde"))] + ui.data_mut(|d| d.insert_temp(selected_id, selected_tt)); egui::Frame::group(ui.style()) .inner_margin(egui::Vec2::splat(2.0)) diff --git a/crates/egui_extras/src/table.rs b/crates/egui_extras/src/table.rs index 91041dcdaa7..6d13e4b2091 100644 --- a/crates/egui_extras/src/table.rs +++ b/crates/egui_extras/src/table.rs @@ -543,12 +543,13 @@ impl TableState { let rect = Rect::from_min_size(ui.available_rect_before_wrap().min, Vec2::ZERO); ui.ctx().check_for_id_clash(state_id, rect, "Table"); - let state = ui - .data_mut(|d| d.get_persisted::(state_id)) - .filter(|state| { - // make sure that the stored widths aren't out-dated - state.column_widths.len() == columns.len() - }); + #[cfg(feature = "serde")] + let state = ui.data_mut(|d| d.get_persisted::(state_id)); + #[cfg(not(feature = "serde"))] + let state = ui.data_mut(|d| d.get_temp::(state_id)); + + // Make sure that the stored widths aren't out-dated: + let state = state.filter(|state| state.column_widths.len() == columns.len()); let is_sizing_pass = ui.is_sizing_pass() || state.is_none() && columns.iter().any(|c| c.is_auto()); @@ -597,7 +598,15 @@ impl TableState { } fn store(self, ui: &egui::Ui, state_id: egui::Id) { - ui.data_mut(|d| d.insert_persisted(state_id, self)); + #![allow(clippy::needless_return)] + #[cfg(feature = "serde")] + { + return ui.data_mut(|d| d.insert_persisted(state_id, self)); + } + #[cfg(not(feature = "serde"))] + { + return ui.data_mut(|d| d.insert_temp(state_id, self)); + } } fn reset(ui: &egui::Ui, state_id: egui::Id) {