final int dy = originY - e.getY();
final Rectangle visibleRect = component.getVisibleRect();
final Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1);
final boolean isEventPointVisible = visibleRect.contains(r);
if (isEventPointVisible)
mapView.scrollBy(dx, dy);
else {
mapView.scrollBy(dx/3, dy/3);
originX += dx/3;
originY += dy/3;
}