From 4c198cbd9a568548838ef0412e1735449c0b22d8 Mon Sep 17 00:00:00 2001 From: Mario-S Date: Sun, 10 Nov 2013 21:25:47 +0100 Subject: [PATCH] zoom coordinate calculation based on previous zoom --- .../labs/map/CoordinatesConverter.java | 1 + src/main/java/jfxtras/labs/map/MapPane.java | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/jfxtras/labs/map/CoordinatesConverter.java b/src/main/java/jfxtras/labs/map/CoordinatesConverter.java index 90ffcb98c..3be284a79 100644 --- a/src/main/java/jfxtras/labs/map/CoordinatesConverter.java +++ b/src/main/java/jfxtras/labs/map/CoordinatesConverter.java @@ -50,6 +50,7 @@ private static int getZoom(Zoomable zoomable){ return zoomable.zoomProperty().get(); } + @Deprecated public static Coordinate toCoordinate(Point mapPoint, Moveable controller) { Dimension dim = new Dimension(controller.getMapWidth(), controller.getMapHeight()); Point center = controller.getCenter(); diff --git a/src/main/java/jfxtras/labs/map/MapPane.java b/src/main/java/jfxtras/labs/map/MapPane.java index adae2a971..37a76406b 100644 --- a/src/main/java/jfxtras/labs/map/MapPane.java +++ b/src/main/java/jfxtras/labs/map/MapPane.java @@ -433,6 +433,11 @@ private boolean isEdgeVisible() { private Coordinate getCoordinate(Point p) { return toCoordinate(p, this); } + + private Coordinate getCoordinate(Point p, int zoom) { + Dimension dim = new Dimension(getMapWidth(), getMapHeight()); + return toCoordinate(p, center, dim, zoom); + } public void setMapMarkerVisible(boolean mapMarkersVisible) { this.mapMarkersVisible.set(mapMarkersVisible); @@ -644,13 +649,17 @@ private class ZoomCoordinateCache{ private Coordinate zoomCoordinate; Coordinate getZoomCoordinate(){ -// if (zoomCoordinate == null) { + if (zoomCoordinate == null) { Point p = createMapCenterPoint(); zoomCoordinate = getCoordinate(p); -// } + } return zoomCoordinate; } + void setZoomCoordinate(Coordinate coordinate){ + this.zoomCoordinate = coordinate; + } + void clear() { zoomCoordinate = null; } @@ -662,7 +671,11 @@ private class ZoomChangeListener implements ChangeListener{ @Override public void changed(ObservableValue ov, Number oldVal, Number newVal) { - updateZoom(newVal.intValue()); + if(oldVal != null){ + Coordinate c = getCoordinate(createMapCenterPoint(), oldVal.intValue()); + zoomCoordinateCache.setZoomCoordinate(c); + updateZoom(newVal.intValue()); + } } }