@@ -142,6 +142,12 @@ enum LineToolFsmState {
142
142
Drawing ,
143
143
}
144
144
145
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
146
+ enum LineEnd {
147
+ Start ,
148
+ End ,
149
+ }
150
+
145
151
#[ derive( Clone , Debug , Default ) ]
146
152
struct LineToolData {
147
153
drag_start : DVec2 ,
@@ -152,8 +158,7 @@ struct LineToolData {
152
158
editing_layer : Option < LayerNodeIdentifier > ,
153
159
snap_manager : SnapManager ,
154
160
auto_panning : AutoPanning ,
155
- // True means dragging end point, false means dragging start point
156
- dragging_end : Option < bool > ,
161
+ dragging_endpoint : Option < LineEnd > ,
157
162
}
158
163
159
164
impl Fsm for LineToolFsmState {
@@ -214,7 +219,7 @@ impl Fsm for LineToolFsmState {
214
219
let end_click = ( drag_start. y - end. y ) . abs ( ) < threshold_y && ( drag_start. x - end. x ) . abs ( ) < threshold_x;
215
220
216
221
if start_click || end_click {
217
- tool_data. dragging_end = Some ( end_click) ;
222
+ tool_data. dragging_endpoint = Some ( if end_click { LineEnd :: End } else { LineEnd :: Start } ) ;
218
223
tool_data. drag_start = if end_click { * document_start } else { * document_end } ;
219
224
tool_data. editing_layer = Some ( * layer) ;
220
225
return LineToolFsmState :: Drawing ;
@@ -249,9 +254,7 @@ impl Fsm for LineToolFsmState {
249
254
LineToolFsmState :: Drawing
250
255
}
251
256
( LineToolFsmState :: Drawing , LineToolMessage :: PointerMove { center, snap_angle, lock_angle } ) => {
252
- let Some ( layer) = tool_data. editing_layer else {
253
- return LineToolFsmState :: Ready ;
254
- } ;
257
+ let Some ( layer) = tool_data. editing_layer else { return LineToolFsmState :: Ready } ;
255
258
256
259
tool_data. drag_current = document. metadata ( ) . transform_to_viewport ( layer) . inverse ( ) . transform_point2 ( input. mouse . position ) ;
257
260
@@ -260,10 +263,8 @@ impl Fsm for LineToolFsmState {
260
263
let snap_data = SnapData :: ignore ( document, input, & ignore) ;
261
264
let mut document_points = generate_line ( tool_data, snap_data, keyboard. key ( lock_angle) , keyboard. key ( snap_angle) , keyboard. key ( center) ) ;
262
265
263
- if let Some ( dragging_end) = tool_data. dragging_end {
264
- if !dragging_end {
265
- document_points. swap ( 0 , 1 ) ;
266
- }
266
+ if tool_data. dragging_endpoint == Some ( LineEnd :: Start ) {
267
+ document_points. swap ( 0 , 1 ) ;
267
268
}
268
269
269
270
let Some ( node_id) = graph_modification_utils:: get_line_id ( layer, & document. network_interface ) else {
@@ -287,7 +288,7 @@ impl Fsm for LineToolFsmState {
287
288
] ;
288
289
tool_data. auto_panning . setup_by_mouse_position ( input, & messages, responses) ;
289
290
290
- self
291
+ LineToolFsmState :: Drawing
291
292
}
292
293
( _, LineToolMessage :: PointerMove { .. } ) => {
293
294
tool_data. snap_manager . preview_draw ( & SnapData :: new ( document, input) , input. mouse . position ) ;
@@ -298,7 +299,7 @@ impl Fsm for LineToolFsmState {
298
299
// Auto-panning
299
300
let _ = tool_data. auto_panning . shift_viewport ( input, responses) ;
300
301
301
- self
302
+ LineToolFsmState :: Drawing
302
303
}
303
304
( state, LineToolMessage :: PointerOutsideViewport { center, lock_angle, snap_angle } ) => {
304
305
// Auto-panning
@@ -319,7 +320,7 @@ impl Fsm for LineToolFsmState {
319
320
( LineToolFsmState :: Drawing , LineToolMessage :: Abort ) => {
320
321
tool_data. snap_manager . cleanup ( responses) ;
321
322
tool_data. editing_layer . take ( ) ;
322
- if tool_data. dragging_end . is_none ( ) {
323
+ if tool_data. dragging_endpoint . is_none ( ) {
323
324
responses. add ( DocumentMessage :: AbortTransaction ) ;
324
325
}
325
326
LineToolFsmState :: Ready
0 commit comments