Ignore:
Timestamp:
2011-08-04T21:13:30+02:00 (13 years ago)
Author:
akks
Message:

FastDraw: Better Linux Compatibilty

Location:
applications/editors/josm/plugins/FastDraw
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/FastDraw/build.xml

    r26442 r26448  
    3030<project name="FastDraw" default="dist" basedir=".">
    3131    <!-- enter the SVN commit message -->
    32     <property name="commit.message" value="FastDraw: can hold spacebar instead of LKM, can edit existing lines "/>
     32    <property name="commit.message" value="FastDraw: better linux compatibility"/>
    3333    <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
    3434    <property name="plugin.main.version" value="4201"/>
  • applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java

    r26440 r26448  
    2525import java.awt.event.AWTEventListener;
    2626import java.awt.event.ActionEvent;
     27import java.awt.event.ActionListener;
    2728import java.awt.event.InputEvent;
    2829import java.awt.event.KeyEvent;
    29 import java.io.IOException;
    30 import java.lang.annotation.Target;
    3130import java.util.*;
    3231import javax.swing.JOptionPane;
     32import javax.swing.Timer;
    3333
    3434import org.openstreetmap.josm.Main;
     
    3636import org.openstreetmap.josm.actions.mapmode.MapMode;
    3737import org.openstreetmap.josm.command.AddCommand;
    38 import org.openstreetmap.josm.command.ChangeCommand;
    39 import org.openstreetmap.josm.command.ChangeNodesCommand;
    4038import org.openstreetmap.josm.command.Command;
    4139import org.openstreetmap.josm.command.DeleteCommand;
     
    8482    private SequenceCommand delCmd;
    8583    private List<Node> oldNodes;
    86 
     84   
     85    private final TreeSet set = new TreeSet();
     86    private Timer timer;
     87 
     88    private KeyEvent releaseEvent;
    8789
    8890    FastDrawingMode(MapFrame mapFrame) {
     
    135137            if (w.isNew()) loadFromWay(w);
    136138        }
    137 
     139        timer = new Timer(0, new ActionListener() {
     140            @Override
     141            public void actionPerformed(ActionEvent ae) {
     142                 timer.stop();
     143                 if (set.remove(releaseEvent.getKeyCode())) {
     144                  doKeyReleaseEvent(releaseEvent);
     145                 }
     146            }
     147        });
     148       
    138149        try {
    139150            Toolkit.getDefaultToolkit().addAWTEventListener(this,
     
    213224                }
    214225                if (!drawing) {
    215                     if (shift && !line.wasSimplified() && nearestIdx==i+1 ) {
     226                    if (!line.wasSimplified() && nearestIdx==i+1 ) {
     227                    if (shift) {
    216228                        // highlight node to delete
    217229                        g.setStroke(strokeForDelete);
     
    220232                        g.drawLine(p2.x - 5, p2.y + 5,p2.x + 5, p2.y - 5);
    221233                        g.setStroke(strokeForOriginal);
    222                     }
    223                     if (ctrl && !line.wasSimplified() && nearestIdx==i+1 ) {
     234                    } else if (ctrl) {
    224235                        // highlight node to toggle fixation
    225236                        g.setStroke(strokeForDelete);
     
    227238                        g.drawOval(p2.x - 5, p2.y - 5, 11, 11);
    228239                        g.setStroke(strokeForOriginal);
     240                    }
    229241                    }
    230242                }
     
    240252        }
    241253        updateKeyModifiers((InputEvent) event);
     254        if (event instanceof KeyEvent) {
     255        KeyEvent e=(KeyEvent) event;
     256       
    242257        if (event.getID() == KeyEvent.KEY_PRESSED) {
     258             if (timer.isRunning()) {
     259                  timer.stop();
     260                } else {
     261                  set.add((e.getKeyCode()));
     262                }
    243263            doKeyEvent((KeyEvent) event);
    244264        }
    245265        if (event.getID() == KeyEvent.KEY_RELEASED) {
    246             doKeyReleaseEvent((KeyEvent) event);
    247         }
    248         updateCursor();
    249 //        updateStatusLine();
    250         repaint();
     266            if (timer.isRunning()) {
     267              timer.stop();
     268               if (set.remove(e.getKeyCode())) {
     269                  doKeyReleaseEvent(e);
     270               }
     271            } else {
     272              releaseEvent = e;
     273              timer.restart();
     274            }
     275        }
     276        }
    251277    }
    252278
     
    332358        Node nd1 = getNearestNode(e.getPoint(), settings.maxDist);
    333359        boolean nearpoint2=nd1!=null;
    334         if (nearpoint!=nearpoint2) {nearpoint=nearpoint2;updateCursor();}
    335 
    336         nearestIdx=line.findClosestPoint(e.getPoint(),settings.maxDist);
     360        boolean needRepaint=false;
     361        if (nearpoint!=nearpoint2) {nearpoint=nearpoint2;updateCursor();needRepaint=true;}
     362
     363        int nearestIdx2=line.findClosestPoint(e.getPoint(),settings.maxDist);
     364        if (nearestIdx != nearestIdx2) {nearestIdx=nearestIdx2; updateCursor();needRepaint=true;}
    337365       
    338366        if (!drawing) {
     
    350378                    repaint();
    351379                }
     380            } else if (needRepaint) {
     381                repaint();
    352382            }
    353383            return;
    354384        }
    355         updateCursor();
    356385        if (line.isClosed()) setStatusLine(SIMPLIFYMODE_MESSAGE);
    357386
     
    361390        Point lastP = line.getLastPoint(); // last point of line fragment being edited
    362391
    363             if (nearpoint){
     392        if (nearpoint){
    364393            if ( Math.hypot(e.getX() - lastP.x, e.getY() - lastP.y) > 1e-2) {
    365394                line.addFixed(nd1.getCoor()); // snap to node coords
    366395                repaint();
     396                return;
    367397            }
    368398        } else {
    369399            if (Math.hypot(e.getX() - lastP.x, e.getY() - lastP.y) > settings.minPixelsBetweenPoints) {
    370                           line.addLast(getLatLon(e)); // free mouse-drawing
     400                line.addLast(getLatLon(e)); // free mouse-drawing
    371401                repaint();
    372             }
    373         }
     402                return;
     403            }
     404        }
     405        if (nearpoint!=nearpoint2) {nearpoint=nearpoint2;updateCursor();}
     406
    374407
    375408        //statusText = getLatLon(e).toString();        updateStatusLine();
     
    377410
    378411    private void doKeyEvent(KeyEvent e) {
    379         /// System.out.println(e);
     412       // System.out.println(e);
    380413        switch(e.getKeyCode()) {
    381414        case KeyEvent.VK_BACK_SPACE:
     
    435468   
    436469    private void doKeyReleaseEvent(KeyEvent keyEvent) {
     470            //System.out.println("released "+keyEvent);
    437471            if (keyEvent.getKeyCode()==KeyEvent.VK_SPACE) stopDrawing();
     472            updateCursor();
    438473    }
    439474    /**
     
    443478        ctrl = (e.getModifiers() & ActionEvent.CTRL_MASK) != 0;
    444479        shift = (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
     480        updateCursor();
    445481    }
    446482
Note: See TracChangeset for help on using the changeset viewer.