@@ -46,6 +46,10 @@ public class OverlayNavigation< V extends OverlayVertex< V, E >, E extends Overl
4646
4747 private NavigationBehaviour < V , E > navigationBehaviour ;
4848
49+ private long lastNavigationTime = 0 ;
50+
51+ private static final int ANIMATION_DURATION = 300 ;
52+
4953 public OverlayNavigation (
5054 final AbstractViewerPanel panel ,
5155 final OverlayGraph < V , E > graph )
@@ -82,6 +86,9 @@ public void setNavigationEtiquette( final NavigationEtiquette navigationEtiquett
8286 @ Override
8387 public void navigateToVertex ( final V vertex )
8488 {
89+ if (shouldThrottle ())
90+ return ; // Throttle navigation requests.
91+
8592 // Always move in T.
8693 final int tp = vertex .getTimepoint ();
8794 panel .state ().setCurrentTimepoint ( tp );
@@ -90,17 +97,20 @@ public void navigateToVertex( final V vertex )
9097 final double [] target = navigationBehaviour .navigateToVertex ( vertex , currentTransform );
9198 if ( target != null )
9299 {
93- final TranslationAnimator animator = new TranslationAnimator ( currentTransform , target , 300 );
94- animator .setTime ( System .currentTimeMillis () );
100+ final TranslationAnimator animator = new TranslationAnimator ( currentTransform , target , ANIMATION_DURATION );
101+ lastNavigationTime = System .currentTimeMillis ();
102+ animator .setTime ( lastNavigationTime );
95103 panel .setTransformAnimator ( animator );
96104 }
97-
98105 panel .requestRepaint ();
99106 }
100107
101108 @ Override
102109 public void navigateToEdge ( final E edge )
103110 {
111+ if ( shouldThrottle () )
112+ return ; // Throttle navigation requests.
113+
104114 // Always move in T.
105115 final V ref = graph .vertexRef ();
106116 final int tp = edge .getTarget ( ref ).getTimepoint ();
@@ -111,14 +121,21 @@ public void navigateToEdge( final E edge )
111121 final double [] target = navigationBehaviour .navigateToEdge ( edge , currentTransform );
112122 if ( target != null )
113123 {
114- final TranslationAnimator animator = new TranslationAnimator ( currentTransform , target , 300 );
115- animator .setTime ( System .currentTimeMillis () );
124+ final TranslationAnimator animator = new TranslationAnimator ( currentTransform , target , ANIMATION_DURATION );
125+ lastNavigationTime = System .currentTimeMillis ();
126+ animator .setTime ( lastNavigationTime );
116127 panel .setTransformAnimator ( animator );
117128 }
118129
119130 panel .requestRepaint ();
120131 }
121132
133+ private boolean shouldThrottle ()
134+ {
135+ final long now = System .currentTimeMillis ();
136+ return ( now - lastNavigationTime < ANIMATION_DURATION );
137+ }
138+
122139 /*
123140 * Navigation behaviours
124141 */
0 commit comments