X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.gis%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fgeotools%2Fswing%2FVersatileZoomTool.java;h=796cb4f83b905317a9c12229c1cd5cc691ac8a38;hb=002f3c6efa017209f60565d0beb6b0feb65d2c20;hp=862e0a82d020a963ba7e836b7daf9c95f3b02f8c;hpb=01b96d9c2db7b5ba4c83cfe99f3f4a4312611cc2;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.gis/src/main/java/org/argeo/slc/geotools/swing/VersatileZoomTool.java b/runtime/org.argeo.slc.support.gis/src/main/java/org/argeo/slc/geotools/swing/VersatileZoomTool.java index 862e0a82d..796cb4f83 100644 --- a/runtime/org.argeo.slc.support.gis/src/main/java/org/argeo/slc/geotools/swing/VersatileZoomTool.java +++ b/runtime/org.argeo.slc.support.gis/src/main/java/org/argeo/slc/geotools/swing/VersatileZoomTool.java @@ -37,6 +37,8 @@ public class VersatileZoomTool extends AbstractZoomTool { private boolean computingZoomBox; private boolean panning; + private Point2D fieldPosition; + /** * Constructor */ @@ -69,19 +71,32 @@ public class VersatileZoomTool extends AbstractZoomTool { */ @Override public void onMouseClicked(MapMouseEvent e) { - centerMapToEvent(e); + if (SwingUtilities.isLeftMouseButton(e)) + centerMapToEvent(e, getZoom()); + else if (SwingUtilities.isRightMouseButton(e)) + centerMapToEvent(e, 1 / getZoom()); + else if (SwingUtilities.isMiddleMouseButton(e)) { + if (fieldPosition != null) { + Envelope2D env = new Envelope2D(); + final double increment = 1d; + env.setFrameFromDiagonal(fieldPosition.getX() - increment, + fieldPosition.getY() - increment, fieldPosition.getX() + + increment, fieldPosition.getY() + increment); + getMapPane().setDisplayArea(env); + } + } } - protected void centerMapToEvent(MapMouseEvent e) { + protected void centerMapToEvent(MapMouseEvent e, Double zoomArg) { Rectangle paneArea = getMapPane().getVisibleRect(); DirectPosition2D mapPos = e.getMapPosition(); double scale = getMapPane().getWorldToScreenTransform().getScaleX(); - // double newScale = scale * zoom; - // + double newScale = scale * zoomArg; + DirectPosition2D corner = new DirectPosition2D(mapPos.getX() - 0.5d - * paneArea.getWidth() / scale, mapPos.getY() + 0.5d - * paneArea.getHeight() / scale); + * paneArea.getWidth() / newScale, mapPos.getY() + 0.5d + * paneArea.getHeight() / newScale); Envelope2D newMapArea = new Envelope2D(); newMapArea.setFrameFromCenter(mapPos, corner); @@ -100,7 +115,8 @@ public class VersatileZoomTool extends AbstractZoomTool { if (SwingUtilities.isLeftMouseButton(ev)) { startDragPos = new DirectPosition2D(); startDragPos.setLocation(ev.getMapPosition()); - } else if (SwingUtilities.isMiddleMouseButton(ev)) { + } else if (SwingUtilities.isMiddleMouseButton(ev) + || SwingUtilities.isRightMouseButton(ev)) { panePos = ev.getPoint(); panning = true; } @@ -195,6 +211,10 @@ public class VersatileZoomTool extends AbstractZoomTool { }); } + public void setFieldPosition(Point2D fieldPosition) { + this.fieldPosition = fieldPosition; + } + /** * Custom drag box (hacked from JMapPane) so that we can change the behavior * depending on whether we pan or zoom.