Ticket #678: fix_zooming.patch

File fix_zooming.patch, 3.5 KB (added by JohannesRudolph, 17 years ago)

The patch

  • src/OsmMapControl.java

    diff --git a/src/OsmMapControl.java b/src/OsmMapControl.java
    index 61865fe..39ddc99 100644
    a b public class OsmMapControl extends MouseAdapter implements MouseMotionListener,  
    165165                                        iStartSelectionPoint = null;
    166166                                }
    167167                                else if(e.getClickCount() == 2){
     168                                        iSlippyMapChooser.zoomIn(e.getPoint());
    168169                                        iSlippyMapChooser.centerOnScreenPoint(e.getPoint());
    169                                         iSlippyMapChooser.zoomIn();
    170170                                }               
    171171                        }
    172172                }                       
    public class OsmMapControl extends MouseAdapter implements MouseMotionListener,  
    208208                int rot = e.getWheelRotation();
    209209                //scroll wheel rotated away from user
    210210                if(rot < 0){
    211                         iSlippyMapChooser.zoomIn();
     211                        iSlippyMapChooser.zoomIn(e.getPoint());
    212212                }
    213213                //scroll wheel rotated towards the user
    214214                else if(rot > 0){
    215                         iSlippyMapChooser.zoomOut();
     215                        iSlippyMapChooser.zoomOut(e.getPoint());
    216216                }
    217217        }
    218218
  • src/SlippyMapChooser.java

    diff --git a/src/SlippyMapChooser.java b/src/SlippyMapChooser.java
    index 6ca7b76..14e52d8 100644
    a b public class SlippyMapChooser extends JComponent implements DownloadSelection{  
    355355         * Zoom in one level   
    356356         * Callback for OsmMapControl. Zoom out one level               
    357357         */
    358         void zoomIn(){ 
     358        void zoomIn(Point curPos){     
    359359               
    360360                //cache center of screen and the selection rectangle
    361                 LatLon l = getLatLonOfScreenPoint(new Point(getWidth()/2, getHeight()/2));
     361                LatLon l = getLatLonOfScreenPoint(curPos);
    362362                LatLon selStart = null;
    363363                LatLon selEnd   = null;
    364364                if(iSelectionRectEnd != null && iSelectionRectStart != null){
    public class SlippyMapChooser extends JComponent implements DownloadSelection{  
    373373                        return;
    374374                }
    375375                                       
    376                 //center on cached location
    377                 centerOnLatLon(l);
     376                setLatLonAtPoint(l, curPos);
    378377               
    379378                //restore selection
    380379                if(selStart != null && selEnd != null){
    public class SlippyMapChooser extends JComponent implements DownloadSelection{  
    393392         * Zoom out one level.
    394393         * Callback for OsmMapControl.
    395394         */
    396         void zoomOut(){
     395        void zoomOut(Point curPos){
    397396                //cache center of screen and the selction rect
    398                 LatLon l = getLatLonOfScreenPoint(new Point(getWidth()/2, getHeight()/2));
     397                LatLon l = getLatLonOfScreenPoint(curPos);
    399398                LatLon selStart = null;
    400399                LatLon selEnd   = null;
    401400                if(iSelectionRectEnd != null && iSelectionRectStart != null){
    public class SlippyMapChooser extends JComponent implements DownloadSelection{  
    410409                        return;
    411410                }
    412411               
    413                 //center on cached location
    414                 centerOnLatLon(l);
     412                setLatLonAtPoint(l, curPos);
    415413               
    416414                //restore selection
    417415                if(selStart != null && selEnd != null){
    public class SlippyMapChooser extends JComponent implements DownloadSelection{  
    484482         * Centers the map on the location given by LatLon
    485483         * @param aLatLon the location to center on
    486484         */
    487         private void centerOnLatLon(LatLon aLatLon){           
     485        private void centerOnLatLon(LatLon aLatLon){
     486                setLatLonAtPoint(aLatLon, new Point(getWidth()/2,getHeight()/2));
     487        }
     488
     489        /**
     490         * Moves the map that the specified latLon is shown at the point on screen
     491         * given
     492         * @param aLatLon a position
     493         * @param p a point on the screen
     494         */
     495        private void setLatLonAtPoint(LatLon aLatLon, Point p){
    488496                int x = OsmMercator.LonToX(aLatLon.lon(), iZoomlevel);
    489497                int y = OsmMercator.LatToY(aLatLon.lat(), iZoomlevel);
    490                 iOffsetX = -x +getWidth()/2;
    491                 iOffsetY = -y +getHeight()/2;
     498                iOffsetX = - x + p.x;
     499                iOffsetY = - y + p.y;
    492500                repaint();
    493501        }
    494502