Changeset 10504 in josm


Ignore:
Timestamp:
2016-06-30T20:43:22+02:00 (3 years ago)
Author:
Don-vip
Message:

fix #12919 - scale indicator regression (patch by michael2402)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/MapScaler.java

    r10079 r10504  
    114114        private final double spacingMeter;
    115115        private final int steps;
    116         private final int majorStepEvery;
     116        private final int minorStepsPerMajor;
    117117
    118118        /**
     
    127127            double log10 = Math.log(lineDistance) / Math.log(10);
    128128            double spacingLog10 = Math.pow(10, Math.floor(log10));
     129            int minorStepsPerMajor;
     130            double distanceBetweenMinor;
    129131            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;
    132135            } else {
    133                 spacingMeter = spacingLog10;
    134                 majorStepEvery = 5;
     136                // Add 10 ticks for every full unit
     137                distanceBetweenMinor = spacingLog10;
     138                minorStepsPerMajor = 5;
    135139            }
    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;
    137151        }
    138152
     153        /**
     154         * Paint the ticks to the graphics.
     155         * @param g The graphics to paint on.
     156         */
    139157        public void paintTicks(Graphics g) {
    140158            double spacingPixel = spacingMeter / (dist100Pixel / 100);
     
    142160            for (int step = 0; step <= steps; step++) {
    143161                int x = (int) (PADDING_LEFT + spacingPixel * step);
    144                 boolean isMajor = step % majorStepEvery == 0;
     162                boolean isMajor = step % minorStepsPerMajor == 0;
    145163                int paddingY = isMajor ? 0 : 3;
    146164                g.drawLine(x, paddingY, x, 10 - paddingY);
    147165
    148                 if (isMajor || (step == steps && textBlockedUntil < 0)) {
     166                if (step == 0 || step == steps) {
    149167                    String text;
    150168                    if (step == 0) {
     
    155173                    Rectangle2D bound = g.getFontMetrics().getStringBounds(text, g);
    156174                    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);
    160177                    }
     178                    g.drawString(text, left, 23);
     179                    textBlockedUntil = left + bound.getWidth() + 2;
    161180                }
    162181            }
Note: See TracChangeset for help on using the changeset viewer.