From b4b82a3cc53e0c73b58e195fb58d609e7d7c04fa Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Sat, 15 Jul 2023 14:35:15 +0200 Subject: [PATCH 1/3] add yellow preset --- src/main.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2ad86de..0e71075 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,20 +39,20 @@ fn main() { #[derive(Serialize, Deserialize)] struct JuliaGUI { color: (u8, u8, u8), + settings: RenderOptions, + export_res_power: u8, + export_max_iter: u16, + preview_point: bool, #[serde(skip)] preview: Option, - settings: RenderOptions, #[serde(skip)] preview_render_ms: f64, #[serde(skip)] export_render_ms: Option, - export_res_power: u8, - export_max_iter: u16, #[serde(skip)] export_path: PathBuf, #[serde(skip)] settings_changed: bool, - preview_point: bool, #[serde(skip)] render_thread_handle: Option>, #[serde(skip)] @@ -257,6 +257,10 @@ impl eframe::App for JuliaGUI { self.color = (5, 2, 11); self.settings_changed = true; } + if ui.button("yellow").clicked() { + self.color = (9, 6, 1); + self.settings_changed = true; + } if ui.button("randomise").clicked() { self.color = ( rand::random::() & 15, From 12664a58178695849d31c1db03d80121cfd7ee3b Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Sat, 15 Jul 2023 14:56:41 +0200 Subject: [PATCH 2/3] allow adding colour presets --- src/generate.rs | 1 + src/main.rs | 60 +++++++++++++++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/generate.rs b/src/generate.rs index babe5da..616e786 100644 --- a/src/generate.rs +++ b/src/generate.rs @@ -8,6 +8,7 @@ pub struct RenderOptions { pub width: usize, pub height: usize, pub unit_width: f64, + #[serde(alias = "iterations")] pub max_iter: u16, pub cx: f64, pub cy: f64, diff --git a/src/main.rs b/src/main.rs index 0e71075..36e76c6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,8 +41,11 @@ struct JuliaGUI { color: (u8, u8, u8), settings: RenderOptions, export_res_power: u8, + #[serde(alias = "export_iterations")] export_max_iter: u16, preview_point: bool, + #[serde(default = "default_color_presets")] + color_presets: Vec<(String, (u8, u8, u8))>, #[serde(skip)] preview: Option, #[serde(skip)] @@ -54,6 +57,8 @@ struct JuliaGUI { #[serde(skip)] settings_changed: bool, #[serde(skip)] + new_color_preset_name: String, + #[serde(skip)] render_thread_handle: Option>, #[serde(skip)] render_thread: Option>, @@ -63,6 +68,17 @@ struct JuliaGUI { waiting: bool, } +fn default_color_presets() -> Vec<(String, (u8, u8, u8))> { + vec![ + ("pink".into(), (8, 2, 6)), + ("blue".into(), (2, 4, 8)), + ("green".into(), (2, 8, 4)), + ("salmon".into(), (8, 4, 4)), + ("purple".into(), (5, 2, 11)), + ("yellow".into(), (9, 6, 1)), + ] +} + enum RenderJob { Render(PathBuf, RenderOptions, (u8, u8, u8)), Exit, @@ -72,6 +88,8 @@ impl Default for JuliaGUI { fn default() -> Self { Self { color: (12, 5, 10), + color_presets: default_color_presets(), + new_color_preset_name: "".into(), preview: None, settings: RenderOptions::default(), preview_render_ms: 0.0, @@ -237,29 +255,20 @@ impl eframe::App for JuliaGUI { ui.horizontal(|ui| { ui.label("Colour (RGB)"); ui.menu_button("presets", |ui| { - if ui.button("pink").clicked() { - self.color = (8, 2, 6); - self.settings_changed = true; + let mut to_remove = None; + for (i, (name, col)) in self.color_presets.iter().enumerate() { + ui.horizontal(|ui| { + if ui.button(name).clicked() { + self.color = *col; + self.settings_changed = true; + } + if ui.button("x").clicked() { + to_remove = Some(i); + } + }); } - if ui.button("blue").clicked() { - self.color = (2, 4, 8); - self.settings_changed = true; - } - if ui.button("green").clicked() { - self.color = (2, 8, 4); - self.settings_changed = true; - } - if ui.button("salmon").clicked() { - self.color = (8, 4, 4); - self.settings_changed = true; - } - if ui.button("purple").clicked() { - self.color = (5, 2, 11); - self.settings_changed = true; - } - if ui.button("yellow").clicked() { - self.color = (9, 6, 1); - self.settings_changed = true; + if let Some(i) = to_remove { + self.color_presets.remove(i); } if ui.button("randomise").clicked() { self.color = ( @@ -269,6 +278,13 @@ impl eframe::App for JuliaGUI { ); self.settings_changed = true; } + ui.horizontal(|ui| { + ui.text_edit_singleline(&mut self.new_color_preset_name); + if ui.button("add").clicked() { + self.color_presets + .push((self.new_color_preset_name.clone(), self.color)); + } + }) }); }); let set_red = ui.add(Slider::new(&mut self.color.0, 0..=16)); From f4394ad27340cc3d336fa9b88736952bc9848518 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Sat, 15 Jul 2023 14:58:44 +0200 Subject: [PATCH 3/3] cleanup --- src/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 36e76c6..f5113b3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,14 +89,14 @@ impl Default for JuliaGUI { Self { color: (12, 5, 10), color_presets: default_color_presets(), - new_color_preset_name: "".into(), + new_color_preset_name: String::new(), preview: None, settings: RenderOptions::default(), preview_render_ms: 0.0, export_render_ms: None, export_res_power: 3, export_max_iter: 512, - export_path: "".into(), + export_path: PathBuf::new(), settings_changed: true, preview_point: false, render_thread_handle: None, @@ -408,10 +408,10 @@ impl eframe::App for JuliaGUI { } fn on_exit(&mut self, _gl: Option<&eframe::glow::Context>) { + self.save_settings(); if let Some(channel) = &self.render_thread { channel.send(RenderJob::Exit).unwrap(); } self.render_thread_handle.take().unwrap().join().unwrap(); - self.save_settings(); } }