use serde::{Serialize, Deserialize};
use serde_with::{serde_as, DisplayFromStr};
use crate::color::Color;
use crate::point::{ScreenUnit, WorldUnit};
#[serde_as]
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
pub struct Config {
#[serde(default = "default_thickness")]
pub thickness: ScreenUnit,
#[serde(default = "default_export_padding")]
pub export_padding: WorldUnit,
#[serde(default = "default_erase_radius")]
pub erase_radius: ScreenUnit,
#[serde(default = "default_point_snap_radius")]
pub point_snap_radius: ScreenUnit,
#[serde(default = "default_zoom_factor")]
pub zoom_factor: f64,
#[serde_as(as = "DisplayFromStr")]
#[serde(default = "default_background_color")]
pub background_color: Color,
#[serde_as(as = "DisplayFromStr")]
#[serde(default = "default_stroke_color")]
pub stroke_color: Color,
#[serde(default = "default_scroll_factor")]
pub scroll_factor: f64,
}
impl Default for Config {
fn default() -> Config {
Config {
thickness: 2.0.into(),
export_padding: 20.0.into(),
erase_radius: 10.0.into(),
point_snap_radius: 10.0.into(),
zoom_factor: 2.0,
background_color: Color::black(),
stroke_color: Color::white(),
scroll_factor: -5.0,
}
}
}
fn default_thickness() -> ScreenUnit {
Config::default().thickness
}
fn default_export_padding() -> WorldUnit {
Config::default().export_padding
}
fn default_erase_radius() -> ScreenUnit {
Config::default().erase_radius
}
fn default_point_snap_radius() -> ScreenUnit {
Config::default().point_snap_radius
}
fn default_zoom_factor() -> f64 {
Config::default().zoom_factor
}
fn default_background_color() -> Color {
Config::default().background_color
}
fn default_stroke_color() -> Color {
Config::default().stroke_color
}
fn default_scroll_factor() -> f64 {
Config::default().scroll_factor
}