diff --git a/editor/src/messages/portfolio/document/document_message.rs b/editor/src/messages/portfolio/document/document_message.rs index 7f567ba8..63e5ebe7 100644 --- a/editor/src/messages/portfolio/document/document_message.rs +++ b/editor/src/messages/portfolio/document/document_message.rs @@ -165,6 +165,9 @@ pub enum DocumentMessage { EndTransaction, CommitTransaction, AbortTransaction, + RepeatedAbortTransaction { + undo_count: usize, + }, AddTransaction, ToggleLayerExpansion { id: NodeId, diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index e2d3e976..a426791e 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -1183,11 +1183,17 @@ impl MessageHandler> for DocumentMessag self.document_redo_history.clear(); } DocumentMessage::AbortTransaction => { + responses.add(DocumentMessage::RepeatedAbortTransaction { undo_count: 1 }); + } + DocumentMessage::RepeatedAbortTransaction { undo_count } => { if self.network_interface.transaction_status() == TransactionStatus::Finished { return; } - self.undo(ipp, responses); + for _ in 0..undo_count { + self.undo(ipp, responses); + } + self.network_interface.finish_transaction(); responses.add(OverlaysMessage::Draw); } 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 6b71e080..cf02b7f9 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 @@ -37,12 +37,16 @@ pub struct TransformLayerMessageHandler { original_transforms: OriginalTransforms, pivot: ViewportPosition, + local_pivot: DocumentPosition, local_mouse_start: DocumentPosition, grab_target: DocumentPosition, + ptz: PTZ, initial_transform: DAffine2, + operation_count: usize, + // Pen tool (outgoing handle GRS manipulation) handle: DVec2, last_point: DVec2, @@ -191,9 +195,6 @@ impl MessageHandler> for TransformLayer *selected.pivot = new_pivot; self.local_pivot = document_to_viewport.inverse().transform_point2(*selected.pivot); - - self.grab_target = grab_target; - self.grab_target = document_to_viewport.inverse().transform_point2(grab_target); } else { log::warn!("Failed to calculate pivot."); @@ -341,6 +342,7 @@ impl MessageHandler> for TransformLayer selected.responses.add(PenToolMessage::Confirm); } else { update_colinear_handles(&selected_layers, document, responses); + self.operation_count = 0; responses.add(DocumentMessage::EndTransaction); responses.add(ToolMessage::UpdateHints); responses.add(NodeGraphMessage::RunDocumentGraph); @@ -396,6 +398,7 @@ impl MessageHandler> for TransformLayer self.transform_operation = TransformOperation::Grabbing(Default::default()); self.local = false; self.layer_bounding_box = selected.bounding_box(); + self.operation_count += 1; selected.original_transforms.clear(); @@ -449,6 +452,7 @@ impl MessageHandler> for TransformLayer self.local = false; self.layer_bounding_box = selected.bounding_box(); + self.operation_count += 1; selected.original_transforms.clear(); @@ -501,6 +505,7 @@ impl MessageHandler> for TransformLayer self.local = false; self.layer_bounding_box = selected.bounding_box(); + self.operation_count += 1; selected.original_transforms.clear(); @@ -526,7 +531,8 @@ impl MessageHandler> for TransformLayer self.typing.clear(); self.transform_operation = TransformOperation::None; - responses.add(DocumentMessage::AbortTransaction); + responses.add(DocumentMessage::RepeatedAbortTransaction { undo_count: self.operation_count }); + self.operation_count = 0; responses.add(ToolMessage::UpdateHints); }