Skip to content
Snippets Groups Projects
Commit 5afe1734 authored by Tobias Pietzsch's avatar Tobias Pietzsch
Browse files

Bugfix: correctly handle interval requests that have no overlap with screen

parent 5662fe26
No related branches found
No related tags found
No related merge requests found
...@@ -328,6 +328,10 @@ public class MultiResolutionRenderer ...@@ -328,6 +328,10 @@ public class MultiResolutionRenderer
*/ */
public synchronized void requestRepaint( final Interval interval ) public synchronized void requestRepaint( final Interval interval )
{ {
// if interval doesn't overlap the screen, do nothing
if ( Intervals.isEmpty( screenScales.clipToScreen( interval ) ) )
return;
if ( !intervalMode && !renderingMayBeCancelled ) if ( !intervalMode && !renderingMayBeCancelled )
{ {
/* /*
......
...@@ -129,6 +129,25 @@ class ScreenScales ...@@ -129,6 +129,25 @@ class ScreenScales
return screenScales.size() - 1; return screenScales.size() - 1;
} }
/**
* Compute the intersection of {@code interval} and the screen area.
*
* @param interval
* a 2D interval in screen coordinates
*
* @return intersection of {@code interval} and the screen area
*/
public Interval clipToScreen( final Interval interval )
{
// This is equivalent to
// Intervals.intersect( interval, new FinalInterval( screenW, screenH ) );
return Intervals.createMinMax(
Math.max( 0, interval.min( 0 ) ),
Math.max( 0, interval.min( 1 ) ),
Math.min( screenW - 1, interval.max( 0 ) ),
Math.min( screenH - 1, interval.max( 1 ) ) );
}
public void requestInterval( final Interval screenInterval ) public void requestInterval( final Interval screenInterval )
{ {
screenScales.forEach( s -> s.requestInterval( screenInterval ) ); screenScales.forEach( s -> s.requestInterval( screenInterval ) );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment