diff --git a/Cargo.lock b/Cargo.lock index 0747a84e6..75656cb5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1135,6 +1135,7 @@ dependencies = [ "eframe", "egui_extras", "env_logger", + "serde", ] [[package]] diff --git a/examples/dock/Cargo.toml b/examples/dock/Cargo.toml index ea2d0c7d9..a7b27a2e6 100644 --- a/examples/dock/Cargo.toml +++ b/examples/dock/Cargo.toml @@ -10,7 +10,9 @@ publish = false [dependencies] eframe = { path = "../../crates/eframe", features = [ + "persistence", "__screenshot", # __screenshot is so we can dump a screenshot using EFRAME_SCREENSHOT_TO ] } egui_extras = { path = "../../crates/egui_extras" } env_logger = "0.10" +serde = { version = "1.0", features = ["derive"] } diff --git a/examples/dock/src/main.rs b/examples/dock/src/main.rs index 0180ed621..1319a6510 100644 --- a/examples/dock/src/main.rs +++ b/examples/dock/src/main.rs @@ -11,9 +11,22 @@ fn main() -> Result<(), eframe::Error> { initial_window_size: Some(egui::vec2(800.0, 600.0)), ..Default::default() }; - eframe::run_native("Dock", options, Box::new(|_cc| Box::::default())) + eframe::run_native( + "Dock", + options, + Box::new(|cc| { + let mut app = MyApp::default(); + if let Some(storage) = cc.storage { + if let Some(state) = eframe::get_value(storage, eframe::APP_KEY) { + app = state; + } + } + Box::new(app) + }), + ) } +#[derive(serde::Deserialize, serde::Serialize)] pub struct View { title: String, color: Color32, @@ -68,8 +81,11 @@ impl dock::Behavior for DockBehavior { } } +#[derive(serde::Deserialize, serde::Serialize)] struct MyApp { dock: dock::Dock, + + #[serde(skip, default)] behavior: DockBehavior, } @@ -132,6 +148,10 @@ impl eframe::App for MyApp { self.dock.ui(&mut self.behavior, ui); }); } + + fn save(&mut self, storage: &mut dyn eframe::Storage) { + eframe::set_value(storage, eframe::APP_KEY, &self); + } } fn tree_ui(