@@ -1861,9 +1861,11 @@ public void fitToScreen() {
1861
1861
final int margin = 50 ;
1862
1862
1863
1863
// Loop until it converges
1864
+ Double prevZoom = null ;
1864
1865
while (true ) {
1865
1866
Iterable <PetriNetObject > petriNetObjects = currentTemplate ().guiModel ().getPetriNetObjects ();
1866
1867
if (!petriNetObjects .iterator ().hasNext ()) {
1868
+ alreadyFitToScreen = true ;
1867
1869
return ;
1868
1870
}
1869
1871
@@ -1947,12 +1949,13 @@ public void fitToScreen() {
1947
1949
double xZoomFactor = (double ) viewport .getWidth () / width ;
1948
1950
double yZoomFactor = (double ) viewport .getHeight () / height ;
1949
1951
double zoomFactor = Math .min (xZoomFactor , yZoomFactor );
1950
- double zoomPercent = Math . min ( xZoomFactor , yZoomFactor ) * 100 ;
1952
+ double zoomPercent = zoomFactor * 100 ;
1951
1953
1952
1954
double currentZoomPercent = drawingSurface ().getZoomController ().getPercent ();
1953
1955
1954
1956
final double zoomConvergence = 1 ;
1955
- if (Math .abs (currentZoomPercent - zoomPercent ) < zoomConvergence ) {
1957
+ final double current = Math .abs (currentZoomPercent - zoomPercent );
1958
+ if (current < zoomConvergence || (prevZoom != null && current == prevZoom )) {
1956
1959
int x = (int ) (smallestX * zoomFactor ) - margin ;
1957
1960
int y = (int ) (smallestY * zoomFactor ) - margin ;
1958
1961
@@ -1964,6 +1967,8 @@ public void fitToScreen() {
1964
1967
return ;
1965
1968
}
1966
1969
1970
+ prevZoom = current ;
1971
+
1967
1972
app .ifPresent (e -> e .updateZoomSlider ((int )zoomPercent ));
1968
1973
}
1969
1974
}
0 commit comments