From 6090f959cbd4533db0ede8a0b7dfd189e00b4798 Mon Sep 17 00:00:00 2001 From: mtvare6 Date: Wed, 26 Mar 2025 11:57:22 +0530 Subject: [PATCH 1/5] Fix line overlays not showing up for horizontal/vertical line --- editor/src/messages/tool/tool_messages/line_tool.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/src/messages/tool/tool_messages/line_tool.rs b/editor/src/messages/tool/tool_messages/line_tool.rs index 174a0dbd12..d7b6edd328 100644 --- a/editor/src/messages/tool/tool_messages/line_tool.rs +++ b/editor/src/messages/tool/tool_messages/line_tool.rs @@ -188,7 +188,7 @@ impl Fsm for LineToolFsmState { }; let [viewport_start, viewport_end] = [start, end].map(|point| document.metadata().transform_to_viewport(layer).transform_point2(point)); - if (start.x - end.x).abs() > f64::EPSILON * 1000. && (start.y - end.y).abs() > f64::EPSILON * 1000. { + if !start.abs_diff_eq(end, f64::EPSILON * 1000.) { overlay_context.line(viewport_start, viewport_end, None, None); overlay_context.square(viewport_start, Some(6.), None, None); overlay_context.square(viewport_end, Some(6.), None, None); From 8fcc28b97ed94d0cd4384e9c7fee4c0d735866a8 Mon Sep 17 00:00:00 2001 From: mtvare6 Date: Wed, 26 Mar 2025 12:36:10 +0530 Subject: [PATCH 2/5] Fix spline tool transform --- editor/src/messages/tool/tool_messages/spline_tool.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/editor/src/messages/tool/tool_messages/spline_tool.rs b/editor/src/messages/tool/tool_messages/spline_tool.rs index 6d4e1789f4..2a2fabdab2 100644 --- a/editor/src/messages/tool/tool_messages/spline_tool.rs +++ b/editor/src/messages/tool/tool_messages/spline_tool.rs @@ -227,7 +227,9 @@ impl SplineToolData { /// Get the snapped point while ignoring current layer fn snapped_point(&mut self, document: &DocumentMessageHandler, input: &InputPreprocessorMessageHandler) -> SnappedPoint { - let point = SnapCandidatePoint::handle(document.metadata().document_to_viewport.inverse().transform_point2(input.mouse.position)); + let metadata = document.metadata(); + let transform = self.current_layer.map_or(metadata.document_to_viewport, |layer| metadata.transform_to_viewport(layer)); + let point = SnapCandidatePoint::handle(transform.inverse().transform_point2(input.mouse.position)); let ignore = if let Some(layer) = self.current_layer { vec![layer] } else { vec![] }; let snap_data = SnapData::ignore(document, input, &ignore); self.snap_manager.free_snap(&snap_data, &point, SnapTypeConfiguration::default()) From e617dd67576a05e041626fdb90cd4673ea8a0e88 Mon Sep 17 00:00:00 2001 From: mtvare6 Date: Wed, 26 Mar 2025 13:41:07 +0530 Subject: [PATCH 3/5] Fix line tool transform --- editor/src/messages/tool/tool_messages/line_tool.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/line_tool.rs b/editor/src/messages/tool/tool_messages/line_tool.rs index d7b6edd328..a8127dfb5c 100644 --- a/editor/src/messages/tool/tool_messages/line_tool.rs +++ b/editor/src/messages/tool/tool_messages/line_tool.rs @@ -151,6 +151,9 @@ enum LineEnd { #[derive(Clone, Debug, Default)] struct LineToolData { + drag_begin: DVec2, + drag_start_shifted: DVec2, + drag_current_shifted: DVec2, drag_start: DVec2, drag_current: DVec2, angle: f64, @@ -204,6 +207,7 @@ impl Fsm for LineToolFsmState { let point = SnapCandidatePoint::handle(document.metadata().document_to_viewport.inverse().transform_point2(input.mouse.position)); let snapped = tool_data.snap_manager.free_snap(&SnapData::new(document, input), &point, SnapTypeConfiguration::default()); tool_data.drag_start = snapped.snapped_point_document; + tool_data.drag_begin = document.metadata().document_to_viewport.transform_point2(tool_data.drag_start); responses.add(DocumentMessage::StartTransaction); @@ -256,7 +260,9 @@ impl Fsm for LineToolFsmState { (LineToolFsmState::Drawing, LineToolMessage::PointerMove { center, snap_angle, lock_angle }) => { let Some(layer) = tool_data.editing_layer else { return LineToolFsmState::Ready }; - tool_data.drag_current = document.metadata().transform_to_viewport(layer).inverse().transform_point2(input.mouse.position); + tool_data.drag_current_shifted = document.metadata().transform_to_viewport(layer).inverse().transform_point2(input.mouse.position); + tool_data.drag_current = document.metadata().document_to_viewport.inverse().transform_point2(input.mouse.position); + tool_data.drag_start_shifted = document.metadata().transform_to_viewport(layer).inverse().transform_point2(tool_data.drag_begin); let keyboard = &input.keyboard; let ignore = vec![layer]; @@ -361,6 +367,7 @@ impl Fsm for LineToolFsmState { } fn generate_line(tool_data: &mut LineToolData, snap_data: SnapData, lock_angle: bool, snap_angle: bool, center: bool) -> [DVec2; 2] { + let shift = tool_data.drag_current_shifted - tool_data.drag_current; let mut document_points = [tool_data.drag_start, tool_data.drag_current]; let mut angle = -(document_points[1] - document_points[0]).angle_to(DVec2::X); @@ -419,5 +426,6 @@ fn generate_line(tool_data: &mut LineToolData, snap_data: SnapData, lock_angle: snap.update_indicator(snapped); } - document_points + // Snapping happens in other space, while document graph renders in another. + document_points.map(|vector| vector + shift) } From 9df3c1cfe8b2717b71a07e3b3de623bf1e1a4527 Mon Sep 17 00:00:00 2001 From: mtvare6 Date: Tue, 1 Apr 2025 12:27:53 +0530 Subject: [PATCH 4/5] Fix pivot following mouse even after confirm --- editor/src/messages/tool/tool_messages/select_tool.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 789e5928bd..5ab5e20e3d 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -1326,7 +1326,7 @@ impl Fsm for SelectToolFsmState { SelectToolFsmState::Ready { selection } } ( - SelectToolFsmState::ResizingBounds | SelectToolFsmState::SkewingBounds { .. } | SelectToolFsmState::RotatingBounds | SelectToolFsmState::Dragging { .. }, + SelectToolFsmState::ResizingBounds | SelectToolFsmState::SkewingBounds { .. } | SelectToolFsmState::RotatingBounds | SelectToolFsmState::Dragging { .. } | SelectToolFsmState::DraggingPivot, SelectToolMessage::DragStop { .. } | SelectToolMessage::Enter, ) => { let drag_too_small = input.mouse.position.distance(tool_data.drag_start) < 10. * f64::EPSILON; From 533570400336bf35dba8719c7975a301226c2797 Mon Sep 17 00:00:00 2001 From: mtvare6 Date: Wed, 2 Apr 2025 09:34:54 +0530 Subject: [PATCH 5/5] cargo fmt --- editor/src/messages/tool/tool_messages/select_tool.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/editor/src/messages/tool/tool_messages/select_tool.rs b/editor/src/messages/tool/tool_messages/select_tool.rs index 5ab5e20e3d..e0df78cb63 100644 --- a/editor/src/messages/tool/tool_messages/select_tool.rs +++ b/editor/src/messages/tool/tool_messages/select_tool.rs @@ -1326,7 +1326,11 @@ impl Fsm for SelectToolFsmState { SelectToolFsmState::Ready { selection } } ( - SelectToolFsmState::ResizingBounds | SelectToolFsmState::SkewingBounds { .. } | SelectToolFsmState::RotatingBounds | SelectToolFsmState::Dragging { .. } | SelectToolFsmState::DraggingPivot, + SelectToolFsmState::ResizingBounds + | SelectToolFsmState::SkewingBounds { .. } + | SelectToolFsmState::RotatingBounds + | SelectToolFsmState::Dragging { .. } + | SelectToolFsmState::DraggingPivot, SelectToolMessage::DragStop { .. } | SelectToolMessage::Enter, ) => { let drag_too_small = input.mouse.position.distance(tool_data.drag_start) < 10. * f64::EPSILON;