From 4aee77098035873b1ad027aff9bcfa4261361984 Mon Sep 17 00:00:00 2001 From: silwesterabram Date: Sat, 19 Jul 2025 13:31:17 +0200 Subject: [PATCH 1/2] Added ghost outline clearing when moving outlines via Path Tool --- editor/src/messages/tool/tool_messages/path_tool.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index f5ebc33189..d0dd8ab85d 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -2390,6 +2390,7 @@ impl Fsm for PathToolFsmState { PathToolFsmState::Ready } (_, PathToolMessage::SelectedPointUpdated) => { + tool_data.ghost_outline.clear(); let colinear = shape_editor.selected_manipulator_angles(&document.network_interface); tool_data.dragging_state = DraggingState { point_select_state: shape_editor.get_dragging_state(&document.network_interface), From 6efc517dac7333f4395655419cc4fd532149cb38 Mon Sep 17 00:00:00 2001 From: silwesterabram Date: Sun, 20 Jul 2025 19:42:35 +0200 Subject: [PATCH 2/2] Fix ghost outline staying fixed during drag by storing it in document space --- editor/src/messages/tool/tool_messages/path_tool.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index d0dd8ab85d..f4c42e5368 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -532,7 +532,7 @@ struct PathToolData { drill_through_cycle_index: usize, drill_through_cycle_count: usize, hovered_layers: Vec, - ghost_outline: Vec<(Vec, DAffine2)>, + ghost_outline: Vec<(Vec, LayerNodeIdentifier)>, single_path_node_compatible_layer_selected: bool, } @@ -628,8 +628,8 @@ impl PathToolData { for &layer in shape_editor.selected_shape_state.keys() { // We probably need to collect here let outline: Vec = document.metadata().layer_with_free_points_outline(layer).cloned().collect(); - let transform = document.metadata().transform_to_viewport(layer); - self.ghost_outline.push((outline, transform)); + + self.ghost_outline.push((outline, layer)); } } @@ -1490,8 +1490,9 @@ impl Fsm for PathToolFsmState { } (_, PathToolMessage::Overlays(mut overlay_context)) => { if matches!(self, Self::Dragging(_)) { - for (outline, transform) in &tool_data.ghost_outline { - overlay_context.outline(outline.iter(), *transform, Some(COLOR_OVERLAY_GRAY)); + for (outline, layer) in &tool_data.ghost_outline { + let transform = document.metadata().transform_to_viewport(*layer); + overlay_context.outline(outline.iter(), transform, Some(COLOR_OVERLAY_GRAY)); } } @@ -2390,7 +2391,6 @@ impl Fsm for PathToolFsmState { PathToolFsmState::Ready } (_, PathToolMessage::SelectedPointUpdated) => { - tool_data.ghost_outline.clear(); let colinear = shape_editor.selected_manipulator_angles(&document.network_interface); tool_data.dragging_state = DraggingState { point_select_state: shape_editor.get_dragging_state(&document.network_interface),