Arrange layers in top level (#1786)

This commit is contained in:
0HyperCube 2024-06-17 11:56:31 +01:00 committed by GitHub
parent 5b6a2518e4
commit 68a6065f2b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 8 additions and 6 deletions

View File

@ -559,11 +559,15 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
return;
}
// Artboards can only have `ROOT_PARENT` as the parent.
if selected_layers.iter().any(|&layer| self.metadata.is_artboard(layer)) && parent != LayerNodeIdentifier::ROOT_PARENT {
let any_artboards = selected_layers.iter().any(|&layer| self.metadata.is_artboard(layer));
if any_artboards && parent != LayerNodeIdentifier::ROOT_PARENT {
return;
}
// Disallow inserting layers between artboards. Since only artboards can output to Output node, the layer parent cannot be the output.
if !selected_layers.iter().any(|&layer| self.metadata.is_artboard(layer)) && parent == LayerNodeIdentifier::ROOT_PARENT {
// Non-artboards cannot be put at the top level if artboards also exist there
let selected_any_non_artboards = selected_layers.iter().any(|&layer| !self.metadata.is_artboard(layer));
let top_level_artboards = LayerNodeIdentifier::ROOT_PARENT.children(self.metadata()).any(|layer| self.metadata.is_artboard(layer));
if selected_any_non_artboards && parent == LayerNodeIdentifier::ROOT_PARENT && top_level_artboards {
return;
}
let mut insert_index = if insert_index < 0 { 0 } else { insert_index as usize };
@ -2122,9 +2126,7 @@ impl DocumentMessageHandler {
let Some(pivot_layer) = first_or_last_selected_layer else {
return;
};
let Some(parent) = pivot_layer.parent(self.metadata()) else {
return;
};
let parent = pivot_layer.parent(self.metadata()).unwrap_or(LayerNodeIdentifier::ROOT_PARENT);
let sibling_layer_paths: Vec<_> = parent.children(self.metadata()).collect();
let Some(pivot_index) = sibling_layer_paths.iter().position(|path| *path == pivot_layer) else {