@@ -863,20 +863,6 @@ impl ShapeState {
863863 self . selected_shape_state . get ( & layer) . map ( |state| & state. selected_segments )
864864 }
865865
866- pub fn move_primary ( & self , segment : SegmentId , delta : DVec2 , layer : LayerNodeIdentifier , responses : & mut VecDeque < Message > ) {
867- responses. add ( GraphOperationMessage :: Vector {
868- layer,
869- modification_type : VectorModificationType :: ApplyPrimaryDelta { segment, delta } ,
870- } ) ;
871- }
872-
873- pub fn move_end ( & self , segment : SegmentId , delta : DVec2 , layer : LayerNodeIdentifier , responses : & mut VecDeque < Message > ) {
874- responses. add ( GraphOperationMessage :: Vector {
875- layer,
876- modification_type : VectorModificationType :: ApplyEndDelta { segment, delta } ,
877- } ) ;
878- }
879-
880866 pub fn move_anchor ( & self , point : PointId , vector : & VectorGeometry , delta : DVec2 , layer : LayerNodeIdentifier , selected : Option < & SelectedLayerState > , responses : & mut VecDeque < Message > ) {
881867 // Move anchor
882868 responses. add ( GraphOperationMessage :: Vector {
@@ -894,7 +880,10 @@ impl ShapeState {
894880 }
895881
896882 let relative_position = handle - point_to_dvec2 ( path_segment. start ( ) ) + delta;
897- let modification_type = VectorModificationType :: SetPrimaryHandle { segment, relative_position } ;
883+ let modification_type = VectorModificationType :: SetHandlePosition {
884+ handle : HandleId :: primary ( segment) ,
885+ relative_position,
886+ } ;
898887
899888 responses. add ( GraphOperationMessage :: Vector { layer, modification_type } ) ;
900889 }
@@ -919,24 +908,20 @@ impl ShapeState {
919908 let transform = network_interface. document_metadata ( ) . transform_to_document_if_feeds ( layer, network_interface) . inverse ( ) ;
920909 let position = transform. transform_point2 ( new_position) ;
921910 let current_position = vector. position_of ( * point) ?;
922- let delta = position - current_position;
923911
924912 match * point {
925- ManipulatorPointId :: Anchor ( point) => self . move_anchor ( point, & vector, delta, layer, None , responses) ,
926- ManipulatorPointId :: PrimaryHandle ( segment) => {
927- self . move_primary ( segment, delta, layer, responses) ;
928- if let Some ( handle) = point. as_handle ( )
929- && let Some ( handles) = vector. colinear_pair_containing ( handle)
930- {
931- let modification_type = VectorModificationType :: SetG1Continuous { handles, enabled : false } ;
932- responses. add ( GraphOperationMessage :: Vector { layer, modification_type } ) ;
933- }
934- }
935- ManipulatorPointId :: EndHandle ( segment) => {
936- self . move_end ( segment, delta, layer, responses) ;
937- if let Some ( handle) = point. as_handle ( )
938- && let Some ( handles) = vector. colinear_pair_containing ( handle)
939- {
913+ ManipulatorPointId :: Anchor ( anchor) => self . move_anchor ( anchor, & vector, position - current_position, layer, None , responses) ,
914+ ManipulatorPointId :: PrimaryHandle ( _) | ManipulatorPointId :: EndHandle ( _) => {
915+ let handle = point. as_handle ( ) ?;
916+
917+ // Set by its offset from the anchor, since a delta has no stored offset to add onto until the Path node edits this handle
918+ let relative_position = position - vector. anchor_position_of ( * point) ?;
919+ responses. add ( GraphOperationMessage :: Vector {
920+ layer,
921+ modification_type : handle. set_relative_position ( relative_position) ,
922+ } ) ;
923+
924+ if let Some ( handles) = vector. colinear_pair_containing ( handle) {
940925 let modification_type = VectorModificationType :: SetG1Continuous { handles, enabled : false } ;
941926 responses. add ( GraphOperationMessage :: Vector { layer, modification_type } ) ;
942927 }
@@ -1587,11 +1572,7 @@ impl ShapeState {
15871572 responses. add ( GraphOperationMessage :: Vector { layer, modification_type } ) ;
15881573
15891574 // Update segment
1590- let HandleId { ty, segment } = handle;
1591- let modification_type = match ty {
1592- graphene_std:: vector:: misc:: HandleType :: Primary => VectorModificationType :: SetStartPoint { segment, id } ,
1593- graphene_std:: vector:: misc:: HandleType :: End => VectorModificationType :: SetEndPoint { segment, id } ,
1594- } ;
1575+ let modification_type = VectorModificationType :: SetEndpoint { handle, id } ;
15951576
15961577 responses. add ( GraphOperationMessage :: Vector { layer, modification_type } ) ;
15971578 }
0 commit comments