diff --git a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java index 70a57b3e..b624e00a 100644 --- a/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/diylc/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -352,5 +352,10 @@ public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor, IKeyP * * @param xAxisFirst */ - void renumberSelectedComponents(boolean xAxisFirst); + void renumberSelectedComponents(boolean xAxisFirst); + + /** + * @return size of extra space around the canvas + */ + double getExtraSpace(); } diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 322e313e..776a45e8 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -2503,4 +2503,20 @@ public class Presenter implements IPlugInPort { ConfigurationManager.getInstance().writeValue(BLOCKS_KEY, blocks); } } + + @Override + public double getExtraSpace() { + if (!ConfigurationManager.getInstance().readBoolean(EXTRA_SPACE_KEY, true)) + return 0; + + double extraSpace = drawingManager.getExtraSpace(currentProject); + boolean metric = ConfigurationManager.getInstance().readBoolean(Presenter.METRIC_KEY, true); + + extraSpace /= Constants.PIXELS_PER_INCH; + + if (metric) + extraSpace *= SizeUnit.in.getFactor() / SizeUnit.cm.getFactor(); + + return extraSpace; + } } diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar index 1d90f3d0..0f3769b4 100644 Binary files a/diylc/diylc-swing/lib/swing-framework.jar and b/diylc/diylc-swing/lib/swing-framework.jar differ diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index b94c88c8..80647dac 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -34,6 +34,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; +import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.ArrayList; import java.util.EnumSet; @@ -175,6 +176,9 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { (canvasPanel.getHeight() - visibleRect.height) / 2); canvasPanel.scrollRectToVisible(visibleRect); canvasPanel.revalidate(); + + double extraSpace = CanvasPlugin.this.plugInPort.getExtraSpace(); + getScrollPane().setZeroLocation(new Point2D.Double(extraSpace, extraSpace)); } }); } @@ -292,8 +296,11 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { plugInPort.setMetric(isMetric); } }); + + double extraSpace = plugInPort.getExtraSpace(); + scrollPane.setZeroLocation(new Point2D.Double(extraSpace, extraSpace)); - // disable scrolling + // disable built-in scrolling mechanism, we'll do it manually scrollPane.setWheelScrollingEnabled(false); scrollPane.addMouseWheelListener(new MouseWheelListener() { @@ -679,6 +686,9 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { canvasPanel.scrollRectToVisible(visibleRect); canvasPanel.revalidate(); + + double extraSpace = CanvasPlugin.this.plugInPort.getExtraSpace(); + getScrollPane().setZeroLocation(new Point2D.Double(extraSpace, extraSpace)); zoomLevel = (Double) params[0]; break;