From 8ba1ee1cd8f93c89461a879e476fd845b9a59a3a Mon Sep 17 00:00:00 2001 From: grimsace Date: Tue, 21 Apr 2026 14:35:45 -0500 Subject: [PATCH] allowed copying of 'minimized' image --- src/app.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/app.rs b/src/app.rs index 54c185d..c7bcac1 100644 --- a/src/app.rs +++ b/src/app.rs @@ -31,6 +31,7 @@ pub struct TerrainApp { params: GenerationParams, generation_tab: LeftTab, preview_focus: PreviewFocus, + hovered_preview: Option, textures: Option, generated: Option, generation_receiver: Option>>, @@ -44,6 +45,7 @@ impl TerrainApp { params: GenerationParams::default(), generation_tab: LeftTab::Generation, preview_focus: PreviewFocus::Bumpmap, + hovered_preview: None, textures: None, generated: None, generation_receiver: None, @@ -316,6 +318,9 @@ impl TerrainApp { let main_response = render_clickable_image(ui, main_texture, Vec2::new(available.x, main_height), true); + if main_response.hovered() { + self.hovered_preview = Some(self.preview_focus); + } self.preview_context_menu(&main_response, self.preview_focus); self.overlay_copy_button(ui, main_response.rect, self.preview_focus); ui.add_space(8.0); @@ -348,6 +353,9 @@ impl TerrainApp { Vec2::new(thumb_width, bottom_strip_height - 32.0), true, ); + if secondary_response.hovered() { + self.hovered_preview = Some(secondary_focus); + } self.preview_context_menu(&secondary_response, secondary_focus); if secondary_response.clicked() { self.preview_focus = secondary_focus; @@ -361,6 +369,11 @@ impl TerrainApp { impl eframe::App for TerrainApp { fn update(&mut self, ctx: &Context, _frame: &mut eframe::Frame) { + self.hovered_preview = None; + self.poll_generation(ctx); + self.ui_left_panel(ctx); + self.ui_right_panel(ctx); + let wants_keyboard_input = ctx.wants_keyboard_input(); let should_copy = ctx.input(|input| { !wants_keyboard_input @@ -377,11 +390,9 @@ impl eframe::App for TerrainApp { }); if should_copy { - self.copy_preview(self.preview_focus); + let preview = self.hovered_preview.unwrap_or(self.preview_focus); + self.copy_preview(preview); } - self.poll_generation(ctx); - self.ui_left_panel(ctx); - self.ui_right_panel(ctx); } }