Changeset 9713 in osm


Ignore:
Timestamp:
2008-08-12T14:16:26+02:00 (16 years ago)
Author:
stotz
Message:

new method: zoomChanged()

Location:
applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java

    r9584 r9713  
    1717 *
    1818 */
    19 public class DefaultMapController extends JMapController implements
    20                 MouseListener, MouseMotionListener, MouseWheelListener {
     19public class DefaultMapController extends JMapController implements MouseListener,
     20                MouseMotionListener, MouseWheelListener {
    2121
    22         private static final int MOUSE_BUTTONS_MASK = MouseEvent.BUTTON3_DOWN_MASK
    23                         | MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON2_DOWN_MASK;
     22        private static final int MOUSE_BUTTONS_MASK =
     23                        MouseEvent.BUTTON3_DOWN_MASK | MouseEvent.BUTTON1_DOWN_MASK
     24                                        | MouseEvent.BUTTON2_DOWN_MASK;
    2425
    2526        public DefaultMapController(JMapViewer map) {
     
    3435
    3536        private int movementMouseButton = MouseEvent.BUTTON3;
     37        private int movementMouseButtonMask = MouseEvent.BUTTON3_DOWN_MASK;
    3638
    3739        private boolean wheelZoomEnabled = true;
     
    4143                if (!movementEnabled || !isMoving)
    4244                        return;
    43                 // Is only right mouse button presed?
    44                 if ((e.getModifiersEx() & MOUSE_BUTTONS_MASK) == MouseEvent.BUTTON3_DOWN_MASK) {
    45 
     45                // Is only the selected mouse button pressed?
     46                if ((e.getModifiersEx() & MOUSE_BUTTONS_MASK) == movementMouseButtonMask) {
     47                        Point p = e.getPoint();
    4648                        if (lastDragPoint != null) {
    47                                 Point p = e.getPoint();
    4849                                int diffx = lastDragPoint.x - p.x;
    4950                                int diffy = lastDragPoint.y - p.y;
    5051                                map.moveMap(diffx, diffy);
    5152                        }
    52                         lastDragPoint = e.getPoint();
     53                        lastDragPoint = p;
    5354                }
    5455        }
    5556
    5657        public void mouseClicked(MouseEvent e) {
    57                 if (doubleClickZoomEnabled && e.getClickCount() == 2
    58                                 && e.getButton() == MouseEvent.BUTTON1)
     58                if (doubleClickZoomEnabled && e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1)
    5959                        map.zoomIn(e.getPoint());
    6060        }
     
    109109        public void setMovementMouseButton(int movementMouseButton) {
    110110                this.movementMouseButton = movementMouseButton;
     111                switch (movementMouseButton) {
     112                case MouseEvent.BUTTON1:
     113                        movementMouseButtonMask = MouseEvent.BUTTON1_DOWN_MASK;
     114                        break;
     115                case MouseEvent.BUTTON2:
     116                        movementMouseButtonMask = MouseEvent.BUTTON2_DOWN_MASK;
     117                        break;
     118                case MouseEvent.BUTTON3:
     119                        movementMouseButtonMask = MouseEvent.BUTTON3_DOWN_MASK;
     120                        break;
     121                default:
     122                        throw new RuntimeException("Unsupported button");
     123                }
    111124        }
    112125
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Demo.java

    r9618 r9713  
    2929                final JMapViewer map = new JMapViewer();
    3030                // final JMapViewer map = new JMapViewer(new MemoryTileCache(),4);
    31                 // map.setTileLoader(new
    32                 // OsmFileCacheTileLoader(map,OsmTileLoader.MAP_MAPNIK));
    33                 new DefaultMapController(map);
     31                // map.setTileLoader(new OsmFileCacheTileLoader(map,
     32                // OsmTileLoader.MAP_MAPNIK));
     33                // new DefaultMapController(map);
    3434                setLayout(new BorderLayout());
    3535                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    3737                JPanel panel = new JPanel();
    3838                add(panel, BorderLayout.NORTH);
    39                 JLabel label = new JLabel(
    40                                 "Use right mouse button to move,\n left double click or mouse wheel to zoom.");
     39                JLabel label =
     40                                new JLabel("Use right mouse button to move,\n "
     41                                                + "left double click or mouse wheel to zoom.");
    4142                panel.add(label);
    4243                JButton button = new JButton("setDisplayToFitMapMarkers");
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java

    r9619 r9713  
    4343         * Vectors for clock-wise tile painting
    4444         */
    45         protected static final Point[] move = { new Point(1, 0), new Point(0, 1),
    46                         new Point(-1, 0), new Point(0, -1) };
     45        protected static final Point[] move =
     46                        { new Point(1, 0), new Point(0, 1), new Point(-1, 0), new Point(0, -1) };
    4747
    4848        public static final int MAX_ZOOM = 18;
     
    102102                setPreferredSize(new Dimension(400, 400));
    103103                try {
    104                         loadingImage = ImageIO.read(JMapViewer.class
    105                                         .getResourceAsStream("images/hourglass.png"));
     104                        loadingImage =
     105                                        ImageIO.read(JMapViewer.class.getResourceAsStream("images/hourglass.png"));
    106106                } catch (Exception e1) {
    107107                        loadingImage = null;
     
    123123                int size = 18;
    124124                try {
    125                         ImageIcon icon = new ImageIcon(getClass().getResource(
    126                                         "images/plus.png"));
     125                        ImageIcon icon = new ImageIcon(getClass().getResource("images/plus.png"));
    127126                        zoomInButton = new JButton(icon);
    128127                } catch (Exception e) {
     
    140139                add(zoomInButton);
    141140                try {
    142                         ImageIcon icon = new ImageIcon(getClass().getResource(
    143                                         "images/minus.png"));
     141                        ImageIcon icon = new ImageIcon(getClass().getResource("images/minus.png"));
    144142                        zoomOutButton = new JButton(icon);
    145143                } catch (Exception e) {
     
    170168         */
    171169        public void setDisplayPositionByLatLon(double lat, double lon, int zoom) {
    172                 setDisplayPositionByLatLon(new Point(getWidth() / 2, getHeight() / 2),
    173                                 lat, lon, zoom);
     170                setDisplayPositionByLatLon(new Point(getWidth() / 2, getHeight() / 2), lat, lon, zoom);
    174171        }
    175172
     
    189186         *            {@link #MIN_ZOOM} <= zoom level <= {@link #MAX_ZOOM}
    190187         */
    191         public void setDisplayPositionByLatLon(Point mapPoint, double lat,
    192                         double lon, int zoom) {
     188        public void setDisplayPositionByLatLon(Point mapPoint, double lat, double lon, int zoom) {
    193189                int x = OsmMercator.LonToX(lon, zoom);
    194190                int y = OsmMercator.LatToY(lat, zoom);
     
    197193
    198194        public void setDisplayPosition(int x, int y, int zoom) {
    199                 setDisplayPosition(new Point(getWidth() / 2, getHeight() / 2), x, y,
    200                                 zoom);
     195                setDisplayPosition(new Point(getWidth() / 2, getHeight() / 2), x, y, zoom);
    201196        }
    202197
     
    210205                p.y = y - mapPoint.y + getHeight() / 2;
    211206                center = p;
    212                 this.zoom = zoom;
    213                 if (zoomSlider.getValue() != zoom)
    214                         zoomSlider.setValue(zoom);
    215                 repaint();
     207                setIgnoreRepaint(true);
     208                try {
     209                        int oldZoom = this.zoom;
     210                        this.zoom = zoom;
     211                        if (oldZoom != zoom)
     212                                zoomChanged(oldZoom);
     213                        if (zoomSlider.getValue() != zoom)
     214                                zoomSlider.setValue(zoom);
     215                } finally {
     216                        setIgnoreRepaint(false);
     217                        repaint();
     218                }
    216219        }
    217220
     
    240243                // System.out.println(y_min + " < y < " + y_max);
    241244                // System.out.println("tiles: " + width + " " + height);
    242                 int zoom = MAX_ZOOM;
     245                int newZoom = MAX_ZOOM;
    243246                int x = x_max - x_min;
    244247                int y = y_max - y_min;
    245248                while (x > width || y > height) {
    246249                        // System.out.println("zoom: " + zoom + " -> " + x + " " + y);
    247                         zoom--;
     250                        newZoom--;
    248251                        x >>= 1;
    249252                        y >>= 1;
     
    251254                x = x_min + (x_max - x_min) / 2;
    252255                y = y_min + (y_max - y_min) / 2;
    253                 int z = 1 << (MAX_ZOOM - zoom);
     256                int z = 1 << (MAX_ZOOM - newZoom);
    254257                x /= z;
    255258                y /= z;
    256                 setDisplayPosition(x, y, zoom);
     259                setDisplayPosition(x, y, newZoom);
    257260        }
    258261
     
    334337                                        x++;
    335338                                for (int z = 0; z < x; z++) {
    336                                         if (x_min <= posx && posx <= x_max && y_min <= posy
    337                                                         && posy <= y_max) { // tile
     339                                        if (x_min <= posx && posx <= x_max && y_min <= posy && posy <= y_max) { // tile
    338340                                                // is
    339341                                                // visible
     
    419421                        return;
    420422                Point2D.Double zoomPos = getPosition(mapPoint);
    421                 // addMapMarker(new MapMarkerDot(Color.RED, zoomPos.x, zoomPos.y));
    422423                jobDispatcher.cancelOutstandingJobs(); // Clearing outstanding load
    423424                // requests
     
    450451                }
    451452                if (!tile.isLoaded()) {
    452                         jobDispatcher.addJob(tileLoader.createTileLoaderJob(tilex, tiley,
    453                                         zoom));
     453                        jobDispatcher.addJob(tileLoader.createTileLoaderJob(tilex, tiley, zoom));
    454454                }
    455455                return tile;
     456        }
     457
     458        /**
     459         * Every time the zoom level changes this method is called. Override it in
     460         * derived implementations for adapting zoom dependent values. The new zoom
     461         * level can be obtained via {@link #getZoom()}.
     462         *
     463         * @param oldZoom
     464         *            the previous zoom level
     465         */
     466        protected void zoomChanged(int oldZoom) {
    456467        }
    457468
Note: See TracChangeset for help on using the changeset viewer.