This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 408d5ece1ef652b23dec9726b21816466dc8dc5d Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Mon Apr 20 10:33:20 2015 +0200 fix zoom NPE --- .../ui/content/open/impl/seine/TripMapHandler.java | 75 +++++++++++++++++----- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripMapHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripMapHandler.java index ca8a3f8..b879b57 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripMapHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/open/impl/seine/TripMapHandler.java @@ -42,9 +42,12 @@ import org.geotools.styling.StyledLayer; import org.geotools.styling.StyledLayerDescriptor; import org.geotools.styling.UserLayer; import org.geotools.swing.JMapPane; +import org.geotools.swing.event.MapPaneEvent; +import org.geotools.swing.event.MapPaneListener; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; +import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; @@ -77,6 +80,8 @@ public class TripMapHandler { protected ReferencedEnvelope tripArea; protected List<TripMapPoint> tripMapPoints; + protected boolean rendererRunning; + public TripMapHandler(JMapPane tripMapUI, ObserveConfig config) { this.tripMapUI = tripMapUI; this.config = config; @@ -87,6 +92,8 @@ public class TripMapHandler { tripMapUI.addMouseWheelListener(mouseMapListener); tripMapUI.addMouseMotionListener(mouseMapListener); tripMapUI.addMouseListener(mouseMapListener); + tripMapUI.addMapPaneListener(new TripMapListener()); + rendererRunning = false; } @@ -325,21 +332,20 @@ public class TripMapHandler { } + protected double zoomRatio = 1; + protected Point zoomCenter; - private class MouseMapListener implements MouseWheelListener, MouseListener, MouseMotionListener { - - @Override - public void mouseWheelMoved(MouseWheelEvent e) { - int notches = e.getWheelRotation(); - + protected void zoomApply() { + if (zoomRatio != 1 && ! rendererRunning) { ReferencedEnvelope displayArea = tripMapUI.getDisplayArea(); - double deltaWidth = displayArea.getWidth() * notches * ZOOM_STEP_RATIO * -1; - double deltaHeight = displayArea.getHeight() * notches * ZOOM_STEP_RATIO * -1; - double ratioLeft = e.getX() * 1d / tripMapUI.getWidth(); + double deltaWidth = displayArea.getWidth() * (zoomRatio -1); + double deltaHeight = displayArea.getHeight() * (zoomRatio - 1); + + double ratioLeft = zoomCenter.getX() * 1d / tripMapUI.getWidth(); // l'axe de Y est inversé entre le référentiel du composant swing et le référentiel géographique - double ratioTop = 1 - (e.getY() * 1d / tripMapUI.getHeight()); + double ratioTop = 1 - (zoomCenter.getY() * 1d / tripMapUI.getHeight()); double deltaLeft = deltaWidth * ratioLeft; double deltaRight = deltaLeft - deltaWidth; @@ -348,8 +354,8 @@ public class TripMapHandler { double deltaBottom = deltaTop - deltaHeight; if (log.isDebugEnabled()) { - log.debug(String.format("Map mouse zoom (rotation : %s, deltaLeft : %s, deltaRight : %s, deltaTop : %s, deltaBottom : %s)", - notches, deltaLeft, deltaRight, deltaRight, deltaBottom)); + log.debug(String.format("Map mouse zoom (zoom ratio : %s, deltaLeft : %s, deltaRight : %s, deltaTop : %s, deltaBottom : %s)", + zoomRatio, deltaLeft, deltaRight, deltaRight, deltaBottom)); } ReferencedEnvelope newDisplayArea = new ReferencedEnvelope( @@ -360,9 +366,27 @@ public class TripMapHandler { displayArea.getCoordinateReferenceSystem() ); - if (! newDisplayArea.isEmpty()) { - tripMapUI.setDisplayArea(newDisplayArea); - } + tripMapUI.setDisplayArea(newDisplayArea); + + zoomRatio = 1; + + + } + + + } + + + + + private class MouseMapListener implements MouseWheelListener, MouseListener, MouseMotionListener { + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + int notches = e.getWheelRotation(); + zoomRatio = zoomRatio * (1 + (ZOOM_STEP_RATIO * notches * -1)); + zoomCenter = e.getPoint(); + zoomApply(); } @Override @@ -427,6 +451,27 @@ public class TripMapHandler { } } + protected class TripMapListener implements MapPaneListener { + @Override + public void onNewMapContent(MapPaneEvent ev) { + } + + @Override + public void onDisplayAreaChanged(MapPaneEvent ev) { + } + + @Override + public void onRenderingStarted(MapPaneEvent ev) { + rendererRunning = true; + } + + @Override + public void onRenderingStopped(MapPaneEvent ev) { + rendererRunning = false; + zoomApply(); + } + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.