diff --git a/src/org/openstreetmap/josm/gui/MapScaler.java b/src/org/openstreetmap/josm/gui/MapScaler.java
index a52e163..4ec3b0a 100644
|
a
|
b
|
public class MapScaler extends JComponent implements Helpful, Accessible {
|
| 113 | 113 | */ |
| 114 | 114 | private final double spacingMeter; |
| 115 | 115 | private final int steps; |
| 116 | | private final int majorStepEvery; |
| | 116 | private final int minorStepsPerMajor; |
| 117 | 117 | |
| 118 | 118 | /** |
| 119 | 119 | * Creates a new tick mark helper. |
| … |
… |
public class MapScaler extends JComponent implements Helpful, Accessible {
|
| 126 | 126 | |
| 127 | 127 | double log10 = Math.log(lineDistance) / Math.log(10); |
| 128 | 128 | double spacingLog10 = Math.pow(10, Math.floor(log10)); |
| | 129 | int minorStepsPerMajor; |
| | 130 | double distanceBetweenMinor; |
| 129 | 131 | if (log10 - Math.floor(log10) < .75) { |
| 130 | | spacingMeter = spacingLog10 / 4; |
| 131 | | majorStepEvery = 4; |
| | 132 | // Add 2 ticks for every full unit |
| | 133 | distanceBetweenMinor = spacingLog10 / 2; |
| | 134 | minorStepsPerMajor = 2; |
| 132 | 135 | } else { |
| 133 | | spacingMeter = spacingLog10; |
| 134 | | majorStepEvery = 5; |
| | 136 | // Add 10 ticks for every full unit |
| | 137 | distanceBetweenMinor = spacingLog10; |
| | 138 | minorStepsPerMajor = 5; |
| 135 | 139 | } |
| 136 | | steps = (int) Math.floor(lineDistance / spacingMeter); |
| | 140 | // round down to the last major step. |
| | 141 | int majorSteps = (int) Math.floor(lineDistance / distanceBetweenMinor / minorStepsPerMajor); |
| | 142 | if (majorSteps >= 4) { |
| | 143 | // we have many major steps, do not paint the minor now. |
| | 144 | this.spacingMeter = distanceBetweenMinor * minorStepsPerMajor; |
| | 145 | this.minorStepsPerMajor = 1; |
| | 146 | } else { |
| | 147 | this.minorStepsPerMajor = minorStepsPerMajor; |
| | 148 | this.spacingMeter = distanceBetweenMinor; |
| | 149 | } |
| | 150 | steps = majorSteps * this.minorStepsPerMajor; |
| 137 | 151 | } |
| 138 | 152 | |
| | 153 | /** |
| | 154 | * Paint the ticks to the graphics. |
| | 155 | * @param g The graphics to paint on. |
| | 156 | */ |
| 139 | 157 | public void paintTicks(Graphics g) { |
| 140 | 158 | double spacingPixel = spacingMeter / (dist100Pixel / 100); |
| 141 | 159 | double textBlockedUntil = -1; |
| 142 | 160 | for (int step = 0; step <= steps; step++) { |
| 143 | 161 | int x = (int) (PADDING_LEFT + spacingPixel * step); |
| 144 | | boolean isMajor = step % majorStepEvery == 0; |
| | 162 | boolean isMajor = step % minorStepsPerMajor == 0; |
| 145 | 163 | int paddingY = isMajor ? 0 : 3; |
| 146 | 164 | g.drawLine(x, paddingY, x, 10 - paddingY); |
| 147 | 165 | |
| 148 | | if (isMajor || (step == steps && textBlockedUntil < 0)) { |
| | 166 | if (step == 0 || step == steps) { |
| 149 | 167 | String text; |
| 150 | 168 | if (step == 0) { |
| 151 | 169 | text = "0"; |
| … |
… |
public class MapScaler extends JComponent implements Helpful, Accessible {
|
| 154 | 172 | } |
| 155 | 173 | Rectangle2D bound = g.getFontMetrics().getStringBounds(text, g); |
| 156 | 174 | int left = (int) (x - bound.getWidth() / 2); |
| 157 | | if (textBlockedUntil < left) { |
| 158 | | g.drawString(text, left, 23); |
| 159 | | textBlockedUntil = left + bound.getWidth() + 2; |
| | 175 | if (textBlockedUntil > left) { |
| | 176 | left = (int) (textBlockedUntil + 5); |
| 160 | 177 | } |
| | 178 | g.drawString(text, left, 23); |
| | 179 | textBlockedUntil = left + bound.getWidth() + 2; |
| 161 | 180 | } |
| 162 | 181 | } |
| 163 | 182 | g.drawLine(PADDING_LEFT + 0, 5, (int) (PADDING_LEFT + spacingPixel * steps), 5); |