@@ -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+ // Prevent too frequent navigation requests.
90+ if (shouldThrottle ())
91+ return ; // Throttle navigation requests.
8592 // Always move in T.
8693 final int tp = vertex .getTimepoint ();
8794 panel .state ().setCurrentTimepoint ( tp );
@@ -90,17 +97,21 @@ 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+ animator .setTime ( lastNavigationTime );
95102 panel .setTransformAnimator ( animator );
96103 }
97-
98104 panel .requestRepaint ();
99105 }
100106
101107 @ Override
102108 public void navigateToEdge ( final E edge )
103109 {
110+ // Prevent too frequent navigation requests.
111+ final long now = System .currentTimeMillis ();
112+ if ( now - lastNavigationTime < ANIMATION_DURATION )
113+ return ; // too frequent navigation requests. ignore.
114+
104115 // Always move in T.
105116 final V ref = graph .vertexRef ();
106117 final int tp = edge .getTarget ( ref ).getTimepoint ();
@@ -111,8 +122,8 @@ public void navigateToEdge( final E edge )
111122 final double [] target = navigationBehaviour .navigateToEdge ( edge , currentTransform );
112123 if ( target != null )
113124 {
114- final TranslationAnimator animator = new TranslationAnimator ( currentTransform , target , 300 );
115- animator .setTime ( System . currentTimeMillis () );
125+ final TranslationAnimator animator = new TranslationAnimator ( currentTransform , target , ANIMATION_DURATION );
126+ animator .setTime ( lastNavigationTime );
116127 panel .setTransformAnimator ( animator );
117128 }
118129
0 commit comments