Skip to content

Commit 98558c7

Browse files
Add Gradient tool test for dragging an endpoint setting the correct point in the viewport (#2564)
* Add Gradient tool test for dragging an endpoint sets the correct point in the viewport * add canvas_zoom and transformset to verify correct viewport-space behavior
1 parent 9b23c7e commit 98558c7

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

editor/src/messages/tool/tool_messages/gradient_tool.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,4 +709,78 @@ mod test_gradient {
709709
positions
710710
);
711711
}
712+
713+
#[tokio::test]
714+
async fn dragging_endpoint_sets_correct_point() {
715+
let mut editor = EditorTestUtils::create();
716+
editor.new_document().await;
717+
718+
editor.handle_message(NavigationMessage::CanvasZoomSet { zoom_factor: 2.0 }).await;
719+
720+
editor.drag_tool(ToolType::Rectangle, -5., -3., 100., 100., ModifierKeys::empty()).await;
721+
722+
let document = editor.active_document();
723+
let selected_layer = document.network_interface.selected_nodes().selected_layers(document.metadata()).next().unwrap();
724+
editor
725+
.handle_message(GraphOperationMessage::TransformSet {
726+
layer: selected_layer,
727+
transform: DAffine2::from_scale_angle_translation(DVec2::new(1.5, 0.8), 0.3, DVec2::new(10.0, -5.0)),
728+
transform_in: TransformIn::Local,
729+
skip_rerender: false,
730+
})
731+
.await;
732+
733+
editor.select_primary_color(Color::GREEN).await;
734+
editor.select_secondary_color(Color::BLUE).await;
735+
736+
editor.drag_tool(ToolType::Gradient, 0., 0., 100., 0., ModifierKeys::empty()).await;
737+
738+
// Get the initial gradient state (should have 2 stops)
739+
let initial_fills = get_fills(&mut editor).await;
740+
assert_eq!(initial_fills.len(), 1);
741+
let (initial_fill, transform) = initial_fills.first().unwrap();
742+
let initial_gradient = initial_fill.as_gradient().unwrap();
743+
744+
// Verify initial gradient endpoints in viewport space
745+
let initial_start = transform.transform_point2(initial_gradient.start);
746+
let initial_end = transform.transform_point2(initial_gradient.end);
747+
assert!(initial_start.abs_diff_eq(DVec2::new(0., 0.), 1e-10));
748+
assert!(initial_end.abs_diff_eq(DVec2::new(100., 0.), 1e-10));
749+
750+
editor.select_tool(ToolType::Gradient).await;
751+
752+
// Simulate dragging the end point to a new position (100, 50)
753+
let start_pos = DVec2::new(100., 0.);
754+
let end_pos = DVec2::new(100., 50.);
755+
756+
editor.move_mouse(start_pos.x, start_pos.y, ModifierKeys::empty(), MouseKeys::empty()).await;
757+
editor.left_mousedown(start_pos.x, start_pos.y, ModifierKeys::empty()).await;
758+
759+
editor.move_mouse(end_pos.x, end_pos.y, ModifierKeys::empty(), MouseKeys::LEFT).await;
760+
761+
editor
762+
.mouseup(
763+
EditorMouseState {
764+
editor_position: end_pos,
765+
mouse_keys: MouseKeys::empty(),
766+
scroll_delta: ScrollDelta::default(),
767+
},
768+
ModifierKeys::empty(),
769+
)
770+
.await;
771+
772+
// Check the updated gradient
773+
let updated_fills = get_fills(&mut editor).await;
774+
assert_eq!(updated_fills.len(), 1);
775+
let (updated_fill, transform) = updated_fills.first().unwrap();
776+
let updated_gradient = updated_fill.as_gradient().unwrap();
777+
778+
// Verify the start point hasn't changed
779+
let updated_start = transform.transform_point2(updated_gradient.start);
780+
assert!(updated_start.abs_diff_eq(DVec2::new(0., 0.), 1e-10));
781+
782+
// Verify the end point has been updated to the new position
783+
let updated_end = transform.transform_point2(updated_gradient.end);
784+
assert!(updated_end.abs_diff_eq(DVec2::new(100., 50.), 1e-10), "Expected end point at (100, 50), got {:?}", updated_end);
785+
}
712786
}

0 commit comments

Comments
 (0)