mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-02 23:58:11 +08:00
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:
co-authored by
Keavon Chambers
parent
42c822020e
commit
6630e2b964
@@ -302,7 +302,7 @@ pub fn default_mapping() -> Mapping {
|
|||||||
entry!(KeyDown(KeyJ); modifiers=[Accel], action_dispatch=DocumentMessage::DuplicateSelectedLayers),
|
entry!(KeyDown(KeyJ); modifiers=[Accel], action_dispatch=DocumentMessage::DuplicateSelectedLayers),
|
||||||
entry!(KeyDown(KeyG); modifiers=[Accel], action_dispatch=DocumentMessage::GroupSelectedLayers),
|
entry!(KeyDown(KeyG); modifiers=[Accel], action_dispatch=DocumentMessage::GroupSelectedLayers),
|
||||||
entry!(KeyDown(KeyG); modifiers=[Accel, Shift], action_dispatch=DocumentMessage::UngroupSelectedLayers),
|
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(Digit0); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasToFitAll),
|
||||||
entry!(KeyDown(Digit1); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasTo100Percent),
|
entry!(KeyDown(Digit1); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasTo100Percent),
|
||||||
entry!(KeyDown(Digit2); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasTo200Percent),
|
entry!(KeyDown(Digit2); modifiers=[Accel], action_dispatch=DocumentMessage::ZoomCanvasTo200Percent),
|
||||||
|
|||||||
@@ -40,9 +40,7 @@ pub enum DocumentMessage {
|
|||||||
ClearArtboards,
|
ClearArtboards,
|
||||||
ClearLayersPanel,
|
ClearLayersPanel,
|
||||||
CommitTransaction,
|
CommitTransaction,
|
||||||
CreateEmptyFolder {
|
CreateEmptyFolder,
|
||||||
parent: LayerNodeIdentifier,
|
|
||||||
},
|
|
||||||
DebugPrintDocument,
|
DebugPrintDocument,
|
||||||
DeleteLayer {
|
DeleteLayer {
|
||||||
id: NodeId,
|
id: NodeId,
|
||||||
|
|||||||
@@ -355,14 +355,25 @@ impl MessageHandler<DocumentMessage, DocumentInputs<'_>> for DocumentMessageHand
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
CommitTransaction => (),
|
CommitTransaction => (),
|
||||||
CreateEmptyFolder { parent } => {
|
CreateEmptyFolder => {
|
||||||
let id = NodeId(generate_uuid());
|
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 {
|
responses.add(GraphOperationMessage::NewCustomLayer {
|
||||||
id,
|
id,
|
||||||
nodes: HashMap::new(),
|
nodes: HashMap::new(),
|
||||||
parent,
|
parent,
|
||||||
insert_index: -1,
|
insert_index,
|
||||||
alias: String::new(),
|
alias: String::new(),
|
||||||
});
|
});
|
||||||
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![id] });
|
responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![id] });
|
||||||
@@ -1470,7 +1481,7 @@ impl DocumentMessageHandler {
|
|||||||
IconButton::new("Folder", 24)
|
IconButton::new("Folder", 24)
|
||||||
.tooltip("New Folder")
|
.tooltip("New Folder")
|
||||||
.tooltip_shortcut(action_keys!(DocumentMessageDiscriminant::CreateEmptyFolder))
|
.tooltip_shortcut(action_keys!(DocumentMessageDiscriminant::CreateEmptyFolder))
|
||||||
.on_update(|_| DocumentMessage::CreateEmptyFolder { parent: LayerNodeIdentifier::ROOT }.into())
|
.on_update(|_| DocumentMessage::CreateEmptyFolder.into())
|
||||||
.widget_holder(),
|
.widget_holder(),
|
||||||
IconButton::new("Trash", 24)
|
IconButton::new("Trash", 24)
|
||||||
.tooltip("Delete Selected")
|
.tooltip("Delete Selected")
|
||||||
|
|||||||
Reference in New Issue
Block a user