additional controls for copy and paste

This commit is contained in:
grimsace
2026-06-18 10:30:04 -05:00
parent 22cf7ebdec
commit 75669ade52
+33 -2
View File
@@ -601,8 +601,37 @@ impl eframe::App for DungeonApp {
self.delete_level(level_idx); self.delete_level(level_idx);
} }
let multi_consumed = // --- Paste Mode Mouse Interaction ---
crate::interact::handle_multi_select(self, ctx, &response, &geometry); let in_paste_mode = !self.clipboard_items.is_empty();
if in_paste_mode {
if response.secondary_clicked() {
if self.debug_mode {
println!("DEBUG: Right-click dismissed paste mode.");
}
self.clipboard_items.clear();
} else if response.clicked() {
if let Some(pointer_pos) = response.interact_pointer_pos() {
if let Some(grid_pos) =
crate::interact::pointer_to_grid(pointer_pos, &geometry)
{
if self.debug_mode {
println!(
"Left-click pasting {} items at grid pos: {:?}",
self.clipboard_items.len(),
grid_pos
);
}
self.paste_items(grid_pos);
}
}
}
}
let multi_consumed = if in_paste_mode {
true
} else {
crate::interact::handle_multi_select(self, ctx, &response, &geometry)
};
let resizing = if !multi_consumed { let resizing = if !multi_consumed {
crate::interact::handle_resize(self, ctx, &response, &geometry) crate::interact::handle_resize(self, ctx, &response, &geometry)
} else { } else {
@@ -611,7 +640,9 @@ impl eframe::App for DungeonApp {
if !resizing && !multi_consumed { if !resizing && !multi_consumed {
crate::interact::handle_drag(self, ctx, &response, &geometry); crate::interact::handle_drag(self, ctx, &response, &geometry);
} }
if !in_paste_mode {
crate::interact::handle_add_tool(self, &response, &geometry); crate::interact::handle_add_tool(self, &response, &geometry);
}
if self.pending_delete { if self.pending_delete {
if let Some(pointer_pos) = ctx.pointer_interact_pos() { if let Some(pointer_pos) = ctx.pointer_interact_pos() {
crate::interact::delete_at_pointer(self, pointer_pos, &geometry); crate::interact::delete_at_pointer(self, pointer_pos, &geometry);