X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2FDistrictTransformUtil.java;h=ce28aba5428a76efa822a607e28ae6692314d801;hb=refs%2Fchanges%2F67%2F2767%2F1;hp=230c17cd55fedfce2cfd48d7ceaf4bae00e3dfb9;hpb=835710a4f22ec2d91c287295fb176a0af62d1186;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/DistrictTransformUtil.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/DistrictTransformUtil.java index 230c17cd..ce28aba5 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/DistrictTransformUtil.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/DistrictTransformUtil.java @@ -4,6 +4,7 @@ import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import org.simantics.g2d.participant.TransformUtil; +import org.simantics.maps.MapScalingTransform; import org.simantics.scenegraph.utils.GeometryUtils; import org.simantics.utils.page.MarginUtils; import org.simantics.utils.page.MarginUtils.Margins; @@ -49,23 +50,37 @@ public class DistrictTransformUtil extends TransformUtil { double targetX = scale; double toBeX = currentX; if (targetX > 0) { - if (toBeX < targetX) { - while ((toBeX) < targetX) { - toBeX = toBeX * 2; - } - } else { - while ((toBeX * 0.5) > targetX) { - toBeX = toBeX * 0.5; + // let's check that targetX zoomLevel is between 0-20 + AffineTransform tar = new AffineTransform(); + tar.scale(toBeX, toBeX); + int tarZoomLevel = MapScalingTransform.zoomLevel(tar); + if (tarZoomLevel < 20 && tarZoomLevel > 0) { + if (toBeX < targetX) { + while ((toBeX * 0.5) < targetX) { + toBeX = toBeX * 2; + AffineTransform tr = new AffineTransform(); + tr.scale(toBeX, toBeX); + int zoomLevel = MapScalingTransform.zoomLevel(tr); + if (zoomLevel >= 20) { // let's not zoom too close + break; + } + } + } else { + while ((toBeX * 0.25) > targetX) { + toBeX = toBeX * 0.5; + AffineTransform tr = new AffineTransform(); + tr.scale(toBeX, toBeX); + if (MapScalingTransform.zoomLevel(tr) <= 0) { // let's not zoom too far away + break; + } + } } } - //tx = tx * (1 - toBeX); - //ty = ty * (1 - toBeX); AffineTransform at = new AffineTransform(); at.translate(tx, ty); at.translate(controlArea.getMinX(), controlArea.getMinY()); at.scale(toBeX, toBeX); at.translate(-diagramArea.getMinX(), -diagramArea.getMinY()); - setTransform(at); } else { // negative, how, no can do?