]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/DistrictTransformUtil.java
Allow starting/ending of manual network creation to vertices only
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / DistrictTransformUtil.java
index ce28aba5428a76efa822a607e28ae6692314d801..4f4583d1a02dc62421d90507022b0f54d26ed652 100644 (file)
@@ -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());