From a6676e4abdaf24e047ad9cf0d2eb62542e8ee2f3 Mon Sep 17 00:00:00 2001 From: 0SlowPoke0 <142654792+0SlowPoke0@users.noreply.github.com> Date: Wed, 25 Dec 2024 12:40:43 +0530 Subject: [PATCH] Fix Select tool's box selection not being able to extend a selection with shift (#2157) * select parent-node,remove deselect all layers message * Comment nits --------- Co-authored-by: Keavon Chambers --- .../messages/tool/tool_messages/select_tool.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 1fd1ead9..6a79b565 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -665,12 +665,7 @@ impl Fsm for SelectToolFsmState { responses.add(DocumentMessage::StartTransaction); SelectToolFsmState::Dragging } else { - // Deselect all layers if using shallowest selection behavior - // Necessary since for shallowest mode, we need to know the current selected layers to determine the next - if tool_data.nested_selection_behavior == NestedSelectionBehavior::Shallowest { - responses.add(DocumentMessage::DeselectAllLayers); - tool_data.layers_dragging.clear(); - } + // Make a box selection, preserving previously selected layers let selection = tool_data.nested_selection_behavior; SelectToolFsmState::DrawingBox { selection } } @@ -1011,7 +1006,15 @@ impl Fsm for SelectToolFsmState { let new_selected: HashSet<_> = document.intersect_quad_no_artboards(quad, input).collect(); let current_selected: HashSet<_> = document.network_interface.selected_nodes(&[]).unwrap().selected_layers(document.metadata()).collect(); if new_selected != current_selected { - tool_data.layers_dragging = new_selected.into_iter().collect(); + let parent_selected: HashSet<_> = new_selected + .into_iter() + .map(|layer| { + // Find the parent node + layer.ancestors(document.metadata()).filter(not_artboard(document)).last().unwrap_or(layer) + }) + .collect(); + + tool_data.layers_dragging.extend(parent_selected.iter().copied()); responses.add(NodeGraphMessage::SelectedNodesSet { nodes: tool_data .layers_dragging