Skip to content
Merged
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
c54aeae
cli failing
rahat2134 Apr 4, 2025
6cc823a
cli failing
rahat2134 Apr 4, 2025
1168bb3
Merge branch 'master' of https://github.com/GraphiteEditor/Graphite
rahat2134 Apr 5, 2025
a09762e
test_transform_with_different_selections and groups
rahat2134 Apr 5, 2025
e987349
Merge branch 'master' into grs-test-multiple-selection-grp
rahat2134 Apr 6, 2025
50d96fc
Merge branch 'master' into grs-test-multiple-selection-grp
rahat2134 Apr 6, 2025
ea8ce1d
merge conflict
rahat2134 Apr 6, 2025
a033cff
Merge branch 'grs-test-multiple-selection-grp' of github-rahat2134:ra…
rahat2134 Apr 6, 2025
52c7d17
merge conflict
rahat2134 Apr 6, 2025
9e1816d
Merge branch 'master' into grs-test-multiple-selection-grp
rahat2134 Apr 9, 2025
8ba4025
Use abs_diff_eq in assertions
rahat2134 Apr 9, 2025
1bb2281
Merge branch 'master' of https://github.com/GraphiteEditor/Graphite i…
rahat2134 Apr 9, 2025
e0dc410
Merge branch 'grs-test-multiple-selection-grp' of github-rahat2134:ra…
rahat2134 Apr 9, 2025
e71aacf
Added test 4
rahat2134 Apr 9, 2025
07bfed9
Added test 4
rahat2134 Apr 9, 2025
a95f695
Merge branch 'master' of https://github.com/GraphiteEditor/Graphite i…
rahat2134 Apr 10, 2025
f9e6606
Merge branch 'grs-test-multiple-selection-grp' of github-rahat2134:ra…
rahat2134 Apr 10, 2025
ea7c118
removed unnecessary changes
rahat2134 Apr 10, 2025
4248599
Merge branch 'master' into grs-test-multiple-selection-grp
rahat2134 Apr 10, 2025
fff4420
Merge branch 'master' into grs-test-multiple-selection-grp
rahat2134 Apr 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,7 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer

#[cfg(test)]
mod test_transform_layer {
use crate::messages::portfolio::document::utility_types::misc::GroupFolderType;
use crate::messages::{
portfolio::document::graph_operation::{
transform_utils,
Expand Down Expand Up @@ -1150,4 +1151,113 @@ mod test_transform_layer {
assert!(new_scale_x > 0.0, "After rescaling, scale factor X should be non-zero");
assert!(new_scale_y > 0.0, "After rescaling, scale factor Y should be non-zero");
}

#[tokio::test]
async fn test_transform_with_different_selections() {
let mut editor = EditorTestUtils::create();
editor.new_document().await;
editor.draw_rect(0., 0., 100., 100.).await;
editor.draw_rect(150., 0., 250., 100.).await;
editor.draw_rect(0., 150., 100., 250.).await;
editor.draw_rect(150., 150., 250., 250.).await;
let document = editor.active_document();
let layers: Vec<LayerNodeIdentifier> = document.metadata().all_layers().collect();

assert!(layers.len() == 4);

// Creating a group with two rectangles
editor
.handle_message(NodeGraphMessage::SelectedNodesSet {
nodes: vec![layers[2].to_node(), layers[3].to_node()],
})
.await;
editor
.handle_message(DocumentMessage::GroupSelectedLayers {
group_folder_type: GroupFolderType::Layer,
})
.await;

// Get the group layer (should be the newest layer)
let document = editor.active_document();
let group_layer = document.metadata().all_layers().next().unwrap();

// Test 1: Transform single layer
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![layers[0].to_node()] }).await;
let original_transform = get_layer_transform(&mut editor, layers[0]).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginGrab).await;
editor.move_mouse(50.0, 50.0, ModifierKeys::empty(), MouseKeys::NONE).await;
editor
.handle_message(TransformLayerMessage::PointerMove {
slow_key: Key::Shift,
increments_key: Key::Control,
})
.await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_transform = get_layer_transform(&mut editor, layers[0]).await.unwrap();
assert!(!final_transform.abs_diff_eq(original_transform, 1e-5), "Transform should change for single layer");

// Test 2: Transform multiple layers
editor
.handle_message(NodeGraphMessage::SelectedNodesSet {
nodes: vec![layers[0].to_node(), layers[1].to_node()],
})
.await;
let original_transform_1 = get_layer_transform(&mut editor, layers[0]).await.unwrap();
let original_transform_2 = get_layer_transform(&mut editor, layers[1]).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginRotate).await;
editor.move_mouse(200.0, 50.0, ModifierKeys::empty(), MouseKeys::NONE).await;
editor
.handle_message(TransformLayerMessage::PointerMove {
slow_key: Key::Shift,
increments_key: Key::Control,
})
.await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_transform_1 = get_layer_transform(&mut editor, layers[0]).await.unwrap();
let final_transform_2 = get_layer_transform(&mut editor, layers[1]).await.unwrap();
assert!(!final_transform_1.abs_diff_eq(original_transform_1, 1e-5), "Transform should change for first layer in multi-selection");
assert!(
!final_transform_2.abs_diff_eq(original_transform_2, 1e-5),
"Transform should change for second layer in multi-selection"
);

// Test 3: Transform group
editor.handle_message(NodeGraphMessage::SelectedNodesSet { nodes: vec![group_layer.to_node()] }).await;
let original_group_transform = get_layer_transform(&mut editor, group_layer).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginScale).await;
editor.handle_message(TransformLayerMessage::TypeDigit { digit: 2 }).await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_group_transform = get_layer_transform(&mut editor, group_layer).await.unwrap();
assert!(!final_group_transform.abs_diff_eq(original_group_transform, 1e-5), "Transform should change for group");

// Test 4: Transform layers inside transformed group
let child_layer_id = {
let mut document = editor.active_document_mut();
let group_children = document.network_interface.downstream_layers(&group_layer.to_node(), &[]);
if !group_children.is_empty() {
Some(LayerNodeIdentifier::new(group_children[0], &document.network_interface, &[]))
} else {
None
}
};
assert!(child_layer_id.is_some(), "Group should have child layers");
let child_layer_id = child_layer_id.unwrap();
editor
.handle_message(NodeGraphMessage::SelectedNodesSet {
nodes: vec![child_layer_id.to_node()],
})
.await;
let original_child_transform = get_layer_transform(&mut editor, child_layer_id).await.unwrap();
editor.handle_message(TransformLayerMessage::BeginGrab).await;
editor.move_mouse(30.0, 30.0, ModifierKeys::empty(), MouseKeys::NONE).await;
editor
.handle_message(TransformLayerMessage::PointerMove {
slow_key: Key::Shift,
increments_key: Key::Control,
})
.await;
editor.handle_message(TransformLayerMessage::ApplyTransformOperation { final_transform: true }).await;
let final_child_transform = get_layer_transform(&mut editor, child_layer_id).await.unwrap();
assert!(!final_child_transform.abs_diff_eq(original_child_transform, 1e-5), "Child layer inside transformed group should change");
}
}
Loading