Ignore:
Timestamp:
2010-08-26T19:47:34+02:00 (14 years ago)
Author:
jttt
Message:

Fix #5378 Ghost images appear when wmsplugin.url.overlap=true

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java

    r22779 r22794  
    5353 */
    5454public class WMSLayer extends Layer implements PreferenceChangedListener {
     55
    5556        protected static final Icon icon =
    5657                new ImageIcon(Toolkit.getDefaultToolkit().createImage(WMSPlugin.class.getResource("/images/wms_small.png")));
     
    6768        protected int minZoom = 3;
    6869
    69         protected boolean deltaChanged;
    7070        protected double dx = 0.0;
    7171        protected double dy = 0.0;
     
    7777        protected final int serializeFormatVersion = 5;
    7878        protected boolean autoDownloadEnabled = true;
     79        protected boolean settingsChanged;
    7980
    8081        // Image index boundary for current view
     
    8687        private volatile int bottomEdge;
    8788
    88 
     89        // Request queue
    8990        private final List<WMSRequest> requestQueue = new ArrayList<WMSRequest>();
    9091        private final List<WMSRequest> finishedRequests = new ArrayList<WMSRequest>();
     
    202203
    203204        @Override public void paint(Graphics2D g, final MapView mv, Bounds b) {
    204                 deltaChanged = false;
    205205                if(baseURL == null) return;
    206206                if (usesInvalidUrl && !isInvalidUrlConfirmed) return;
     207
     208                settingsChanged = false;
    207209
    208210                ProjectionBounds bounds = mv.getProjectionBounds();
     
    261263
    262264        public void displace(double dx, double dy) {
    263                 deltaChanged = true;
     265                settingsChanged = true;
    264266                this.dx += dx;
    265267                this.dy += dy;
     
    280282        public int getImageY(int imageIndex) {
    281283                return (int)(imageIndex * imageSize * (getPPD() / pixelPerDegree) + dy * getPPD());
     284        }
     285
     286        public int getImageWidth(int xIndex) {
     287                int overlap = (int)(WMSPlugin.PROP_OVERLAP.get()?WMSPlugin.PROP_OVERLAP_EAST.get() * imageSize * getPPD() / pixelPerDegree / 100:0);
     288                return getImageX(xIndex + 1) - getImageX(xIndex) + overlap;
     289        }
     290
     291        public int getImageHeight(int yIndex) {
     292                int overlap = (int)(WMSPlugin.PROP_OVERLAP.get()?WMSPlugin.PROP_OVERLAP_NORTH.get() * imageSize * getPPD() / pixelPerDegree / 100:0);
     293                return getImageY(yIndex + 1) - getImageY(yIndex) + overlap;
    282294        }
    283295
     
    514526                        resolution = mv.getDist100PixelText();
    515527                        pixelPerDegree = getPPD();
     528                        settingsChanged = true;
    516529                        mv.repaint();
    517530                }
     
    627640                                ois.close();
    628641                                fis.close();
     642                                settingsChanged = true;
    629643                                mv.repaint();
    630644                        }
     
    743757                requestQueueLock.lock();
    744758                try {
    745                         return !finishedRequests.isEmpty() || deltaChanged;
     759                        return !finishedRequests.isEmpty() || settingsChanged;
    746760                } finally {
    747761                        requestQueueLock.unlock();
     
    753767                        cancelGrabberThreads(true);
    754768                        startGrabberThreads();
    755                 }
    756         }
     769                } else if (
     770                                event.getKey().equals(WMSPlugin.PROP_OVERLAP.getKey())
     771                                || event.getKey().equals(WMSPlugin.PROP_OVERLAP_EAST.getKey())
     772                                || event.getKey().equals(WMSPlugin.PROP_OVERLAP_NORTH.getKey())) {
     773                        for (int i=0; i<images.length; i++) {
     774                                for (int k=0; k<images[i].length; k++) {
     775                                        images[i][k] = new GeorefImage(this);
     776                                }
     777                        }
     778
     779                        settingsChanged = true;
     780                }
     781        }
     782
    757783}
Note: See TracChangeset for help on using the changeset viewer.