private boolean computingZoomBox;
private boolean panning;
+ private Point2D fieldPosition;
+
/**
* Constructor
*/
*/
@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);
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;
}
});
}
+ 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.