Skip to content

Commit c4e16e1

Browse files
rahat2134Keavon
authored andcommitted
Add tests for document panning, zooming, and rotating (#2492)
* add tests for panned, zoomed, and rotated * add tests for panned, zoomed, and rotated * Did some changes for grs system * change
1 parent 158f18d commit c4e16e1

File tree

1 file changed

+83
-1
lines changed

1 file changed

+83
-1
lines changed

editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs

+83-1
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ mod test_transform_layer {
705705
use crate::messages::portfolio::document::graph_operation::transform_utils;
706706
use crate::test_utils::test_prelude::*;
707707
// Use ModifyInputsContext to locate the transform node
708-
use crate::messages::portfolio::document::graph_operation::utility_types::ModifyInputsContext;
708+
use crate::messages::portfolio::document::graph_operation::utility_types::{ModifyInputsContext, TransformIn};
709709
use crate::messages::prelude::Message;
710710
use glam::DAffine2;
711711
use std::collections::VecDeque;
@@ -982,4 +982,86 @@ mod test_transform_layer {
982982
assert!(final_transform.abs_diff_eq(after_scale_transform, 1e-5), "Final transform should match the transform before committing");
983983
assert!(!final_transform.abs_diff_eq(original_transform, 1e-5), "Final transform should be different from original transform");
984984
}
985+
986+
#[tokio::test]
987+
async fn test_scale_with_panned_view() {
988+
let mut editor = EditorTestUtils::create();
989+
editor.new_document().await;
990+
editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
991+
let document = editor.active_document();
992+
let layer = document.metadata().all_layers().next().unwrap();
993+
994+
let original_transform = get_layer_transform(&mut editor, layer).await.unwrap();
995+
996+
let pan_amount = DVec2::new(200.0, 150.0);
997+
editor.handle_message(NavigationMessage::CanvasPan { delta: pan_amount }).await;
998+
999+
editor.handle_message(TransformLayerMessage::BeginScale).await;
1000+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 2 }).await;
1001+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1002+
1003+
let final_transform = get_layer_transform(&mut editor, layer).await.unwrap();
1004+
1005+
let scale_x = final_transform.matrix2.x_axis.length() / original_transform.matrix2.x_axis.length();
1006+
let scale_y = final_transform.matrix2.y_axis.length() / original_transform.matrix2.y_axis.length();
1007+
1008+
assert!((scale_x - 2.0).abs() < 0.1, "Expected scale factor X of 2.0, got: {}", scale_x);
1009+
assert!((scale_y - 2.0).abs() < 0.1, "Expected scale factor Y of 2.0, got: {}", scale_y);
1010+
}
1011+
1012+
#[tokio::test]
1013+
async fn test_scale_with_zoomed_view() {
1014+
let mut editor = EditorTestUtils::create();
1015+
editor.new_document().await;
1016+
editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
1017+
let document = editor.active_document();
1018+
let layer = document.metadata().all_layers().next().unwrap();
1019+
1020+
let original_transform = get_layer_transform(&mut editor, layer).await.unwrap();
1021+
1022+
editor.handle_message(NavigationMessage::CanvasZoomIncrease { center_on_mouse: false }).await;
1023+
editor.handle_message(NavigationMessage::CanvasZoomIncrease { center_on_mouse: false }).await;
1024+
1025+
editor.handle_message(TransformLayerMessage::BeginScale).await;
1026+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 2 }).await;
1027+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1028+
1029+
let final_transform = get_layer_transform(&mut editor, layer).await.unwrap();
1030+
1031+
let scale_x = final_transform.matrix2.x_axis.length() / original_transform.matrix2.x_axis.length();
1032+
let scale_y = final_transform.matrix2.y_axis.length() / original_transform.matrix2.y_axis.length();
1033+
1034+
assert!((scale_x - 2.0).abs() < 0.1, "Expected scale factor X of 2.0, got: {}", scale_x);
1035+
assert!((scale_y - 2.0).abs() < 0.1, "Expected scale factor Y of 2.0, got: {}", scale_y);
1036+
}
1037+
1038+
#[tokio::test]
1039+
async fn test_rotate_with_rotated_view() {
1040+
let mut editor = EditorTestUtils::create();
1041+
editor.new_document().await;
1042+
editor.drag_tool(ToolType::Rectangle, 0., 0., 100., 100., ModifierKeys::empty()).await;
1043+
let document = editor.active_document();
1044+
let layer = document.metadata().all_layers().next().unwrap();
1045+
1046+
let original_transform = get_layer_transform(&mut editor, layer).await.unwrap();
1047+
1048+
// Rotate the document view (45 degrees)
1049+
editor.handle_message(NavigationMessage::BeginCanvasTilt { was_dispatched_from_menu: false }).await;
1050+
editor.handle_message(NavigationMessage::CanvasTiltSet { angle_radians: 45.0_f64.to_radians() }).await;
1051+
editor.handle_message(TransformLayerMessage::BeginRotate).await;
1052+
1053+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 9 }).await;
1054+
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 0 }).await;
1055+
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
1056+
1057+
let final_transform = get_layer_transform(&mut editor, layer).await.unwrap();
1058+
1059+
let original_angle = original_transform.to_scale_angle_translation().1;
1060+
let final_angle = final_transform.to_scale_angle_translation().1;
1061+
let angle_change = (final_angle - original_angle).to_degrees();
1062+
1063+
// Normalize angle between 0 and 360
1064+
let angle_change = ((angle_change % 360.0) + 360.0) % 360.0;
1065+
assert!((angle_change - 90.0).abs() < 0.1, "Expected rotation of 90 degrees, got: {}", angle_change);
1066+
}
9851067
}

0 commit comments

Comments
 (0)