@@ -4,7 +4,7 @@ use crate::messages::portfolio::document::overlays::utility_types::OverlayContex
44use crate :: messages:: portfolio:: document:: utility_types:: document_metadata:: LayerNodeIdentifier ;
55use crate :: messages:: tool:: common_functionality:: auto_panning:: AutoPanning ;
66use crate :: messages:: tool:: common_functionality:: graph_modification_utils:: { NodeGraphLayer , get_gradient} ;
7- use crate :: messages:: tool:: common_functionality:: snapping:: SnapManager ;
7+ use crate :: messages:: tool:: common_functionality:: snapping:: { SnapCandidatePoint , SnapData , SnapManager , SnapTypeConfiguration } ;
88use graphene_std:: vector:: style:: { Fill , Gradient , GradientType } ;
99
1010#[ derive( Default , ExtractField ) ]
@@ -352,6 +352,9 @@ impl Fsm for GradientToolFsmState {
352352 }
353353 }
354354
355+ let snap_data = SnapData :: new ( document, input, viewport) ;
356+ tool_data. snap_manager . draw_overlays ( snap_data, & mut overlay_context) ;
357+
355358 self
356359 }
357360 ( GradientToolFsmState :: Ready { .. } , GradientToolMessage :: SelectionChanged ) => {
@@ -564,7 +567,15 @@ impl Fsm for GradientToolFsmState {
564567 }
565568 ( GradientToolFsmState :: Drawing , GradientToolMessage :: PointerMove { constrain_axis } ) => {
566569 if let Some ( selected_gradient) = & mut tool_data. selected_gradient {
567- let mouse = input. mouse . position ; // tool_data.snap_manager.snap_position(responses, document, input.mouse.position);
570+ let mut mouse = input. mouse . position ;
571+ let snap_data = SnapData :: new ( document, input, viewport) ;
572+ let point = SnapCandidatePoint :: gradient_handle ( document. metadata ( ) . document_to_viewport . inverse ( ) . transform_point2 ( mouse) ) ;
573+ let snapped = tool_data. snap_manager . free_snap ( & snap_data, & point, SnapTypeConfiguration :: default ( ) ) ;
574+ if snapped. is_snapped ( ) {
575+ mouse = document. metadata ( ) . document_to_viewport . transform_point2 ( snapped. snapped_point_document ) ;
576+ }
577+ tool_data. snap_manager . update_indicator ( snapped) ;
578+
568579 selected_gradient. update_gradient (
569580 mouse,
570581 responses,
@@ -635,6 +646,9 @@ impl Fsm for GradientToolFsmState {
635646 }
636647 }
637648
649+ let snap_data = SnapData :: new ( document, input, viewport) ;
650+ tool_data. snap_manager . gradient_preview_draw ( & snap_data, mouse) ;
651+
638652 responses. add ( OverlaysMessage :: Draw ) ;
639653 GradientToolFsmState :: Ready { hover_insertion }
640654 }
0 commit comments