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=4f4583d1a02dc62421d90507022b0f54d26ed652;hb=1c4f571d010b7439e006e411f3661a50ee6a4400;hp=ce28aba5428a76efa822a607e28ae6692314d801;hpb=41b04fa6331a2de151e7300dcb0ad983045f4ed8;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 ce28aba5..4f4583d1 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 @@ -14,7 +14,7 @@ public class DistrictTransformUtil extends TransformUtil { @Override public void fitArea(Rectangle2D controlArea, Rectangle2D diagramArea, Margins margins) { if (margins == null) { - MarginUtils.Margin margin = MarginUtils.marginOf(40, 0, 0); + MarginUtils.Margin margin = MarginUtils.marginOf(0, 0, 0); margins = new MarginUtils.Margins(margin, margin, margin, margin); } org.simantics.scenegraph.utils.GeometryUtils.expandRectangle(diagramArea, -1); @@ -38,12 +38,10 @@ public class DistrictTransformUtil extends TransformUtil { if (controlAspectRatio>canvasAspectRatio) { scale = controlArea.getHeight() / diagramArea.getHeight(); - tx = ( controlArea.getWidth() - diagramArea.getWidth() * scale ) / 2; } else // Control is really tall => center canvas vertically, match horizontally { scale = controlArea.getWidth() / diagramArea.getWidth(); - ty = ( controlArea.getHeight() - diagramArea.getHeight() * scale ) / 2; } AffineTransform current = getTransform(); double currentX = current.getScaleX(); @@ -52,30 +50,27 @@ public class DistrictTransformUtil extends TransformUtil { if (targetX > 0) { // let's check that targetX zoomLevel is between 0-20 AffineTransform tar = new AffineTransform(); - tar.scale(toBeX, toBeX); + tar.scale(targetX, targetX); 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; - } - } - } + toBeX = Math.pow(2.0, tarZoomLevel); + } else if (tarZoomLevel > 20) { + toBeX = Math.pow(2.0, 20); + } else if (tarZoomLevel < 0) { + toBeX = 2; + } else { + toBeX = targetX; } + + if (controlAspectRatio>canvasAspectRatio) { + tx = ( controlArea.getWidth() - diagramArea.getWidth() * toBeX ) / 2; + ty = diagramArea.getHeight() * (targetX - toBeX) / 2; + } + else { + ty = ( controlArea.getHeight() - diagramArea.getHeight() * toBeX ) / 2; + tx = diagramArea.getWidth() * (targetX - toBeX) / 2; + } + AffineTransform at = new AffineTransform(); at.translate(tx, ty); at.translate(controlArea.getMinX(), controlArea.getMinY());