From 5bab38e1735bab307670d92bed66f81c8c7a6fe7 Mon Sep 17 00:00:00 2001 From: Haikal <76188139+haikalvidya@users.noreply.github.com> Date: Sun, 31 Mar 2024 14:48:17 +0700 Subject: [PATCH] Exclude hidden layers from Ctrl+A selection; prevent G/R/S/nudging hidden layers (#1697) * Exclude hidden layer to be selected on Select All Layer * Add hide layer action to history * Fix error call the function * Add hide layer action to history state * Make hidden layer cannot be transform like G/R/S and nudges --------- Co-authored-by: Keavon Chambers --- .../document/document_message_handler.rs | 19 +++++++++++++++---- .../node_graph/node_graph_message_handler.rs | 1 + .../transform_layer_message_handler.rs | 6 +++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index de705a3f..4f6f2442 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -460,7 +460,11 @@ impl MessageHandler> for DocumentMessag match ipp.keyboard.key(resize) { // Nudge translation false => { - for layer in self.selected_nodes.selected_layers(self.metadata()) { + for layer in self + .selected_nodes + .selected_layers(self.metadata()) + .filter(|&layer| self.selected_nodes.layer_visible(layer, self.metadata())) + { responses.add(GraphOperationMessage::TransformChange { layer, transform: DAffine2::from_translation(delta), @@ -491,7 +495,11 @@ impl MessageHandler> for DocumentMessag let pivot = DAffine2::from_translation(pivot); let transformation = pivot * scale * pivot.inverse(); - for layer in self.selected_nodes.selected_layers(self.metadata()) { + for layer in self + .selected_nodes + .selected_layers(self.metadata()) + .filter(|&layer| self.selected_nodes.layer_visible(layer, self.metadata())) + { let to = self.metadata().document_to_viewport.inverse() * self.metadata().downstream_transform_to_viewport(layer); let original_transform = self.metadata().upstream_transform(layer.to_node()); let new = to.inverse() * transformation * to * original_transform; @@ -614,8 +622,11 @@ impl MessageHandler> for DocumentMessag } DocumentMessage::SelectAllLayers => { let metadata = self.metadata(); - let all_layers_except_artboards = metadata.all_layers().filter(move |&layer| !metadata.is_artboard(layer)); - let nodes = all_layers_except_artboards.map(|layer| layer.to_node()).collect(); + let all_layers_except_artboards_and_invisible = metadata + .all_layers() + .filter(move |&layer| !metadata.is_artboard(layer)) + .filter(|&layer| self.selected_nodes.layer_visible(layer, metadata)); + let nodes = all_layers_except_artboards_and_invisible.map(|layer| layer.to_node()).collect(); responses.add(NodeGraphMessage::SelectedNodesSet { nodes }); } DocumentMessage::SelectedLayersLower => { diff --git a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs index a1f7173c..e6a01d25 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_graph_message_handler.rs @@ -459,6 +459,7 @@ impl<'a> MessageHandler> for NodeGrap } } NodeGraphMessage::ToggleVisibility { node_id } => { + responses.add(DocumentMessage::StartTransaction); let visible = document_metadata.node_is_visible(node_id); let visible = !visible; diff --git a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs index 1ecb7c93..67524c52 100644 --- a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs +++ b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs @@ -45,7 +45,11 @@ impl<'a> MessageHandler> for TransformL fn process_message(&mut self, message: TransformLayerMessage, responses: &mut VecDeque, (document, input, tool_data, shape_editor): TransformData) { let using_path_tool = tool_data.active_tool_type == ToolType::Path; - let selected_layers = document.selected_nodes.selected_layers(document.metadata()).collect::>(); + let selected_layers = document + .selected_nodes + .selected_layers(document.metadata()) + .filter(|&layer| document.metadata().node_is_visible(layer.to_node())) + .collect::>(); let mut selected = Selected::new( &mut self.original_transforms,