diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index 374e17de..37ca030b 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -345,7 +345,7 @@ impl PathToolData { responses.add(NodeGraphMessage::SelectedNodesSet { nodes: vec![layer.to_node()] }); } self.drag_start_pos = input.mouse.position; - self.previous_mouse_position = input.mouse.position; + self.previous_mouse_position = document.metadata.document_to_viewport.inverse().transform_point2(input.mouse.position); shape_editor.select_all_anchors_in_layer(&document.network, layer); PathToolFsmState::Dragging @@ -353,13 +353,13 @@ impl PathToolData { // Start drawing a box else { self.drag_start_pos = input.mouse.position; - self.previous_mouse_position = input.mouse.position; + self.previous_mouse_position = document.metadata.document_to_viewport.inverse().transform_point2(input.mouse.position); PathToolFsmState::DrawingBox } } - fn start_dragging_point(&mut self, mut selected_points: SelectedPointsInfo, input: &InputPreprocessorMessageHandler, _document: &DocumentMessageHandler, responses: &mut VecDeque) { + fn start_dragging_point(&mut self, mut selected_points: SelectedPointsInfo, input: &InputPreprocessorMessageHandler, document: &DocumentMessageHandler, responses: &mut VecDeque) { responses.add(DocumentMessage::StartTransaction); // TODO: enable snapping @@ -384,8 +384,8 @@ impl PathToolData { } selected_points.points.extend(additional_selected_points); - self.drag_start_pos = input.mouse.position; - self.previous_mouse_position = input.mouse.position - selected_points.offset; + let viewport_to_document = document.metadata.document_to_viewport.inverse(); + self.previous_mouse_position = viewport_to_document.transform_point2(input.mouse.position - selected_points.offset); } fn drag(&mut self, shift: bool, alt: bool, shape_editor: &mut ShapeState, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler, responses: &mut VecDeque) { @@ -406,9 +406,10 @@ impl PathToolData { } // Move the selected points with the mouse - let snapped_delta = shape_editor.snap(&mut self.snap_manager, document, input, self.previous_mouse_position); + let previous_mouse = document.metadata.document_to_viewport.transform_point2(self.previous_mouse_position); + let snapped_delta = shape_editor.snap(&mut self.snap_manager, document, input, previous_mouse); shape_editor.move_selected_points(&document.network, &document.metadata, snapped_delta, shift, responses); - self.previous_mouse_position += snapped_delta; + self.previous_mouse_position += document.metadata.document_to_viewport.inverse().transform_vector2(snapped_delta); } }