* Bug #5040 fixed - fit diagram to view did not work with a single block. 27/10927/2
Clément DAVID [Thu, 21 Mar 2013 12:45:24 +0000 (13:45 +0100)]
Change-Id: I81d2f3c00fe0f50aa689e95cb60751d0014967fd

scilab/CHANGES_5.4.X
scilab/modules/graph/src/java/org/scilab/modules/graph/ScilabComponent.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/utils/XcosMessages.java

index f722b6d..466e914 100644 (file)
@@ -120,6 +120,8 @@ Xcos
 
 * Avoid some scopes blink on simulation.
 
+* Bug #5040 fixed - fit diagram to view did not work with a single block.
+
 * Bug #9074 fixed - Calling a function on the context gave a warning.
 
 * Bug #10040 fixed - VARIABLE_DELAY documentation does not fully describe the
index a05f01b..868e842 100644 (file)
@@ -16,7 +16,8 @@ import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.GraphicsEnvironment;
-import java.awt.Rectangle;
+
+import javax.swing.JScrollBar;
 
 import com.mxgraph.model.mxICell;
 import com.mxgraph.model.mxIGraphModel;
@@ -71,58 +72,57 @@ public class ScilabComponent extends mxGraphComponent {
 
     /**
      * Zoom the whole graph and center the view on it.
-     */
-    public void zoomAndCenterToCells() {
-
-    }
-
-    /**
-     * Zoom the whole graph and center the view on it.
      *
      * @param cells
      *            the cells to center on
      */
     public void zoomAndCenterToCells(final Object[] cells) {
-        final mxGraphView view = graph.getView();
-
-        final Rectangle preference;
-        final Object[] c;
-        if (cells == null || cells.length == 0) {
-            c = graph.getChildCells(graph.getDefaultParent());
-        } else {
-            c = cells;
-        }
-        preference = getChildrenBounds(c).getRectangle();
-
-        Dimension actual = getViewport().getSize();
+        final mxRectangle preference = zoomBounds(cells);
+        final Dimension actual = getViewport().getSize();
 
-        double newScale;
-        double heightScale = actual.getHeight() / preference.getHeight();
-        double widthScale = actual.getWidth() / preference.getWidth();
+        final double newScale;
+        final double heightScale = actual.getHeight() / preference.getHeight();
+        final double widthScale = actual.getWidth() / preference.getWidth();
 
         if (heightScale > 1.0) {
             if (widthScale > 1.0) {
                 // We need to zoom in (the max applicable zoom is the lowest)
-                newScale = Math.min(heightScale, widthScale) * (1.0 - (SCALE_MULTIPLIER - 1.0));
+                newScale = Math.min(heightScale, widthScale);
             } else {
                 // we need to zoom out (only widthScale is < 1.0)
-                newScale = widthScale * SCALE_MULTIPLIER;
+                newScale = widthScale;
             }
         } else {
             if (widthScale > 1.0) {
                 // we need to zoom out (only heightScale is < 1.0)
-                newScale = heightScale * SCALE_MULTIPLIER;
+                newScale = heightScale;
             } else {
                 // We need to zoom out (the max applicable zoom is the lowest)
-                newScale = Math.min(heightScale, widthScale) * SCALE_MULTIPLIER;
+                newScale = Math.min(heightScale, widthScale);
             }
         }
 
-        zoom(newScale);
+        // do not apply small zoom values
+        if (Math.abs(1.0 - newScale) < 0.2) {
+            getGraphControl().scrollRectToVisible(zoomBounds(cells).getRectangle(), true);
+            return;
+        }
+
+        zoom(newScale / SCALE_MULTIPLIER);
+        getGraphControl().scrollRectToVisible(zoomBounds(cells).getRectangle(), true);
+    }
+
+    private final mxRectangle zoomBounds(final Object[] cells) {
+        final mxRectangle preference;
+        final Object[] c;
+        if (cells == null || cells.length == 0) {
+            c = graph.getChildCells(graph.getDefaultParent());
+        } else {
+            c = cells;
+        }
+        preference = getChildrenBounds(c);
 
-        view.revalidate();
-        Rectangle orig = getChildrenBounds(graph.getChildCells(graph.getDefaultParent())).getRectangle();
-        getGraphControl().scrollRectToVisible(orig);
+        return preference;
     }
 
     /**
index 364ce3b..b1fb828 100644 (file)
@@ -72,7 +72,7 @@ public final class XcosMessages {
 
     /* View Menu */
     public static final String VIEW = Messages.gettext("View");
-    public static final String FIT_DIAGRAM_TO_VIEW = Messages.gettext("Fit diagram to view");
+    public static final String FIT_DIAGRAM_TO_VIEW = Messages.gettext("Fit diagram or blocks to view");
     public static final String NORMAL_100 = Messages.gettext("Normal 100%");
     public static final String PALETTE_BROWSER = Messages.gettext("Palette browser");
     public static final String DIAGRAM_BROWSER = Messages.gettext("Diagram browser");