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

View file

@ -658,14 +658,17 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> 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<DocumentMessage, DocumentMessageData<'_>> 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;