mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-03 08:08:11 +08:00
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:
@@ -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,
|
||||
},
|
||||
|
||||
+1
-3
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user