Ignore:
Timestamp:
2011-02-20T15:08:35+01:00 (13 years ago)
Author:
stoecker
Message:

unify cursor handling, hopefully fix #5381

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
2 edited

Legend:

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

    r1939 r3919  
    6767     */
    6868    private final NavigatableComponent nc;
    69     /**
    70      * The old cursor when we changed it to movement cursor.
    71      */
    72     private Cursor oldCursor;
    7369
    7470    private boolean movementInPlace = false;
     
    167163        movementInPlace = true;
    168164        mousePosMove = nc.getEastNorth(e.getX(), e.getY());
    169         oldCursor = nc.getCursor();
    170         nc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
     165        nc.setNewCursor(Cursor.MOVE_CURSOR, this);
    171166    }
    172167
     
    178173            return;
    179174        movementInPlace = false;
    180         if (oldCursor != null)
    181             nc.setCursor(oldCursor);
    182         else
    183             nc.setCursor(Cursor.getDefaultCursor());
     175        nc.resetCursor(this);
    184176        mousePosMove = null;
    185         oldCursor = null;
    186177    }
    187178
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r3838 r3919  
    44import static org.openstreetmap.josm.tools.I18n.marktr;
    55
     6import java.awt.Cursor;
    67import java.awt.Point;
    78import java.awt.Rectangle;
     
    12131214        SYSTEMS_OF_MEASUREMENT.put(marktr("Imperial"), IMPERIAL_SOM);
    12141215    }
     1216
     1217    private class CursorInfo {
     1218        public Cursor cursor;
     1219        public Object object;
     1220        public CursorInfo(Cursor c, Object o) {
     1221            cursor = c;
     1222            object = o;
     1223        }
     1224    }
     1225
     1226    private LinkedList<CursorInfo> Cursors = new LinkedList<CursorInfo>();
     1227    /**
     1228     * Set new cursor.
     1229     */
     1230    public void setNewCursor(Cursor cursor, Object reference) {
     1231        if(Cursors.size() > 0) {
     1232            CursorInfo l = Cursors.getLast();
     1233            if(l != null && l.cursor == cursor && l.object == reference) {
     1234                return;
     1235            }
     1236            stripCursors(reference);
     1237        }
     1238        Cursors.add(new CursorInfo(cursor, reference));
     1239        setCursor(cursor);
     1240    }
     1241    public void setNewCursor(int cursor, Object reference) {
     1242        setNewCursor(Cursor.getPredefinedCursor(cursor), reference);
     1243    }
     1244    /**
     1245     * Remove the new cursor and reset to previous
     1246     */
     1247    public void resetCursor(Object reference) {
     1248        if(Cursors.size() == 0) {
     1249            setCursor(null);
     1250            return;
     1251        }
     1252        CursorInfo l = Cursors.getLast();
     1253        stripCursors(reference);
     1254        if(l != null && l.object == reference) {
     1255            if(Cursors.size() == 0)
     1256                setCursor(null);
     1257            else
     1258                setCursor(Cursors.getLast().cursor);
     1259        }
     1260    }
     1261
     1262    private void stripCursors(Object reference) {
     1263        LinkedList<CursorInfo> c = new LinkedList<CursorInfo>();
     1264        for(CursorInfo i : Cursors) {
     1265            if(i.object != reference)
     1266                c.add(i);
     1267        }
     1268        Cursors = c;
     1269    }
    12151270}
Note: See TracChangeset for help on using the changeset viewer.