From ad68b1e5c8a30f0002eb068b1092781f3ef54a4c Mon Sep 17 00:00:00 2001 From: mTvare Date: Sun, 19 Jan 2025 13:16:28 +0530 Subject: [PATCH] Restore Pen tool undo/redo and fix incorrect triggering of undo when changing tools (#2193) Fixes ghost anchors, and allows undo in pentool Fixes https://discord.com/channels/731730685944922173/881073965047636018/1267365764231598186. Fixes https://discord.com/channels/731730685944922173/881073965047636018/1327376421034922045. Fixes #2152. Co-authored-by: Keavon Chambers --- editor/src/messages/tool/tool_messages/pen_tool.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/pen_tool.rs b/editor/src/messages/tool/tool_messages/pen_tool.rs index 845276c0..42fb9736 100644 --- a/editor/src/messages/tool/tool_messages/pen_tool.rs +++ b/editor/src/messages/tool/tool_messages/pen_tool.rs @@ -332,9 +332,8 @@ impl PenToolData { }, }); } - if close_subpath { - responses.add(DocumentMessage::EndTransaction); - } else { + responses.add(DocumentMessage::EndTransaction); + if !close_subpath { self.add_point(LastPoint { id: end, pos: next_point, @@ -764,7 +763,7 @@ impl Fsm for PenToolFsmState { state } - (PenToolFsmState::DraggingHandle | PenToolFsmState::PlacingAnchor, PenToolMessage::Abort | PenToolMessage::Confirm) => { + (PenToolFsmState::DraggingHandle | PenToolFsmState::PlacingAnchor, PenToolMessage::Confirm) => { responses.add(DocumentMessage::EndTransaction); tool_data.handle_end = None; tool_data.latest_points.clear(); @@ -793,9 +792,8 @@ impl Fsm for PenToolFsmState { } (_, PenToolMessage::Redo) => { tool_data.point_index = (tool_data.point_index + 1).min(tool_data.latest_points.len().saturating_sub(1)); - tool_data - .place_anchor(SnapData::new(document, input), transform, input.mouse.position, responses) - .unwrap_or(PenToolFsmState::PlacingAnchor) + tool_data.place_anchor(SnapData::new(document, input), transform, input.mouse.position, responses); + (tool_data.point_index == 0).then_some(PenToolFsmState::Ready).unwrap_or(PenToolFsmState::PlacingAnchor) } _ => self, }