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 <keavon@keavon.com>
This commit is contained in:
parent
42c822020e
commit
6630e2b964
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -40,9 +40,7 @@ pub enum DocumentMessage {
|
|||
ClearArtboards,
|
||||
ClearLayersPanel,
|
||||
CommitTransaction,
|
||||
CreateEmptyFolder {
|
||||
parent: LayerNodeIdentifier,
|
||||
},
|
||||
CreateEmptyFolder,
|
||||
DebugPrintDocument,
|
||||
DeleteLayer {
|
||||
id: NodeId,
|
||||
|
|
|
|||
|
|
@ -355,14 +355,25 @@ impl MessageHandler<DocumentMessage, DocumentInputs<'_>> 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")
|
||||
|
|
|
|||
Loading…
Reference in New Issue