@@ -703,7 +703,10 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
703
703
#[ cfg( test) ]
704
704
mod test_transform_layer {
705
705
use crate :: messages:: {
706
- portfolio:: document:: graph_operation:: { transform_utils, utility_types:: ModifyInputsContext } ,
706
+ portfolio:: document:: graph_operation:: {
707
+ transform_utils,
708
+ utility_types:: { ModifyInputsContext , TransformIn } ,
709
+ } ,
707
710
prelude:: Message ,
708
711
tool:: transform_layer:: transform_layer_message_handler:: VectorModificationType ,
709
712
} ;
@@ -1097,4 +1100,43 @@ mod test_transform_layer {
1097
1100
let final_transform = get_layer_transform ( & mut editor, layer) . await ;
1098
1101
assert ! ( final_transform. is_some( ) , "Transform node should exist after grab operation" ) ;
1099
1102
}
1103
+ #[ tokio:: test]
1104
+ async fn test_scale_to_zero_then_rescale ( ) {
1105
+ let mut editor = EditorTestUtils :: create ( ) ;
1106
+ editor. new_document ( ) . await ;
1107
+ editor. drag_tool ( ToolType :: Rectangle , 0. , 0. , 100. , 100. , ModifierKeys :: empty ( ) ) . await ;
1108
+ let document = editor. active_document ( ) ;
1109
+ let layer = document. metadata ( ) . all_layers ( ) . next ( ) . unwrap ( ) ;
1110
+
1111
+ // First scale to near-zero
1112
+ editor. handle_message ( TransformLayerMessage :: BeginScale ) . await ;
1113
+ editor. handle_message ( TransformLayerMessage :: TypeDigit { digit : 0 } ) . await ;
1114
+ editor. handle_message ( TransformLayerMessage :: TypeDecimalPoint ) . await ;
1115
+ editor. handle_message ( TransformLayerMessage :: TypeDigit { digit : 0 } ) . await ;
1116
+ editor. handle_message ( TransformLayerMessage :: TypeDigit { digit : 0 } ) . await ;
1117
+ editor. handle_message ( TransformLayerMessage :: TypeDigit { digit : 0 } ) . await ;
1118
+ editor. handle_message ( TransformLayerMessage :: TypeDigit { digit : 1 } ) . await ;
1119
+ editor. handle_message ( TransformLayerMessage :: ApplyTransformOperation { final_transform : true } ) . await ;
1120
+
1121
+ let near_zero_transform = get_layer_transform ( & mut editor, layer) . await . unwrap ( ) ;
1122
+ // Verify scale is near zero.
1123
+ let scale_x = near_zero_transform. matrix2 . x_axis . length ( ) ;
1124
+ let scale_y = near_zero_transform. matrix2 . y_axis . length ( ) ;
1125
+ assert ! ( scale_x < 0.001 , "Scale factor X should be near zero, got: {}" , scale_x) ;
1126
+ assert ! ( scale_y < 0.001 , "Scale factor Y should be near zero, got: {}" , scale_y) ;
1127
+ assert ! ( scale_x > 0.0 , "Scale factor X should not be exactly zero" ) ;
1128
+ assert ! ( scale_y > 0.0 , "Scale factor Y should not be exactly zero" ) ;
1129
+
1130
+ editor. handle_message ( TransformLayerMessage :: BeginScale ) . await ;
1131
+ editor. handle_message ( TransformLayerMessage :: TypeDigit { digit : 2 } ) . await ;
1132
+ editor. handle_message ( TransformLayerMessage :: ApplyTransformOperation { final_transform : true } ) . await ;
1133
+
1134
+ let final_transform = get_layer_transform ( & mut editor, layer) . await . unwrap ( ) ;
1135
+ assert ! ( final_transform. is_finite( ) , "Transform should be finite after rescaling" ) ;
1136
+
1137
+ let new_scale_x = final_transform. matrix2 . x_axis . length ( ) ;
1138
+ let new_scale_y = final_transform. matrix2 . y_axis . length ( ) ;
1139
+ assert ! ( new_scale_x > 0.0 , "After rescaling, scale factor X should be non-zero" ) ;
1140
+ assert ! ( new_scale_y > 0.0 , "After rescaling, scale factor Y should be non-zero" ) ;
1141
+ }
1100
1142
}
0 commit comments