X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fgui%2Fmap%2FMapCanvas.java;h=b9958bb42da9ad101380edef8aed1cd7e1d97bfd;hb=c18b6b67527bfba8dcbc493d6b6abd6671cb155a;hp=a469e99d014c4254d3c5529402589baa58ab05df;hpb=38a0c12649e9104d0d40ce93a932b9086011f8c8;p=GpsPrune.git diff --git a/src/tim/prune/gui/map/MapCanvas.java b/src/tim/prune/gui/map/MapCanvas.java index a469e99..b9958bb 100644 --- a/src/tim/prune/gui/map/MapCanvas.java +++ b/src/tim/prune/gui/map/MapCanvas.java @@ -92,7 +92,7 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe WpIconDefinition _waypointIconDefinition = null; /** Constant for click sensitivity when selecting nearest point */ - private static final int CLICK_SENSITIVITY = 10; + private static final int CLICK_SENSITIVITY = 30; /** Constant for pan distance from key presses */ private static final int PAN_DISTANCE = 20; /** Constant for pan distance from autopan */ @@ -353,8 +353,11 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe MapUtils.getXFromLongitude(_lonRange.getMaximum())); _yRange = new DoubleRange(MapUtils.getYFromLatitude(_latRange.getMinimum()), MapUtils.getYFromLatitude(_latRange.getMaximum())); - _mapPosition.zoomToXY(_xRange.getMinimum(), _xRange.getMaximum(), _yRange.getMinimum(), _yRange.getMaximum(), - getWidth(), getHeight()); + _mapPosition.zoomToXY( + _xRange.getMinimum(), _xRange.getMaximum(), + _yRange.getMinimum(), _yRange.getMaximum(), + getWidth(), getHeight(), + _tileManager.getMaxZoomLevel()); } /** @@ -691,8 +694,9 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe final int[] xPixels = new int[numPoints]; final int[] yPixels = new int[numPoints]; - final int pointSeparationForArrowsSqd = 350; + final int pointSeparationForArrowsSqd = 400; final int pointSeparation1dForArrows = (int) (Math.sqrt(pointSeparationForArrowsSqd) * 0.7); + final int hugePointSeparationForArrows = 120; // try to set line width for painting if (inG instanceof Graphics2D) @@ -765,35 +769,38 @@ public class MapCanvas extends JPanel implements MouseListener, MouseMotionListe pointsPainted = true; // Now consider whether we need to draw an arrow as well - if (drawArrows - && !drawnLastArrow - && (Math.abs(prevX-px) > pointSeparation1dForArrows || Math.abs(prevY-py) > pointSeparation1dForArrows)) + if (drawArrows) { - final double pointSeparationSqd = (prevX-px) * (prevX-px) + (prevY-py) * (prevY-py); - if (pointSeparationSqd > pointSeparationForArrowsSqd) + final double pointDist = Math.max(Math.abs(prevX - px), Math.abs(prevY - py)); + final int separationLimit = (drawnLastArrow ? hugePointSeparationForArrows : pointSeparation1dForArrows); + if (pointDist > separationLimit) { - final double midX = (prevX + px) / 2.0; - final double midY = (prevY + py) / 2.0; - final boolean midPointVisible = midX >= 0 && midX < winWidth && midY >= 0 && midY < winHeight; - if (midPointVisible) + final double pointSeparationSqd = (prevX-px) * (prevX-px) + (prevY-py) * (prevY-py); + if (pointSeparationSqd > pointSeparationForArrowsSqd) { - final double alpha = Math.atan2(py - prevY, px - prevX); - //System.out.println("Draw arrow from (" + prevX + "," + prevY + ") to (" + px + "," + py - // + ") with angle" + (int) (alpha * 180/Math.PI)); - final double MID_TO_VERTEX = 3.0; - final double arrowX = MID_TO_VERTEX * Math.cos(alpha); - final double arrowY = MID_TO_VERTEX * Math.sin(alpha); - final double vertexX = midX + arrowX; - final double vertexY = midY + arrowY; - inG.drawLine((int)(midX-arrowX-2*arrowY), (int)(midY-arrowY+2*arrowX), (int)vertexX, (int)vertexY); - inG.drawLine((int)(midX-arrowX+2*arrowY), (int)(midY-arrowY-2*arrowX), (int)vertexX, (int)vertexY); + final double midX = (prevX + px) / 2.0; + final double midY = (prevY + py) / 2.0; + final boolean midPointVisible = midX >= 0 && midX < winWidth && midY >= 0 && midY < winHeight; + if (midPointVisible) + { + final double alpha = Math.atan2(py - prevY, px - prevX); + //System.out.println("Draw arrow from (" + prevX + "," + prevY + ") to (" + px + "," + py + // + ") with angle" + (int) (alpha * 180/Math.PI)); + final double MID_TO_VERTEX = 3.0; + final double arrowX = MID_TO_VERTEX * Math.cos(alpha); + final double arrowY = MID_TO_VERTEX * Math.sin(alpha); + final double vertexX = midX + arrowX; + final double vertexY = midY + arrowY; + inG.drawLine((int)(midX-arrowX-2*arrowY), (int)(midY-arrowY+2*arrowX), (int)vertexX, (int)vertexY); + inG.drawLine((int)(midX-arrowX+2*arrowY), (int)(midY-arrowY-2*arrowX), (int)vertexX, (int)vertexY); + } + drawnLastArrow = midPointVisible; } - drawnLastArrow = midPointVisible; } - } - else - { - drawnLastArrow = false; + else + { + drawnLastArrow = false; + } } } prevX = px; prevY = py;