From 5cf0b8893ae350c2d1af161fb4b8b223029b6bf2 Mon Sep 17 00:00:00 2001 From: zhiyuan <32867472+zhiyuang@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:50:02 +0800 Subject: [PATCH] Fix Freehand tool extending after transforming the path (#1623) Fix extending after transforming --- .../tool/tool_messages/freehand_tool.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/freehand_tool.rs b/editor/src/messages/tool/tool_messages/freehand_tool.rs index 0908f5e6..47a83d3e 100644 --- a/editor/src/messages/tool/tool_messages/freehand_tool.rs +++ b/editor/src/messages/tool/tool_messages/freehand_tool.rs @@ -216,17 +216,13 @@ impl Fsm for FreehandToolFsmState { (FreehandToolFsmState::Ready, FreehandToolMessage::DragStart) => { responses.add(DocumentMessage::StartTransaction); - let parent = document.new_layer_parent(); - let transform = document.metadata().transform_to_viewport(parent); - let pos = transform.inverse().transform_point2(input.mouse.position); - tool_data.dragged = false; tool_data.extend_from_start = false; - tool_data.last_point = pos; - tool_data.weight = tool_options.line_weight; if let Some((layer, subpath_index, from_start)) = should_extend(document, input.mouse.position, crate::consts::SNAP_POINT_TOLERANCE) { + let transform = document.metadata().transform_to_viewport(layer); + let pos = transform.inverse().transform_point2(input.mouse.position); let manipulator_group = ManipulatorGroup::new_anchor(pos); let modification = if from_start { tool_data.extend_from_start = true; @@ -234,15 +230,23 @@ impl Fsm for FreehandToolFsmState { } else { VectorDataModification::AddEndManipulatorGroup { subpath_index, manipulator_group } }; - responses.add(GraphOperationMessage::Vector { layer, modification }); + tool_data.dragged = true; tool_data.last_point = pos; tool_data.layer = Some(layer); + + responses.add(GraphOperationMessage::Vector { layer, modification }); } else { responses.add(DocumentMessage::DeselectAllLayers); + + let parent = document.new_layer_parent(); + let transform = document.metadata().transform_to_viewport(parent); + let pos = transform.inverse().transform_point2(input.mouse.position); let subpath = bezier_rs::Subpath::from_anchors([pos], false); let layer = graph_modification_utils::new_vector_layer(vec![subpath], NodeId(generate_uuid()), parent, responses); + + tool_data.last_point = pos; tool_data.layer = Some(layer); responses.add(GraphOperationMessage::FillSet {