From 6c8a4fe5b37633df4dbd69adc7bc128f939460cc Mon Sep 17 00:00:00 2001 From: James Lindsay <78500760+0HyperCube@users.noreply.github.com> Date: Sun, 15 Sep 2024 00:39:20 +0100 Subject: [PATCH] Nudge only the shallowest selected layers to avoid amplified translation (#1975) * Nudge only the shallowest selected layers * Remove (inadvertent?) settings.json change --------- Co-authored-by: Keavon Chambers --- .../document/document_message_handler.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index 3f738c8c..d2c7f97e 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -658,14 +658,17 @@ impl MessageHandler> for DocumentMessag let opposite_corner = ipp.keyboard.key(resize_opposite_corner); let delta = DVec2::new(delta_x, delta_y); + let network_interface = &self.network_interface; + let can_move = move |layer| { + network_interface + .selected_nodes(&[]) + .is_some_and(|selected| selected.layer_visible(layer, network_interface) && !selected.layer_locked(layer, network_interface)) + }; match ipp.keyboard.key(resize) { // Nudge translation false => { - for layer in self.network_interface.selected_nodes(&[]).unwrap().selected_layers(self.metadata()).filter(|&layer| { - self.network_interface.selected_nodes(&[]).unwrap().layer_visible(layer, &self.network_interface) - && !self.network_interface.selected_nodes(&[]).unwrap().layer_locked(layer, &self.network_interface) - }) { + for layer in self.network_interface.shallowest_unique_layers(&[]).filter(|layer| can_move(*layer)) { responses.add(GraphOperationMessage::TransformChange { layer, transform: DAffine2::from_translation(delta), @@ -697,10 +700,7 @@ impl MessageHandler> for DocumentMessag let transformation = pivot * scale * pivot.inverse(); let document_to_viewport = self.navigation_handler.calculate_offset_transform(ipp.viewport_bounds.center(), &self.document_ptz); - for layer in self.network_interface.selected_nodes(&[]).unwrap().selected_layers(self.metadata()).filter(|&layer| { - self.network_interface.selected_nodes(&[]).unwrap().layer_visible(layer, &self.network_interface) - && !self.network_interface.selected_nodes(&[]).unwrap().layer_locked(layer, &self.network_interface) - }) { + for layer in self.network_interface.shallowest_unique_layers(&[]).filter(|layer| can_move(*layer)) { let to = 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;