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 <keavon@keavon.com>
This commit is contained in:
James Lindsay 2024-09-15 00:39:20 +01:00 committed by GitHub
parent 0c5bccc2fd
commit 6c8a4fe5b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 8 additions and 8 deletions

View File

@ -658,14 +658,17 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
let opposite_corner = ipp.keyboard.key(resize_opposite_corner); let opposite_corner = ipp.keyboard.key(resize_opposite_corner);
let delta = DVec2::new(delta_x, delta_y); 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) { match ipp.keyboard.key(resize) {
// Nudge translation // Nudge translation
false => { false => {
for layer in self.network_interface.selected_nodes(&[]).unwrap().selected_layers(self.metadata()).filter(|&layer| { for layer in self.network_interface.shallowest_unique_layers(&[]).filter(|layer| can_move(*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)
}) {
responses.add(GraphOperationMessage::TransformChange { responses.add(GraphOperationMessage::TransformChange {
layer, layer,
transform: DAffine2::from_translation(delta), transform: DAffine2::from_translation(delta),
@ -697,10 +700,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
let transformation = pivot * scale * pivot.inverse(); let transformation = pivot * scale * pivot.inverse();
let document_to_viewport = self.navigation_handler.calculate_offset_transform(ipp.viewport_bounds.center(), &self.document_ptz); 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| { for layer in self.network_interface.shallowest_unique_layers(&[]).filter(|layer| can_move(*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)
}) {
let to = document_to_viewport.inverse() * self.metadata().downstream_transform_to_viewport(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 original_transform = self.metadata().upstream_transform(layer.to_node());
let new = to.inverse() * transformation * to * original_transform; let new = to.inverse() * transformation * to * original_transform;