Fix duplicate selection when holding Alt and dragging with Select tool (#1739)

Fix duplicate selection when holding alt and dragging with select tool
This commit is contained in:
adamgerhant
2024-05-06 18:33:58 -07:00
committed by GitHub
parent 1fca813797
commit 14262e1527
6 changed files with 44 additions and 46 deletions
@@ -279,7 +279,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
}
DocumentMessage::DuplicateSelectedLayers => {
let parent = self.new_layer_parent(false);
let calculated_insert_index = self.get_calculated_insert_index(parent);
let calculated_insert_index = DocumentMessageHandler::get_calculated_insert_index(&self.metadata, &self.selected_nodes, parent);
responses.add(DocumentMessage::StartTransaction);
responses.add(PortfolioMessage::Copy { clipboard: Clipboard::Internal });
@@ -412,7 +412,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
});
}
let calculated_insert_index = self.get_calculated_insert_index(parent);
let calculated_insert_index = DocumentMessageHandler::get_calculated_insert_index(&self.metadata, &self.selected_nodes, parent);
let folder_id = NodeId(generate_uuid());
responses.add(GraphOperationMessage::NewCustomLayer {
@@ -1298,17 +1298,17 @@ impl DocumentMessageHandler {
.unwrap_or_else(|| self.metadata().active_artboard())
}
fn get_calculated_insert_index(&self, parent: LayerNodeIdentifier) -> isize {
pub fn get_calculated_insert_index(metadata: &DocumentMetadata, selected_nodes: &SelectedNodes, parent: LayerNodeIdentifier) -> isize {
parent
.children(self.metadata())
.children(metadata)
.enumerate()
.find_map(|(index, direct_child)| {
if self.selected_nodes.selected_layers(self.metadata()).any(|selected| selected == direct_child) {
if selected_nodes.selected_layers(metadata).any(|selected| selected == direct_child) {
return Some(index as isize);
}
for descendant in direct_child.descendants(self.metadata()) {
if self.selected_nodes.selected_layers(self.metadata()).any(|selected| selected == descendant) {
for descendant in direct_child.descendants(metadata) {
if selected_nodes.selected_layers(metadata).any(|selected| selected == descendant) {
return Some(index as isize);
}
}
@@ -21,6 +21,7 @@ use glam::{DAffine2, DVec2, IVec2};
pub enum GraphOperationMessage {
AddNodesAsChild {
nodes: HashMap<NodeId, DocumentNode>,
new_ids: HashMap<NodeId, NodeId>,
parent: LayerNodeIdentifier,
insert_index: isize,
},
@@ -37,9 +37,7 @@ impl MessageHandler<GraphOperationMessage, GraphOperationMessageData<'_>> for Gr
} = data;
match message {
GraphOperationMessage::AddNodesAsChild { nodes, parent, insert_index } => {
let new_ids: HashMap<_, _> = nodes.iter().map(|(&id, _)| (id, NodeId(generate_uuid()))).collect();
GraphOperationMessage::AddNodesAsChild { nodes, new_ids, parent, insert_index } => {
let shift = nodes
.get(&NodeId(0))
.and_then(|node| {
@@ -100,7 +100,7 @@ impl DocumentMetadata {
let mut layer_path = layer.ancestors(self).collect::<Vec<_>>();
layer_path.reverse();
if !include_self || !self.is_artboard(layer) && !self.is_folder(layer) {
if !include_self || !self.is_artboard(layer) {
layer_path.pop();
}