@@ -608,7 +608,9 @@ impl PenToolData {
608
608
609
609
// Get close path
610
610
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 ) ?;
612
614
let vector_data = document. network_interface . compute_modified_vector ( layer) ?;
613
615
let start = self . latest_point ( ) ?. id ;
614
616
let transform = document. metadata ( ) . document_to_viewport * transform;
@@ -1029,7 +1031,9 @@ impl PenToolData {
1029
1031
let relative = if self . path_closed { None } else { self . latest_point ( ) . map ( |point| point. pos ) } ;
1030
1032
self . next_point = self . compute_snapped_angle ( snap_data, transform, false , mouse, relative, true ) ;
1031
1033
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 ) ?;
1033
1037
let vector_data = document. network_interface . compute_modified_vector ( layer) ?;
1034
1038
let transform = document. metadata ( ) . document_to_viewport * transform;
1035
1039
for point in vector_data. extendable_points ( preferences. vector_meshes ) {
@@ -1363,8 +1367,10 @@ impl Fsm for PenToolFsmState {
1363
1367
preferences,
1364
1368
..
1365
1369
} = 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 ) ;
1366
1373
1367
- let layer = tool_data. current_layer ;
1368
1374
let mut transform = layer. map ( |layer| document. metadata ( ) . transform_to_document ( layer) ) . unwrap_or_default ( ) ;
1369
1375
1370
1376
if !transform. inverse ( ) . is_finite ( ) {
@@ -1666,7 +1672,13 @@ impl Fsm for PenToolFsmState {
1666
1672
. descendants ( document. metadata ( ) )
1667
1673
. filter ( |layer| !document. network_interface . is_artboard ( & layer. to_node ( ) , & [ ] ) ) ;
1668
1674
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
+ {
1670
1682
merge_layers ( document, current_layer, other_layer, responses) ;
1671
1683
}
1672
1684
}
@@ -1947,26 +1959,15 @@ impl Fsm for PenToolFsmState {
1947
1959
PenToolFsmState :: Ready
1948
1960
}
1949
1961
( 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
- }
1961
1962
responses. add ( DocumentMessage :: EndTransaction ) ;
1962
1963
tool_data. cleanup ( responses) ;
1963
1964
tool_data. cleanup_target_selections ( shape_editor, layer, document, responses) ;
1964
1965
1965
1966
PenToolFsmState :: Ready
1966
1967
}
1967
1968
( PenToolFsmState :: DraggingHandle ( ..) , PenToolMessage :: Abort ) => {
1969
+ responses. add ( DocumentMessage :: AbortTransaction ) ;
1968
1970
if tool_data. handle_end . is_none ( ) {
1969
- responses. add ( DocumentMessage :: AbortTransaction ) ;
1970
1971
tool_data. cleanup ( responses) ;
1971
1972
tool_data. cleanup_target_selections ( shape_editor, layer, document, responses) ;
1972
1973
@@ -1977,7 +1978,7 @@ impl Fsm for PenToolFsmState {
1977
1978
. unwrap_or ( PenToolFsmState :: Ready )
1978
1979
}
1979
1980
}
1980
- ( _ , PenToolMessage :: Abort ) => {
1981
+ ( PenToolFsmState :: PlacingAnchor , PenToolMessage :: Abort ) => {
1981
1982
let should_delete_layer = if let Some ( vector_data) = layer. and_then ( |layer| document. network_interface . compute_modified_vector ( layer) ) {
1982
1983
vector_data. point_domain . ids ( ) . len ( ) == 1
1983
1984
} else {
@@ -1999,6 +2000,7 @@ impl Fsm for PenToolFsmState {
1999
2000
2000
2001
PenToolFsmState :: Ready
2001
2002
}
2003
+ ( _, PenToolMessage :: Abort ) => PenToolFsmState :: Ready ,
2002
2004
( PenToolFsmState :: DraggingHandle ( ..) | PenToolFsmState :: PlacingAnchor , PenToolMessage :: Undo ) => {
2003
2005
if tool_data. point_index > 0 {
2004
2006
tool_data. point_index -= 1 ;
0 commit comments