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 <keavon@keavon.com>
This commit is contained in:
0SlowPoke0 2024-12-25 12:40:43 +05:30 committed by GitHub
parent 77936c44b0
commit a6676e4abd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 10 additions and 7 deletions

View File

@ -665,12 +665,7 @@ impl Fsm for SelectToolFsmState {
responses.add(DocumentMessage::StartTransaction); responses.add(DocumentMessage::StartTransaction);
SelectToolFsmState::Dragging SelectToolFsmState::Dragging
} else { } else {
// Deselect all layers if using shallowest selection behavior // Make a box selection, preserving previously selected layers
// 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();
}
let selection = tool_data.nested_selection_behavior; let selection = tool_data.nested_selection_behavior;
SelectToolFsmState::DrawingBox { selection } SelectToolFsmState::DrawingBox { selection }
} }
@ -1011,7 +1006,15 @@ impl Fsm for SelectToolFsmState {
let new_selected: HashSet<_> = document.intersect_quad_no_artboards(quad, input).collect(); 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(); let current_selected: HashSet<_> = document.network_interface.selected_nodes(&[]).unwrap().selected_layers(document.metadata()).collect();
if new_selected != current_selected { 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 { responses.add(NodeGraphMessage::SelectedNodesSet {
nodes: tool_data nodes: tool_data
.layers_dragging .layers_dragging