Skip to main content

gled_ui/
settings.rs

1//! The interface's own settings, which stay on the device showing it: how
2//! big the effect thumbnails are and with which palette they are drawn. eframe stores them, in a file on the desktop and in the
3//! browser's local storage.
4
5use gled_model::{asset::palette::Palette, asset_id::AssetId};
6use serde::{Deserialize, Serialize};
7
8/// The key eframe stores the settings under.
9pub const STORAGE_KEY: &str = "gled_client_settings";
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12#[serde(default)]
13pub struct ClientSettings {
14    effects_size: f32,
15    preview_palette: Option<AssetId<Palette>>,
16}
17
18impl Default for ClientSettings {
19    fn default() -> Self {
20        Self {
21            effects_size: 100.0,
22            preview_palette: None,
23        }
24    }
25}
26
27impl ClientSettings {
28    pub fn new(effects_size: f32, preview_palette: Option<AssetId<Palette>>) -> Self {
29        Self {
30            effects_size,
31            preview_palette,
32        }
33    }
34
35    pub(crate) fn effects_size(&self) -> f32 {
36        self.effects_size
37    }
38
39    pub(crate) fn effects_size_mut(&mut self) -> &mut f32 {
40        &mut self.effects_size
41    }
42
43    pub(crate) fn preview_palette(&self) -> Option<AssetId<Palette>> {
44        self.preview_palette
45    }
46
47    pub(crate) fn preview_palette_mut(&mut self) -> &mut Option<AssetId<Palette>> {
48        &mut self.preview_palette
49    }
50}