From 5dccdd3f6805a062dc12c905d6850fe02ae09416 Mon Sep 17 00:00:00 2001 From: Sidharth-Singh10 Date: Tue, 15 Apr 2025 23:38:44 +0530 Subject: [PATCH 1/4] Add Spline tool tests for drawing within a transformed artboard --- .../tool/tool_messages/spline_tool.rs | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/editor/src/messages/tool/tool_messages/spline_tool.rs b/editor/src/messages/tool/tool_messages/spline_tool.rs index d53f043f5e..bfb29f7053 100644 --- a/editor/src/messages/tool/tool_messages/spline_tool.rs +++ b/editor/src/messages/tool/tool_messages/spline_tool.rs @@ -799,4 +799,95 @@ mod test_spline_tool { // Assert all points are correctly positioned assert_point_positions(&vector_data, layer_to_viewport, &expected_points, 1e-10); } + + #[tokio::test] + async fn test_spline_tool_with_transformed_artboard() { + let mut editor = EditorTestUtils::create(); + editor.new_document().await; + + editor.drag_tool(ToolType::Artboard, 0., 0., 500., 500., ModifierKeys::empty()).await; + + let document = editor.active_document(); + let artboard_layer = document.network_interface.selected_nodes().selected_layers(document.metadata()).next().unwrap(); + + editor + .handle_message(GraphOperationMessage::TransformSet { + layer: artboard_layer, + transform: DAffine2::from_scale_angle_translation(DVec2::new(1.5, 1.2), 30.0_f64.to_radians(), DVec2::new(50.0, 25.0)), + transform_in: TransformIn::Local, + skip_rerender: false, + }) + .await; + + let spline_start = DVec2::new(100., 100.); + let spline_mid = DVec2::new(200., 150.); + let spline_end = DVec2::new(300., 100.); + + editor.select_tool(ToolType::Spline).await; + editor.move_mouse(spline_start.x, spline_start.y, ModifierKeys::empty(), MouseKeys::empty()).await; + editor.left_mousedown(spline_start.x, spline_start.y, ModifierKeys::empty()).await; + editor + .mouseup( + EditorMouseState { + editor_position: spline_start, + mouse_keys: MouseKeys::empty(), + scroll_delta: ScrollDelta::default(), + }, + ModifierKeys::empty(), + ) + .await; + + editor.move_mouse(spline_mid.x, spline_mid.y, ModifierKeys::empty(), MouseKeys::empty()).await; + editor.left_mousedown(spline_mid.x, spline_mid.y, ModifierKeys::empty()).await; + editor + .mouseup( + EditorMouseState { + editor_position: spline_mid, + mouse_keys: MouseKeys::empty(), + scroll_delta: ScrollDelta::default(), + }, + ModifierKeys::empty(), + ) + .await; + + editor.move_mouse(spline_end.x, spline_end.y, ModifierKeys::empty(), MouseKeys::empty()).await; + editor.left_mousedown(spline_end.x, spline_end.y, ModifierKeys::empty()).await; + editor + .mouseup( + EditorMouseState { + editor_position: spline_end, + mouse_keys: MouseKeys::empty(), + scroll_delta: ScrollDelta::default(), + }, + ModifierKeys::empty(), + ) + .await; + + editor.press(Key::Enter, ModifierKeys::empty()).await; + + // Execute the graph to ensure everything is processed + let _instrumented = editor.eval_graph().await; + + let document = editor.active_document(); + + let mut layers = document.metadata().all_layers(); + + layers.next(); + + let spline_layer = layers.next().expect("Failed to find the spline layer"); + + assert!(find_spline(document, spline_layer).is_some(), "Spline node not found in the layer"); + + let vector_data = document.network_interface.compute_modified_vector(spline_layer); + assert!(vector_data.is_some(), "Vector data not found for the spline layer"); + + let vector_data = vector_data.unwrap(); + + // Verify we have the correct number of points and segments + let point_count = vector_data.point_domain.ids().len(); + let segment_count = vector_data.segment_domain.ids().len(); + + assert_eq!(point_count, 3, "Expected 3 points in the spline, found {}", point_count); + assert_eq!(segment_count, 2, "Expected 2 segments in the spline, found {}", segment_count); + } } From c6b1f9fca46ae1aeeaecadd7f9a7e13da36c4c30 Mon Sep 17 00:00:00 2001 From: Sidharth-Singh10 Date: Wed, 16 Apr 2025 20:51:30 +0530 Subject: [PATCH 2/4] Refactor spline tool test to use click_tool and add draw_spline helper method --- .../tool/tool_messages/spline_tool.rs | 86 +++++++------------ 1 file changed, 32 insertions(+), 54 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/spline_tool.rs b/editor/src/messages/tool/tool_messages/spline_tool.rs index bfb29f7053..ff11cc9c0e 100644 --- a/editor/src/messages/tool/tool_messages/spline_tool.rs +++ b/editor/src/messages/tool/tool_messages/spline_tool.rs @@ -537,6 +537,7 @@ fn delete_preview(tool_data: &mut SplineToolData, responses: &mut VecDeque = vector_data + .point_domain + .ids() + .iter() + .filter_map(|&point_id| { + let position = vector_data.point_domain.position_from_id(point_id)?; + Some(layer_to_viewport.transform_point2(position)) + }) + .collect(); + + // Verify each point position is close to the expected position + let epsilon = 1e-10; + for (i, expected_point) in spline_points.iter().enumerate() { + let actual_point = points_in_viewport[i]; + let distance = (actual_point - *expected_point).length(); + + assert!( + distance < epsilon, + "Point {} position mismatch: expected {:?}, got {:?} (distance: {})", + i, + expected_point, + actual_point, + distance + ); + } } } From c8360b2d422a0ef975e886de107abc2c53c293b6 Mon Sep 17 00:00:00 2001 From: Sidharth-Singh10 Date: Fri, 18 Apr 2025 23:26:39 +0530 Subject: [PATCH 3/4] refactor asserting point positions --- .../tool/tool_messages/spline_tool.rs | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/spline_tool.rs b/editor/src/messages/tool/tool_messages/spline_tool.rs index ff11cc9c0e..70904d46ff 100644 --- a/editor/src/messages/tool/tool_messages/spline_tool.rs +++ b/editor/src/messages/tool/tool_messages/spline_tool.rs @@ -842,30 +842,6 @@ mod test_spline_tool { let layer_to_viewport = document.metadata().transform_to_viewport(spline_layer); - let points_in_viewport: Vec = vector_data - .point_domain - .ids() - .iter() - .filter_map(|&point_id| { - let position = vector_data.point_domain.position_from_id(point_id)?; - Some(layer_to_viewport.transform_point2(position)) - }) - .collect(); - - // Verify each point position is close to the expected position - let epsilon = 1e-10; - for (i, expected_point) in spline_points.iter().enumerate() { - let actual_point = points_in_viewport[i]; - let distance = (actual_point - *expected_point).length(); - - assert!( - distance < epsilon, - "Point {} position mismatch: expected {:?}, got {:?} (distance: {})", - i, - expected_point, - actual_point, - distance - ); - } + assert_point_positions(&vector_data, layer_to_viewport, &spline_points, 1e-10); } } From 42a71db156953a8d29e1de8f3661a3dd7df32365 Mon Sep 17 00:00:00 2001 From: Keavon Chambers Date: Fri, 25 Apr 2025 06:54:28 -0700 Subject: [PATCH 4/4] Fix decimal fomat --- editor/src/messages/tool/tool_messages/spline_tool.rs | 2 +- 1 file changed, 1 insertion(+), 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 70904d46ff..bcec6aaf52 100644 --- a/editor/src/messages/tool/tool_messages/spline_tool.rs +++ b/editor/src/messages/tool/tool_messages/spline_tool.rs @@ -813,7 +813,7 @@ mod test_spline_tool { editor .handle_message(GraphOperationMessage::TransformSet { layer: artboard_layer, - transform: DAffine2::from_scale_angle_translation(DVec2::new(1.5, 1.2), 30.0_f64.to_radians(), DVec2::new(50.0, 25.0)), + transform: DAffine2::from_scale_angle_translation(DVec2::new(1.5, 1.2), 30_f64.to_radians(), DVec2::new(50., 25.)), transform_in: TransformIn::Local, skip_rerender: false, })