Compare commits

..

3 commits

Author SHA1 Message Date
f4394ad273 cleanup 2023-07-15 14:58:44 +02:00
12664a5817 allow adding colour presets 2023-07-15 14:56:41 +02:00
b4b82a3cc5 add yellow preset 2023-07-15 14:35:15 +02:00
2 changed files with 45 additions and 24 deletions

View file

@ -8,6 +8,7 @@ pub struct RenderOptions {
pub width: usize, pub width: usize,
pub height: usize, pub height: usize,
pub unit_width: f64, pub unit_width: f64,
#[serde(alias = "iterations")]
pub max_iter: u16, pub max_iter: u16,
pub cx: f64, pub cx: f64,
pub cy: f64, pub cy: f64,

View file

@ -39,20 +39,25 @@ fn main() {
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
struct JuliaGUI { struct JuliaGUI {
color: (u8, u8, u8), 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)] #[serde(skip)]
preview: Option<TextureHandle>, preview: Option<TextureHandle>,
settings: RenderOptions,
#[serde(skip)] #[serde(skip)]
preview_render_ms: f64, preview_render_ms: f64,
#[serde(skip)] #[serde(skip)]
export_render_ms: Option<f64>, export_render_ms: Option<f64>,
export_res_power: u8,
export_max_iter: u16,
#[serde(skip)] #[serde(skip)]
export_path: PathBuf, export_path: PathBuf,
#[serde(skip)] #[serde(skip)]
settings_changed: bool, settings_changed: bool,
preview_point: bool, #[serde(skip)]
new_color_preset_name: String,
#[serde(skip)] #[serde(skip)]
render_thread_handle: Option<JoinHandle<()>>, render_thread_handle: Option<JoinHandle<()>>,
#[serde(skip)] #[serde(skip)]
@ -63,6 +68,17 @@ struct JuliaGUI {
waiting: bool, 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 { enum RenderJob {
Render(PathBuf, RenderOptions, (u8, u8, u8)), Render(PathBuf, RenderOptions, (u8, u8, u8)),
Exit, Exit,
@ -72,13 +88,15 @@ impl Default for JuliaGUI {
fn default() -> Self { fn default() -> Self {
Self { Self {
color: (12, 5, 10), color: (12, 5, 10),
color_presets: default_color_presets(),
new_color_preset_name: String::new(),
preview: None, preview: None,
settings: RenderOptions::default(), settings: RenderOptions::default(),
preview_render_ms: 0.0, preview_render_ms: 0.0,
export_render_ms: None, export_render_ms: None,
export_res_power: 3, export_res_power: 3,
export_max_iter: 512, export_max_iter: 512,
export_path: "".into(), export_path: PathBuf::new(),
settings_changed: true, settings_changed: true,
preview_point: false, preview_point: false,
render_thread_handle: None, render_thread_handle: None,
@ -237,25 +255,20 @@ impl eframe::App for JuliaGUI {
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.label("Colour (RGB)"); ui.label("Colour (RGB)");
ui.menu_button("presets", |ui| { ui.menu_button("presets", |ui| {
if ui.button("pink").clicked() { let mut to_remove = None;
self.color = (8, 2, 6); 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; self.settings_changed = true;
} }
if ui.button("blue").clicked() { if ui.button("x").clicked() {
self.color = (2, 4, 8); to_remove = Some(i);
self.settings_changed = true;
} }
if ui.button("green").clicked() { });
self.color = (2, 8, 4);
self.settings_changed = true;
} }
if ui.button("salmon").clicked() { if let Some(i) = to_remove {
self.color = (8, 4, 4); self.color_presets.remove(i);
self.settings_changed = true;
}
if ui.button("purple").clicked() {
self.color = (5, 2, 11);
self.settings_changed = true;
} }
if ui.button("randomise").clicked() { if ui.button("randomise").clicked() {
self.color = ( self.color = (
@ -265,6 +278,13 @@ impl eframe::App for JuliaGUI {
); );
self.settings_changed = true; 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)); let set_red = ui.add(Slider::new(&mut self.color.0, 0..=16));
@ -388,10 +408,10 @@ impl eframe::App for JuliaGUI {
} }
fn on_exit(&mut self, _gl: Option<&eframe::glow::Context>) { fn on_exit(&mut self, _gl: Option<&eframe::glow::Context>) {
self.save_settings();
if let Some(channel) = &self.render_thread { if let Some(channel) = &self.render_thread {
channel.send(RenderJob::Exit).unwrap(); channel.send(RenderJob::Exit).unwrap();
} }
self.render_thread_handle.take().unwrap().join().unwrap(); self.render_thread_handle.take().unwrap().join().unwrap();
self.save_settings();
} }
} }