From 6630e2b96460c5df1e4c48fa8f18fc5f21a08517 Mon Sep 17 00:00:00 2001 From: Mohamed Osama <67656249+moOsama76@users.noreply.github.com> Date: Sat, 16 Mar 2024 09:26:46 +0200 Subject: [PATCH] Place new folders in the correct stack order relative to other selected layers (#1678) * New folder placed directly above the topmost selected layer in the hierarchy (at the level of the least nested layer) * fix bug * Replace `.collect().contains()` with `.any()` and `if` statement with `.then_some()` --------- Co-authored-by: Keavon Chambers --- .../messages/input_mapper/default_mapping.rs | 2 +- .../portfolio/document/document_message.rs | 4 +--- .../document/document_message_handler.rs | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/editor/src/messages/input_mapper/default_mapping.rs b/editor/src/messages/input_mapper/default_mapping.rs index bb3ae6d0..ed504c26 100644 --- a/editor/src/messages/input_mapper/default_mapping.rs +++ b/editor/src/messages/input_mapper/default_mapping.rs @@ -302,7 +302,7 @@ pub fn default_mapping() -> Mapping { entry!(KeyDown(KeyJ); modifiers=[Accel], action_dispatch=DocumentMessage::DuplicateSelectedLayers), entry!(KeyDown(KeyG); modifiers=[Accel], action_dispatch=DocumentMessage::GroupSelectedLayers), entry!(KeyDown(KeyG); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::UngroupSelectedLayers), - entry!(KeyDown(KeyN); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::CreateEmptyFolder { parent: LayerNodeIdentifier::ROOT }), + entry!(KeyDown(KeyN); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::CreateEmptyFolder), entry!(KeyDown(Digit0); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasToFitAll), entry!(KeyDown(Digit1); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasTo100Percent), entry!(KeyDown(Digit2); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasTo200Percent), diff --git a/editor/src/messages/portfolio/document/document_message.rs b/editor/src/messages/portfolio/document/document_message.rs index 90646ea3..4b880d6e 100644 --- a/editor/src/messages/portfolio/document/document_message.rs +++ b/editor/src/messages/portfolio/document/document_message.rs @@ -40,9 +40,7 @@ pub enum DocumentMessage { ClearArtboards, ClearLayersPanel, CommitTransaction, - CreateEmptyFolder { - parent: LayerNodeIdentifier, - }, + CreateEmptyFolder, DebugPrintDocument, DeleteLayer { id: NodeId, diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index b8873247..c2e31ac1 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -355,14 +355,25 @@ impl MessageHandler> for DocumentMessageHand }); } CommitTransaction => (), - CreateEmptyFolder { parent } => { + CreateEmptyFolder => { let id = NodeId(generate_uuid()); + let parent = self + .metadata() + .deepest_common_ancestor(self.selected_nodes.selected_layers(self.metadata()), true) + .unwrap_or(LayerNodeIdentifier::ROOT); + + let insert_index = parent + .children(self.metadata()) + .enumerate() + .find_map(|(index, item)| self.selected_nodes.selected_layers(self.metadata()).any(|x| x == item).then_some(index as isize)) + .unwrap_or(-1); + responses.add(GraphOperationMessage::NewCustomLayer { id, nodes: HashMap::new(), parent, - insert_index: -1, + insert_index, alias: String::new(), }); responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![id] }); @@ -1470,7 +1481,7 @@ impl DocumentMessageHandler { IconButton::new("Folder", 24) .tooltip("New Folder") .tooltip_shortcut(action_keys!(DocumentMessageDiscriminant::CreateEmptyFolder)) - .on_update(|_| DocumentMessage::CreateEmptyFolder { parent: LayerNodeIdentifier::ROOT }.into()) + .on_update(|_| DocumentMessage::CreateEmptyFolder.into()) .widget_holder(), IconButton::new("Trash", 24) .tooltip("Delete Selected")