Skip to content

Commit

Permalink
Fix compilation of egui_extras without serde feature (#5014)
Browse files Browse the repository at this point in the history
* Closes #4771
  • Loading branch information
emilk authored Aug 27, 2024
1 parent bd7d71e commit 58bc67e
Show file tree
Hide file tree
Showing 8 changed files with 82 additions and 21 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ jobs:
- name: check epaint --no-default-features
run: cargo check --locked --no-default-features --lib -p epaint

# Regression test for https://github.com/emilk/egui/issues/4771
- name: cargo check -p test_egui_extras_compilation
run: cargo check -p test_egui_extras_compilation

- name: Test doc-tests
run: cargo test --doc --all-features

Expand Down
8 changes: 8 additions & 0 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3804,6 +3804,14 @@ dependencies = [
"winapi-util",
]

[[package]]
name = "test_egui_extras_compilation"
version = "0.1.0"
dependencies = [
"eframe",
"egui_extras",
]

[[package]]
name = "test_inline_glow_paint"
version = "0.1.0"
Expand Down
2 changes: 1 addition & 1 deletion crates/egui_extras/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ all-features = true


[features]
default = ["dep:mime_guess2", "serde"]
default = ["dep:mime_guess2"]

## Shorthand for enabling the different types of image loaders (`file`, `http`, `image`, `svg`).
all_loaders = ["file", "http", "image", "svg", "gif"]
Expand Down
47 changes: 34 additions & 13 deletions crates/egui_extras/src/syntax_highlighting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,28 +153,40 @@ 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));
}
}

/// Store theme to egui memory.
///
/// 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));
}
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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))
Expand Down
23 changes: 16 additions & 7 deletions crates/egui_extras/src/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::<Self>(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::<Self>(state_id));
#[cfg(not(feature = "serde"))]
let state = ui.data_mut(|d| d.get_temp::<Self>(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());
Expand Down Expand Up @@ -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) {
Expand Down
15 changes: 15 additions & 0 deletions tests/test_egui_extras_compilation/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[package]
name = "test_egui_extras_compilation"
version = "0.1.0"
license = "MIT OR Apache-2.0"
edition = "2021"
rust-version = "1.76"
publish = false

[lints]
workspace = true


[dependencies]
eframe = { workspace = true, features = ["default", "persistence"] }
egui_extras = { workspace = true }
1 change: 1 addition & 0 deletions tests/test_egui_extras_compilation/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Regression test for <https://github.com/emilk/egui/issues/4771>
3 changes: 3 additions & 0 deletions tests/test_egui_extras_compilation/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
//! Regression test for <https://github.com/emilk/egui/issues/4771>
fn main() {}

0 comments on commit 58bc67e

Please sign in to comment.