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=e71acf0a8ff0e22c2a753ac653b97c3d3e6ca959;hb=d0545b1d11197b928b21513dc0cc792185040342;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..e71acf0a 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; @@ -13,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); @@ -37,35 +38,41 @@ 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(); 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(targetX, targetX); + int tarZoomLevel = MapScalingTransform.zoomLevel(tar); + if (tarZoomLevel < 20 && tarZoomLevel > 0) { + toBeX = Math.pow(2.0, tarZoomLevel); } - //tx = tx * (1 - toBeX); - //ty = ty * (1 - toBeX); + 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()); at.scale(toBeX, toBeX); at.translate(-diagramArea.getMinX(), -diagramArea.getMinY()); - setTransform(at); } else { // negative, how, no can do?