package com.opendoorlogistics.codefromweb.jxmapviewer2.fork.swingx.input; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.geom.Point2D; import com.opendoorlogistics.codefromweb.jxmapviewer2.fork.swingx.JXMapViewer; /** * zooms to the current mouse cursor * using the mouse wheel * @author Martin Steiger */ public class ZoomMouseWheelListenerCursor implements MouseWheelListener { private JXMapViewer viewer; /** * @param viewer the jxmapviewer */ public ZoomMouseWheelListenerCursor(JXMapViewer viewer) { this.viewer = viewer; } @Override public void mouseWheelMoved(MouseWheelEvent evt) { Point current = evt.getPoint(); Rectangle bound = viewer.getViewportBounds(); double dx = current.x - bound.width / 2; double dy = current.y - bound.height / 2; Dimension oldMapSize = viewer.getTileFactory().getMapSize(viewer.getZoom()); viewer.setZoom(viewer.getZoom() + evt.getWheelRotation()); Dimension mapSize = viewer.getTileFactory().getMapSize(viewer.getZoom()); Point2D center = viewer.getCenter(); double dzw = (mapSize.getWidth() / oldMapSize.getWidth()); double dzh = (mapSize.getHeight() / oldMapSize.getHeight()); double x = center.getX() + dx * (dzw - 1); double y = center.getY() + dy * (dzh - 1); viewer.setCenter(new Point2D.Double(x, y)); } }