Revert #1587 and #1597 so the Pen tool no longer handles per-segment history

This commit is contained in:
Keavon Chambers
2026-09-06 14:03:19 -07:00
parent f11e6f3bc6
commit ae87be30b0
4 changed files with 1 additions and 72 deletions
@@ -917,7 +917,6 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
} }
responses.add(SelectToolMessage::Abort); responses.add(SelectToolMessage::Abort);
responses.add(DocumentMessage::DocumentHistoryForward); responses.add(DocumentMessage::DocumentHistoryForward);
responses.add(ToolMessage::Redo);
responses.add(OverlaysMessage::Draw); responses.add(OverlaysMessage::Draw);
responses.add(EventMessage::SelectionChanged); responses.add(EventMessage::SelectionChanged);
} }
@@ -1529,10 +1528,9 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
if self.network_interface.transaction_status() != TransactionStatus::Finished { if self.network_interface.transaction_status() != TransactionStatus::Finished {
return; return;
} }
responses.add(ToolMessage::PreUndo); responses.add(EventMessage::ToolAbort);
responses.add(DocumentMessage::DocumentHistoryBackward); responses.add(DocumentMessage::DocumentHistoryBackward);
responses.add(OverlaysMessage::Draw); responses.add(OverlaysMessage::Draw);
responses.add(ToolMessage::Undo);
responses.add(EventMessage::SelectionChanged); responses.add(EventMessage::SelectionChanged);
} }
DocumentMessage::UngroupSelectedLayers => { DocumentMessage::UngroupSelectedLayers => {
-3
View File
@@ -76,8 +76,6 @@ pub enum ToolMessage {
}, },
DeactivateTools, DeactivateTools,
InitTools, InitTools,
PreUndo,
Redo,
RefreshToolOptions, RefreshToolOptions,
RefreshToolShelf, RefreshToolShelf,
ResetColors, ResetColors,
@@ -90,7 +88,6 @@ pub enum ToolMessage {
}, },
ToggleSelectVsPath, ToggleSelectVsPath,
SwapColors, SwapColors,
Undo,
UpdateCursor, UpdateCursor,
UpdateHints, UpdateHints,
UpdateSelectionMode { UpdateSelectionMode {
@@ -243,18 +243,6 @@ impl MessageHandler<ToolMessage, ToolMessageContext<'_>> for ToolMessageHandler
responses.add(OverlaysMessage::AddProvider { provider: ARTBOARD_OVERLAY_PROVIDER }); responses.add(OverlaysMessage::AddProvider { provider: ARTBOARD_OVERLAY_PROVIDER });
} }
ToolMessage::PreUndo => {
let tool_data = &mut self.tool_state.tool_data;
if tool_data.active_tool_type != ToolType::Pen {
responses.add(EventMessage::ToolAbort);
}
}
ToolMessage::Redo => {
let tool_data = &mut self.tool_state.tool_data;
if tool_data.active_tool_type == ToolType::Pen {
responses.add(PenToolMessage::Redo);
}
}
ToolMessage::RefreshToolOptions => { ToolMessage::RefreshToolOptions => {
let tool_data = &mut self.tool_state.tool_data; let tool_data = &mut self.tool_state.tool_data;
@@ -318,12 +306,6 @@ impl MessageHandler<ToolMessage, ToolMessageContext<'_>> for ToolMessageHandler
document_data.update_working_colors(responses); // TODO: Make this an event document_data.update_working_colors(responses); // TODO: Make this an event
} }
ToolMessage::Undo => {
let tool_data = &mut self.tool_state.tool_data;
if tool_data.active_tool_type == ToolType::Pen {
responses.add(PenToolMessage::Undo);
}
}
// Sub-messages // Sub-messages
tool_message => { tool_message => {
@@ -390,8 +372,6 @@ impl MessageHandler<ToolMessage, ToolMessageContext<'_>> for ToolMessageHandler
SelectRandomWorkingColor, SelectRandomWorkingColor,
ResetColors, ResetColors,
SwapColors, SwapColors,
Undo,
); );
list.extend(self.tool_state.tool_data.active_tool().actions()); list.extend(self.tool_state.tool_data.active_tool().actions());
list.extend(self.transform_layer_handler.actions()); list.extend(self.transform_layer_handler.actions());
@@ -83,7 +83,6 @@ pub enum PenToolMessage {
colinear: Key, colinear: Key,
move_anchor_with_handles: Key, move_anchor_with_handles: Key,
}, },
Redo,
Undo, Undo,
UpdateOptions { UpdateOptions {
options: PenOptionsUpdate, options: PenOptionsUpdate,
@@ -485,30 +484,6 @@ impl PenToolData {
} }
} }
/// Re-renders the preview after an undo/redo once the graph has re-evaluated, since the layer transform is
/// briefly stale until then and would place the preview off in the wrong space. Also suppresses the angle
/// modifiers (Ctrl, Shift) still held from the shortcut until each is released and pressed again.
fn refresh_preview_after_history(&mut self, responses: &mut VecDeque<Message>) {
self.suppress_lock_angle = true;
self.suppress_snap_angle = true;
self.modifiers.lock_angle = false;
self.modifiers.snap_angle = false;
self.angle_locked = false;
responses.add(DeferMessage::AfterGraphRun {
messages: vec![
PenToolMessage::PointerMove {
snap_angle: Key::Shift,
break_handle: Key::Alt,
lock_angle: Key::Control,
colinear: Key::KeyC,
move_anchor_with_handles: Key::Space,
}
.into(),
],
});
}
/// Check whether target handle is primary, end, or `self.handle_end` /// Check whether target handle is primary, end, or `self.handle_end`
fn check_end_handle_type(&self, vector: &Vector) -> TargetHandle { fn check_end_handle_type(&self, vector: &Vector) -> TargetHandle {
match (self.handle_end, self.prior_segment_endpoint, self.prior_segment, self.path_closed) { match (self.handle_end, self.prior_segment_endpoint, self.prior_segment, self.path_closed) {
@@ -1926,9 +1901,6 @@ impl Fsm for PenToolFsmState {
tool_data.buffering_merged_vector = false; tool_data.buffering_merged_vector = false;
PenToolFsmState::DraggingHandle(tool_data.handle_mode) PenToolFsmState::DraggingHandle(tool_data.handle_mode)
} else { } else {
if tool_data.handle_end.is_some() {
responses.add(DocumentMessage::StartTransaction);
}
// Merge two layers if the point is connected to the end point of another path // Merge two layers if the point is connected to the end point of another path
// This might not be the correct solution to artboards being included as the other layer, // This might not be the correct solution to artboards being included as the other layer,
@@ -2248,24 +2220,6 @@ impl Fsm for PenToolFsmState {
PenToolFsmState::Ready PenToolFsmState::Ready
} }
(_, PenToolMessage::Abort) => PenToolFsmState::Ready, (_, PenToolMessage::Abort) => PenToolFsmState::Ready,
(PenToolFsmState::DraggingHandle(..) | PenToolFsmState::PlacingAnchor, PenToolMessage::Undo) => {
if tool_data.point_index > 0 {
tool_data.point_index -= 1;
tool_data.refresh_preview_after_history(responses);
PenToolFsmState::PlacingAnchor
} else {
responses.add(PenToolMessage::Abort);
self
}
}
(_, PenToolMessage::Redo) => {
tool_data.point_index = (tool_data.point_index + 1).min(tool_data.latest_points.len().saturating_sub(1));
tool_data.refresh_preview_after_history(responses);
match tool_data.point_index {
0 => PenToolFsmState::Ready,
_ => PenToolFsmState::PlacingAnchor,
}
}
_ => self, _ => self,
} }
} }