Ticket #19360: zoom-taking-screen-scaling-into-account.patch

File zoom-taking-screen-scaling-into-account.patch, 3.5 KB (added by johsin18, 6 years ago)

More elegant patch, taking screen scaling into account directly, not the approximate approach via zoom offset.

  • src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java b/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
    index c807633f6..fed5acbc2 100644
    a b implements ImageObserver, TileLoaderListener, ZoomChangeListener, FilterChangeLi  
    171171     * Offset between calculated zoom level and zoom level used to download and show tiles. Negative values will result in
    172172     * lower resolution of imagery useful in "retina" displays, positive values will result in higher resolution
    173173     */
    174     public static final IntegerProperty ZOOM_OFFSET = new IntegerProperty(PREFERENCE_PREFIX + ".zoom_offset",
    175             PlatformManager.getPlatform().isHighDpiDisplay() ? 2 : 0);
     174    public static final IntegerProperty ZOOM_OFFSET = new IntegerProperty(PREFERENCE_PREFIX + ".zoom_offset", 0);
    176175
    177176    /*
    178177     *  use MemoryTileCache instead of tileLoader JCS cache, as tileLoader caches only content (byte[] of image)
  • src/org/openstreetmap/josm/gui/layer/imagery/TileCoordinateConverter.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/imagery/TileCoordinateConverter.java b/src/org/openstreetmap/josm/gui/layer/imagery/TileCoordinateConverter.java
    index 0303dd6e6..7e355edc0 100644
    a b package org.openstreetmap.josm.gui.layer.imagery;  
    44import java.awt.Polygon;
    55import java.awt.Rectangle;
    66import java.awt.Shape;
     7import java.awt.geom.AffineTransform;
    78import java.awt.geom.Point2D;
    89import java.awt.geom.Rectangle2D;
    910import java.util.Objects;
    public class TileCoordinateConverter {  
    182183            t1 = tileSource.projectedToTileXY(CoordinateConversion.enToProj(topLeftEN), zoom);
    183184            t2 = tileSource.projectedToTileXY(CoordinateConversion.enToProj(botRightEN), zoom);
    184185        }
    185         int screenPixels = mapView.getWidth()*mapView.getHeight();
     186        AffineTransform transform = mapView.getGraphicsConfiguration().getDefaultTransform();
     187        int screenPixels = (int) (mapView.getWidth()*mapView.getHeight()*transform.getScaleX()*transform.getScaleY());
    186188        double tilePixels = Math.abs((t2.getY()-t1.getY())*(t2.getX()-t1.getX())*tileSource.getTileSize()*tileSource.getTileSize());
    187189        if (screenPixels == 0 || tilePixels == 0) return 1;
    188190        return screenPixels/tilePixels;
  • src/org/openstreetmap/josm/tools/PlatformHook.java

    diff --git a/src/org/openstreetmap/josm/tools/PlatformHook.java b/src/org/openstreetmap/josm/tools/PlatformHook.java
    index abd99e213..19cffad3a 100644
    a b public interface PlatformHook {  
    136136                GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().isFullScreenSupported();
    137137    }
    138138
    139     /**
    140      * Determines if the default screen is a high-dpi device such as a mac Retina display.
    141      * @return {@code true} if the default screen is a high-dpi device such as a mac Retina display
    142      * @since 15918
    143      */
    144     default boolean isHighDpiDisplay() {
    145         // https://stackoverflow.com/a/49770313
    146         return !GraphicsEnvironment.isHeadless() &&
    147                 !GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration()
    148                 .getDefaultTransform().isIdentity();
    149     }
    150 
    151139    /**
    152140     * Renames a file.
    153141     * @param from Source file