@@ -358,6 +358,7 @@ struct PenToolData {
358
358
359
359
handle_mode : HandleMode ,
360
360
prior_segment_layer : Option < LayerNodeIdentifier > ,
361
+ current_layer : Option < LayerNodeIdentifier > ,
361
362
prior_segment_endpoint : Option < PointId > ,
362
363
prior_segment : Option < SegmentId > ,
363
364
handle_type : TargetHandle ,
@@ -607,9 +608,7 @@ impl PenToolData {
607
608
608
609
// Get close path
609
610
let mut end = None ;
610
- let selected_nodes = document. network_interface . selected_nodes ( ) ;
611
- let mut selected_layers = selected_nodes. selected_layers ( document. metadata ( ) ) ;
612
- let layer = selected_layers. next ( ) . filter ( |_| selected_layers. next ( ) . is_none ( ) ) ?;
611
+ let layer = self . current_layer ?;
613
612
let vector_data = document. network_interface . compute_modified_vector ( layer) ?;
614
613
let start = self . latest_point ( ) ?. id ;
615
614
let transform = document. metadata ( ) . document_to_viewport * transform;
@@ -1030,9 +1029,7 @@ impl PenToolData {
1030
1029
let relative = if self . path_closed { None } else { self . latest_point ( ) . map ( |point| point. pos ) } ;
1031
1030
self . next_point = self . compute_snapped_angle ( snap_data, transform, false , mouse, relative, true ) ;
1032
1031
1033
- let selected_nodes = document. network_interface . selected_nodes ( ) ;
1034
- let mut selected_layers = selected_nodes. selected_layers ( document. metadata ( ) ) ;
1035
- let layer = selected_layers. next ( ) . filter ( |_| selected_layers. next ( ) . is_none ( ) ) ?;
1032
+ let layer = self . current_layer ?;
1036
1033
let vector_data = document. network_interface . compute_modified_vector ( layer) ?;
1037
1034
let transform = document. metadata ( ) . document_to_viewport * transform;
1038
1035
for point in vector_data. extendable_points ( preferences. vector_meshes ) {
@@ -1141,6 +1138,7 @@ impl PenToolData {
1141
1138
let tolerance = crate :: consts:: SNAP_POINT_TOLERANCE ;
1142
1139
let extension_choice = should_extend ( document, viewport, tolerance, selected_nodes. selected_layers ( document. metadata ( ) ) , preferences) ;
1143
1140
if let Some ( ( layer, point, position) ) = extension_choice {
1141
+ self . current_layer = Some ( layer) ;
1144
1142
self . extend_existing_path ( document, layer, point, position, responses) ;
1145
1143
return ;
1146
1144
}
@@ -1180,6 +1178,7 @@ impl PenToolData {
1180
1178
1181
1179
let parent = document. new_layer_bounding_artboard ( input) ;
1182
1180
let layer = graph_modification_utils:: new_custom ( NodeId :: new ( ) , nodes, parent, responses) ;
1181
+ self . current_layer = Some ( layer) ;
1183
1182
tool_options. fill . apply_fill ( layer, responses) ;
1184
1183
tool_options. stroke . apply_stroke ( tool_options. line_weight , layer, responses) ;
1185
1184
self . prior_segment = None ;
@@ -1236,8 +1235,6 @@ impl PenToolData {
1236
1235
handle_start,
1237
1236
} ) ;
1238
1237
1239
- responses. add ( NodeGraphMessage :: SelectedNodesSet { nodes : vec ! [ layer. to_node( ) ] } ) ;
1240
-
1241
1238
self . next_point = position;
1242
1239
self . next_handle_start = handle_start;
1243
1240
let vector_data = document. network_interface . compute_modified_vector ( layer) . unwrap ( ) ;
@@ -1367,9 +1364,7 @@ impl Fsm for PenToolFsmState {
1367
1364
..
1368
1365
} = tool_action_data;
1369
1366
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 ( ) ) ;
1367
+ let layer = tool_data. current_layer ;
1373
1368
let mut transform = layer. map ( |layer| document. metadata ( ) . transform_to_document ( layer) ) . unwrap_or_default ( ) ;
1374
1369
1375
1370
if !transform. inverse ( ) . is_finite ( ) {
@@ -1671,9 +1666,7 @@ impl Fsm for PenToolFsmState {
1671
1666
. descendants ( document. metadata ( ) )
1672
1667
. filter ( |layer| !document. network_interface . is_artboard ( & layer. to_node ( ) , & [ ] ) ) ;
1673
1668
if let Some ( ( other_layer, _, _) ) = should_extend ( document, viewport, crate :: consts:: SNAP_POINT_TOLERANCE , layers, preferences) {
1674
- let selected_nodes = document. network_interface . selected_nodes ( ) ;
1675
- let mut selected_layers = selected_nodes. selected_layers ( document. metadata ( ) ) ;
1676
- if let Some ( current_layer) = selected_layers. next ( ) . filter ( |current_layer| selected_layers. next ( ) . is_none ( ) && * current_layer != other_layer) {
1669
+ if let Some ( current_layer) = tool_data. current_layer . filter ( |layer| * layer != other_layer) {
1677
1670
merge_layers ( document, current_layer, other_layer, responses) ;
1678
1671
}
1679
1672
}
@@ -1946,7 +1939,6 @@ impl Fsm for PenToolFsmState {
1946
1939
responses. add ( DocumentMessage :: EndTransaction ) ;
1947
1940
}
1948
1941
}
1949
-
1950
1942
tool_data. cleanup ( responses) ;
1951
1943
tool_data. cleanup_target_selections ( shape_editor, layer, document, responses) ;
1952
1944
@@ -1955,6 +1947,17 @@ impl Fsm for PenToolFsmState {
1955
1947
PenToolFsmState :: Ready
1956
1948
}
1957
1949
( 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
+ }
1958
1961
responses. add ( DocumentMessage :: EndTransaction ) ;
1959
1962
tool_data. cleanup ( responses) ;
1960
1963
tool_data. cleanup_target_selections ( shape_editor, layer, document, responses) ;
@@ -1975,8 +1978,7 @@ impl Fsm for PenToolFsmState {
1975
1978
}
1976
1979
}
1977
1980
( _, PenToolMessage :: Abort ) => {
1978
- let should_delete_layer = if layer. is_some ( ) {
1979
- let vector_data = document. network_interface . compute_modified_vector ( layer. unwrap ( ) ) . unwrap ( ) ;
1981
+ let should_delete_layer = if let Some ( vector_data) = layer. and_then ( |layer| document. network_interface . compute_modified_vector ( layer) ) {
1980
1982
vector_data. point_domain . ids ( ) . len ( ) == 1
1981
1983
} else {
1982
1984
false
0 commit comments