@@ -608,7 +608,9 @@ impl PenToolData {
608608
609609 // Get close path
610610 let mut end = None ;
611- let layer = self . current_layer ?;
611+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
612+ let mut selected_layers = selected_nodes. selected_layers ( document. metadata ( ) ) ;
613+ let layer = selected_layers. next ( ) . filter ( |_| selected_layers. next ( ) . is_none ( ) ) . or ( self . current_layer ) ?;
612614 let vector_data = document. network_interface . compute_modified_vector ( layer) ?;
613615 let start = self . latest_point ( ) ?. id ;
614616 let transform = document. metadata ( ) . document_to_viewport * transform;
@@ -1029,7 +1031,9 @@ impl PenToolData {
10291031 let relative = if self . path_closed { None } else { self . latest_point ( ) . map ( |point| point. pos ) } ;
10301032 self . next_point = self . compute_snapped_angle ( snap_data, transform, false , mouse, relative, true ) ;
10311033
1032- let layer = self . current_layer ?;
1034+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
1035+ let mut selected_layers = selected_nodes. selected_layers ( document. metadata ( ) ) ;
1036+ let layer = selected_layers. next ( ) . filter ( |_| selected_layers. next ( ) . is_none ( ) ) . or ( self . current_layer ) ?;
10331037 let vector_data = document. network_interface . compute_modified_vector ( layer) ?;
10341038 let transform = document. metadata ( ) . document_to_viewport * transform;
10351039 for point in vector_data. extendable_points ( preferences. vector_meshes ) {
@@ -1363,8 +1367,10 @@ impl Fsm for PenToolFsmState {
13631367 preferences,
13641368 ..
13651369 } = tool_action_data;
1370+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
1371+ let mut selected_layers = selected_nodes. selected_layers ( document. metadata ( ) ) ;
1372+ let layer = selected_layers. next ( ) . filter ( |_| selected_layers. next ( ) . is_none ( ) ) . or ( tool_data. current_layer ) ;
13661373
1367- let layer = tool_data. current_layer ;
13681374 let mut transform = layer. map ( |layer| document. metadata ( ) . transform_to_document ( layer) ) . unwrap_or_default ( ) ;
13691375
13701376 if !transform. inverse ( ) . is_finite ( ) {
@@ -1666,7 +1672,13 @@ impl Fsm for PenToolFsmState {
16661672 . descendants ( document. metadata ( ) )
16671673 . filter ( |layer| !document. network_interface . is_artboard ( & layer. to_node ( ) , & [ ] ) ) ;
16681674 if let Some ( ( other_layer, _, _) ) = should_extend ( document, viewport, crate :: consts:: SNAP_POINT_TOLERANCE , layers, preferences) {
1669- if let Some ( current_layer) = tool_data. current_layer . filter ( |layer| * layer != other_layer) {
1675+ let selected_nodes = document. network_interface . selected_nodes ( ) ;
1676+ let mut selected_layers = selected_nodes. selected_layers ( document. metadata ( ) ) ;
1677+ if let Some ( current_layer) = selected_layers
1678+ . next ( )
1679+ . filter ( |current_layer| selected_layers. next ( ) . is_none ( ) && * current_layer != other_layer)
1680+ . or ( tool_data. current_layer . filter ( |layer| * layer != other_layer) )
1681+ {
16701682 merge_layers ( document, current_layer, other_layer, responses) ;
16711683 }
16721684 }
@@ -1947,26 +1959,15 @@ impl Fsm for PenToolFsmState {
19471959 PenToolFsmState :: Ready
19481960 }
19491961 ( PenToolFsmState :: PlacingAnchor , PenToolMessage :: Confirm ) => {
1950- if let Some ( ( vector_data, layer) ) = layer. and_then ( |layer| document. network_interface . compute_modified_vector ( layer) ) . zip ( layer) {
1951- let single_point_in_layer = vector_data. point_domain . ids ( ) . len ( ) == 1 ;
1952-
1953- if single_point_in_layer {
1954- responses. add ( NodeGraphMessage :: DeleteNodes {
1955- node_ids : vec ! [ layer. to_node( ) ] ,
1956- delete_children : true ,
1957- } ) ;
1958- responses. add ( NodeGraphMessage :: RunDocumentGraph ) ;
1959- }
1960- }
19611962 responses. add ( DocumentMessage :: EndTransaction ) ;
19621963 tool_data. cleanup ( responses) ;
19631964 tool_data. cleanup_target_selections ( shape_editor, layer, document, responses) ;
19641965
19651966 PenToolFsmState :: Ready
19661967 }
19671968 ( PenToolFsmState :: DraggingHandle ( ..) , PenToolMessage :: Abort ) => {
1969+ responses. add ( DocumentMessage :: AbortTransaction ) ;
19681970 if tool_data. handle_end . is_none ( ) {
1969- responses. add ( DocumentMessage :: AbortTransaction ) ;
19701971 tool_data. cleanup ( responses) ;
19711972 tool_data. cleanup_target_selections ( shape_editor, layer, document, responses) ;
19721973
@@ -1977,7 +1978,7 @@ impl Fsm for PenToolFsmState {
19771978 . unwrap_or ( PenToolFsmState :: Ready )
19781979 }
19791980 }
1980- ( _ , PenToolMessage :: Abort ) => {
1981+ ( PenToolFsmState :: PlacingAnchor , PenToolMessage :: Abort ) => {
19811982 let should_delete_layer = if let Some ( vector_data) = layer. and_then ( |layer| document. network_interface . compute_modified_vector ( layer) ) {
19821983 vector_data. point_domain . ids ( ) . len ( ) == 1
19831984 } else {
@@ -1999,6 +2000,7 @@ impl Fsm for PenToolFsmState {
19992000
20002001 PenToolFsmState :: Ready
20012002 }
2003+ ( _, PenToolMessage :: Abort ) => PenToolFsmState :: Ready ,
20022004 ( PenToolFsmState :: DraggingHandle ( ..) | PenToolFsmState :: PlacingAnchor , PenToolMessage :: Undo ) => {
20032005 if tool_data. point_index > 0 {
20042006 tool_data. point_index -= 1 ;
0 commit comments