@@ -911,6 +911,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
911
911
}
912
912
913
913
responses. add ( NodeGraphMessage :: RunDocumentGraph ) ;
914
+ responses. add ( Message :: StartBuffer ) ;
914
915
responses. add ( PortfolioMessage :: CenterPastedLayers { layers } ) ;
915
916
}
916
917
}
@@ -921,11 +922,8 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
921
922
let viewport_center = viewport_bounds. center ( ) ;
922
923
let transform = document. metadata ( ) . document_to_viewport ;
923
924
924
- let viewport_points = Quad :: from_box_at_zero ( ipp. viewport_bounds . size ( ) ) . 0 ;
925
-
926
- let inv_transform = transform. inverse ( ) ;
927
- let doc_viewport_points = viewport_points. map ( |p| inv_transform. transform_point2 ( p) ) ;
928
- let viewport_in_doc_space = Quad ( doc_viewport_points) ;
925
+ let viewport_in_doc_space = transform. inverse ( ) * viewport_bounds;
926
+ let viewport_center_in_doc_space = transform. inverse ( ) . transform_point2 ( viewport_center) ;
929
927
930
928
let mut positions = Vec :: new ( ) ;
931
929
@@ -963,21 +961,24 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
963
961
964
962
if !positions. is_empty ( ) {
965
963
let mean_pos = positions. iter ( ) . fold ( glam:: DVec2 :: ZERO , |acc, ( _, pos, _) | acc + * pos) / positions. len ( ) as f64 ;
964
+ let doc_space_translation = viewport_center_in_doc_space - mean_pos;
966
965
967
966
for ( layer, pos, is_artboard) in positions {
968
- let offset_from_center = pos - mean_pos;
969
- let new_pos = viewport_center + transform. transform_vector2 ( offset_from_center) ;
970
-
971
967
if is_artboard {
972
968
if let Some ( bounds) = document. metadata ( ) . bounding_box_document ( layer) {
973
969
let dimensions = ( bounds[ 1 ] - bounds[ 0 ] ) . round ( ) . as_ivec2 ( ) ;
970
+ let new_artboard_pos = pos + doc_space_translation - bounds[ 1 ] . midpoint ( bounds[ 0 ] ) ;
971
+
974
972
responses. add ( GraphOperationMessage :: ResizeArtboard {
975
973
layer,
976
- location : new_pos . round ( ) . as_ivec2 ( ) ,
974
+ location : new_artboard_pos . round ( ) . as_ivec2 ( ) ,
977
975
dimensions,
978
976
} ) ;
979
977
}
980
978
} else {
979
+ let offset_from_center = pos - mean_pos;
980
+ let new_pos = viewport_center + transform. transform_vector2 ( offset_from_center) ;
981
+
981
982
let mut new_transform = transform;
982
983
new_transform. translation = new_pos;
983
984
responses. add ( GraphOperationMessage :: TransformSet {
0 commit comments