package com.opendoorlogistics.codefromweb.jxmapviewer2.fork.swingx.input;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputAdapter;
import com.opendoorlogistics.codefromweb.jxmapviewer2.fork.swingx.JXMapViewer;
/**
* Used to pan using press and drag mouse gestures
* @author joshy
*/
public class PanMouseInputListener extends MouseInputAdapter
{
private Point prev;
private JXMapViewer viewer;
/**
* @param viewer the jxmapviewer
*/
public PanMouseInputListener(JXMapViewer viewer)
{
this.viewer = viewer;
}
@Override
public void mousePressed(MouseEvent evt)
{
prev = evt.getPoint();
}
@Override
public void mouseDragged(MouseEvent evt)
{
if (!SwingUtilities.isLeftMouseButton(evt))
return;
Point current = evt.getPoint();
double x = viewer.getCenter().getX() - (current.x - prev.x);
double y = viewer.getCenter().getY() - (current.y - prev.y);
if (!viewer.isNegativeYAllowed())
{
if (y < 0)
{
y = 0;
}
}
int maxHeight = (int) (viewer.getTileFactory().getMapSize(viewer.getZoom()).getHeight() * viewer
.getTileFactory().getTileSize(viewer.getZoom()));
if (y > maxHeight)
{
y = maxHeight;
}
prev = current;
viewer.setCenter(new Point2D.Double(x, y));
viewer.repaint();
viewer.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
}
@Override
public void mouseReleased(MouseEvent evt)
{
if (!SwingUtilities.isLeftMouseButton(evt))
return;
prev = null;
viewer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mouseEntered(MouseEvent e)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
viewer.requestFocusInWindow();
}
});
}
}