1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-30 21:30:03 -04:00

[eframe] Make persistence, http and time optional features

Saves on compile times.
This commit is contained in:
Emil Ernerfeldt
2021-01-04 01:44:02 +01:00
parent 00269f96c0
commit 69d31a5e47
30 changed files with 412 additions and 303 deletions

View File

@@ -9,9 +9,9 @@ const RED: Color32 = Color32::RED;
const TRANSPARENT: Color32 = Color32::TRANSPARENT;
const WHITE: Color32 = Color32::WHITE;
#[derive(serde::Deserialize, serde::Serialize)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
pub struct ColorTest {
#[serde(skip)]
#[cfg_attr(feature = "persistence", serde(skip))]
tex_mngr: TextureManager,
vertex_gradients: bool,
texture_gradients: bool,

View File

@@ -2,8 +2,9 @@
///
/// Implements `epi::App` so it can be used with
/// [`egui_glium`](https://crates.io/crates/egui_glium) and [`egui_web`](https://crates.io/crates/egui_web).
#[derive(Default, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(Default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct DemoApp {
demo_windows: super::DemoWindows,
}
@@ -13,10 +14,12 @@ impl epi::App for DemoApp {
"✨ Egui Demo"
}
#[cfg(feature = "persistence")]
fn load(&mut self, storage: &dyn epi::Storage) {
*self = epi::get_value(storage, epi::APP_KEY).unwrap_or_default()
}
#[cfg(feature = "persistence")]
fn save(&mut self, storage: &mut dyn epi::Storage) {
epi::set_value(storage, epi::APP_KEY, self);
}

View File

