diff --git a/editor/src/messages/tool/tool_messages/freehand_tool.rs b/editor/src/messages/tool/tool_messages/freehand_tool.rs index ec5e2b8c2c..09776a0598 100644 --- a/editor/src/messages/tool/tool_messages/freehand_tool.rs +++ b/editor/src/messages/tool/tool_messages/freehand_tool.rs @@ -264,7 +264,12 @@ impl Fsm for FreehandToolFsmState { if tool_data.dragged { responses.add(DocumentMessage::CommitTransaction); } else { - responses.add(DocumentMessage::EndTransaction); + if let Some(layer) = tool_data.layer { + responses.add(NodeGraphMessage::DeleteNodes { + node_ids: vec![layer.to_node()], + delete_children: true, + }); + } } tool_data.end_point = None; diff --git a/editor/src/messages/tool/tool_messages/line_tool.rs b/editor/src/messages/tool/tool_messages/line_tool.rs index b0ace3426f..bbc7515099 100644 --- a/editor/src/messages/tool/tool_messages/line_tool.rs +++ b/editor/src/messages/tool/tool_messages/line_tool.rs @@ -319,10 +319,27 @@ impl Fsm for LineToolFsmState { } (LineToolFsmState::Drawing, LineToolMessage::DragStop) => { tool_data.snap_manager.cleanup(responses); - tool_data.editing_layer.take(); - input.mouse.finish_transaction(tool_data.drag_start, responses); + + if let Some(layer) = tool_data.editing_layer.take() { + let Some(&[start, end]) = tool_data.selected_layers_with_position.get(&layer) else { + input.mouse.finish_transaction(tool_data.drag_start, responses); + return LineToolFsmState::Ready; + }; + + if start.abs_diff_eq(end, f64::EPSILON * 1000.) { + responses.add(NodeGraphMessage::DeleteNodes { + node_ids: vec![layer.to_node()], + delete_children: true, + }); + responses.add(DocumentMessage::AbortTransaction); + } else { + input.mouse.finish_transaction(tool_data.drag_start, responses); + } + } + LineToolFsmState::Ready } + (LineToolFsmState::Drawing, LineToolMessage::Abort) => { tool_data.snap_manager.cleanup(responses); tool_data.editing_layer.take();