@@ -1,7 +1,7 @@
use egui::{containers::*, *};
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct DancingStrings {}
impl Default for DancingStrings {

View File

@@ -2,8 +2,8 @@ use super::*;
use egui::{color::*, *};
/// Showcase some ui code
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct DemoWindow {
num_columns: usize,
@@ -106,8 +106,9 @@ impl DemoWindow {
// ----------------------------------------------------------------------------
#[derive(PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(PartialEq)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
struct ColorWidgets {
srgba_unmul: [u8; 4],
srgba_premul: [u8; 4],
@@ -176,8 +177,8 @@ impl ColorWidgets {
// ----------------------------------------------------------------------------
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
struct BoxPainting {
size: Vec2,
corner_radius: f32,
@@ -220,8 +221,8 @@ impl BoxPainting {
// ----------------------------------------------------------------------------
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
struct LayoutDemo {
// Identical to contents of `egui::Layout`
main_dir: Direction,
@@ -363,7 +364,8 @@ enum Action {
Delete,
}
#[derive(Clone, Default, serde::Deserialize, serde::Serialize)]
#[derive(Clone, Default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
struct Tree(Vec<Tree>);
impl Tree {

View File

@@ -2,11 +2,11 @@ use egui::{CtxRef, Resize, ScrollArea, Ui, Window};
// ----------------------------------------------------------------------------
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
struct Demos {
/// open, view
#[serde(skip)] // TODO: serialize the `open` state.
#[cfg_attr(feature = "persistence", serde(skip))] // TODO: serialize the `open` state.
demos: Vec<(bool, Box<dyn super::Demo>)>,
}
impl Default for Demos {
@@ -40,8 +40,9 @@ impl Demos {
// ----------------------------------------------------------------------------
/// A menu bar in which you can select different demo windows to show.
#[derive(Default, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(Default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct DemoWindows {
open_windows: OpenWindows,
@@ -189,7 +190,7 @@ impl DemoWindows {
// ----------------------------------------------------------------------------
#[derive(serde::Deserialize, serde::Serialize)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
struct OpenWindows {
demo: bool,

View File

@@ -1,7 +1,7 @@
use egui::*;
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct Painting {
lines: Vec<Vec<Vec2>>,
stroke: Stroke,

View File

@@ -1,7 +1,7 @@
use egui::{color::*, *};
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct Scrolls {
track_item: usize,
tracking: bool,

View File

@@ -2,8 +2,9 @@ use egui::*;
use std::f64::INFINITY;
/// Showcase sliders
#[derive(PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(PartialEq)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct Sliders {
pub min: f64,
pub max: f64,

View File

@@ -1,6 +1,7 @@
use egui::{color::*, *};
#[derive(Debug, PartialEq, serde::Deserialize, serde::Serialize)]
#[derive(Debug, PartialEq)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
enum Enum {
First,
Second,
@@ -13,8 +14,8 @@ impl Default for Enum {
}
}
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct Widgets {
button_enabled: bool,
count: usize,

View File

@@ -1,6 +1,7 @@
use crate::__egui_github_link_file;
#[derive(Clone, PartialEq, serde::Deserialize, serde::Serialize)]
#[derive(Clone, PartialEq)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
pub struct WindowOptions {
title: String,
title_bar: bool,

View File

@@ -1,8 +1,9 @@
use egui::{containers::*, widgets::*, *};
use std::f32::consts::TAU;
#[derive(PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(PartialEq)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct FractalClock {
paused: bool,
time: f64,

View File

@@ -30,17 +30,17 @@ impl Resource {
}
}
#[derive(serde::Deserialize, serde::Serialize)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
pub struct HttpApp {
url: String,
#[serde(skip)]
#[cfg_attr(feature = "persistence", serde(skip))]
in_progress: Option<Receiver<Result<Response, String>>>,
#[serde(skip)]
#[cfg_attr(feature = "persistence", serde(skip))]
result: Option<Result<Resource, String>>,
#[serde(skip)]
#[cfg_attr(feature = "persistence", serde(skip))]
tex_mngr: TexMngr,
}

View File

@@ -1,11 +1,13 @@
mod color_test;
mod demo;
mod fractal_clock;
#[cfg(feature = "http")]
mod http_app;
pub use color_test::ColorTest;
pub use demo::DemoApp;
pub use fractal_clock::FractalClock;
#[cfg(feature = "http")]
pub use http_app::HttpApp;
pub use demo::DemoWindows; // used for tests

View File

@@ -1,8 +1,10 @@
/// All the different demo apps.
#[derive(Default, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(Default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct Apps {
demo: crate::apps::DemoApp,
#[cfg(feature = "http")]
http: crate::apps::HttpApp,
clock: crate::apps::FractalClock,
color_test: crate::apps::ColorTest,
@@ -12,6 +14,7 @@ impl Apps {
fn iter_mut(&mut self) -> impl Iterator<Item = (&str, &mut dyn epi::App)> {
vec![
("demo", &mut self.demo as &mut dyn epi::App),
#[cfg(feature = "http")]
("http", &mut self.http as &mut dyn epi::App),
("clock", &mut self.clock as &mut dyn epi::App),
("colors", &mut self.color_test as &mut dyn epi::App),
@@ -21,8 +24,9 @@ impl Apps {
}
/// Wraps many demo/test apps into one.
#[derive(Default, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(Default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
pub struct WrapApp {
selected_anchor: String,
apps: Apps,
@@ -34,10 +38,12 @@ impl epi::App for WrapApp {
"Egui Demo Apps"
}
#[cfg(feature = "persistence")]
fn load(&mut self, storage: &dyn epi::Storage) {
*self = epi::get_value(storage, epi::APP_KEY).unwrap_or_default()
}
#[cfg(feature = "persistence")]
fn save(&mut self, storage: &mut dyn epi::Storage) {
epi::set_value(storage, epi::APP_KEY, self);
}
@@ -167,18 +173,20 @@ impl Default for RunMode {
// ----------------------------------------------------------------------------
#[derive(Default, serde::Deserialize, serde::Serialize)]
#[serde(default)]
#[derive(Default)]
#[cfg_attr(feature = "persistence", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "persistence", serde(default))]
struct BackendPanel {
open: bool,
#[serde(skip)] // go back to `Reactive` mode each time we start
#[cfg_attr(feature = "persistence", serde(skip))]
// go back to `Reactive` mode each time we start
run_mode: RunMode,
/// current slider value for current gui scale
pixels_per_point: Option<f32>,
#[serde(skip)]
#[cfg_attr(feature = "persistence", serde(skip))]
frame_history: crate::frame_history::FrameHistory,
}