Ignore:
Timestamp:
2017-11-23T22:10:26+01:00 (6 years ago)
Author:
Don-vip
Message:

fix #13883, fix #15586 - better fix for #13883, without breaking panning on macOS

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

Legend:

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

    r13141 r13154  
    1414import java.awt.Font;
    1515import java.awt.GridBagLayout;
     16import java.awt.MouseInfo;
    1617import java.awt.Point;
     18import java.awt.PointerInfo;
    1719import java.awt.SystemColor;
    1820import java.awt.Toolkit;
     
    7678import org.openstreetmap.josm.data.preferences.DoubleProperty;
    7779import org.openstreetmap.josm.data.preferences.NamedColorProperty;
     80import org.openstreetmap.josm.gui.NavigatableComponent.ZoomChangeListener;
    7881import org.openstreetmap.josm.gui.help.Helpful;
    7982import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
     
    107110 */
    108111public final class MapStatus extends JPanel implements
    109     Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener, SelectionChangedListener {
     112    Helpful, Destroyable, PreferenceChangedListener, SoMChangeListener, SelectionChangedListener, ZoomChangeListener {
    110113
    111114    private final DecimalFormat DECIMAL_FORMAT = new DecimalFormat(Config.getPref().get("statusbar.decimal-format", "0.0"));
     
    882885                if (mv.getCenter() == null)
    883886                    return;
    884                 // Do not update the view if ctrl is pressed.
    885                 if ((e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == 0) {
    886                     ICoordinateFormat mCord = CoordinateFormatManager.getDefaultFormat();
    887                     LatLon p = mv.getLatLon(e.getX(), e.getY());
    888                     latText.setText(mCord.latToString(p));
    889                     lonText.setText(mCord.lonToString(p));
    890                     if (Objects.equals(previousCoordinateFormat, mCord)) {
    891                         // do nothing
    892                     } else if (ProjectedCoordinateFormat.INSTANCE.equals(mCord)) {
    893                         latText.setIcon("northing");
    894                         lonText.setIcon("easting");
    895                         latText.setToolTipText(tr("The northing at the mouse pointer."));
    896                         lonText.setToolTipText(tr("The easting at the mouse pointer."));
    897                         previousCoordinateFormat = mCord;
    898                     } else {
    899                         latText.setIcon("lat");
    900                         lonText.setIcon("lon");
    901                         latText.setToolTipText(tr("The geographic latitude at the mouse pointer."));
    902                         lonText.setToolTipText(tr("The geographic longitude at the mouse pointer."));
    903                         previousCoordinateFormat = mCord;
    904                     }
     887                // Do not update the view if ctrl or right button is pressed.
     888                if ((e.getModifiersEx() & (MouseEvent.CTRL_DOWN_MASK | MouseEvent.BUTTON3_DOWN_MASK)) == 0) {
     889                    updateLatLonText(e.getX(), e.getY());
    905890                }
    906891            }
     
    938923
    939924        SystemOfMeasurement.addSoMChangeListener(this);
     925        NavigatableComponent.addZoomChangeListener(this);
    940926
    941927        latText.addMouseListener(jumpToOnLeftClick);
     
    969955        thread.setDaemon(true);
    970956        thread.start();
     957    }
     958
     959    private void updateLatLonText(int x, int y) {
     960        LatLon p = mv.getLatLon(x, y);
     961        ICoordinateFormat mCord = CoordinateFormatManager.getDefaultFormat();
     962        latText.setText(mCord.latToString(p));
     963        lonText.setText(mCord.lonToString(p));
     964        if (Objects.equals(previousCoordinateFormat, mCord)) {
     965            // do nothing
     966        } else if (ProjectedCoordinateFormat.INSTANCE.equals(mCord)) {
     967            latText.setIcon("northing");
     968            lonText.setIcon("easting");
     969            latText.setToolTipText(tr("The northing at the mouse pointer."));
     970            lonText.setToolTipText(tr("The easting at the mouse pointer."));
     971            previousCoordinateFormat = mCord;
     972        } else {
     973            latText.setIcon("lat");
     974            lonText.setIcon("lon");
     975            latText.setToolTipText(tr("The geographic latitude at the mouse pointer."));
     976            lonText.setToolTipText(tr("The geographic longitude at the mouse pointer."));
     977            previousCoordinateFormat = mCord;
     978        }
    971979    }
    972980
     
    11151123    public void destroy() {
    11161124        SystemOfMeasurement.removeSoMChangeListener(this);
     1125        NavigatableComponent.removeZoomChangeListener(this);
    11171126        Config.getPref().removePreferenceChangeListener(this);
    11181127        SelectionEventManager.getInstance().removeSelectionListener(this);
     
    11811190        setDist(new SubclassFilteredCollection<OsmPrimitive, Way>(newSelection, Way.class::isInstance));
    11821191    }
     1192
     1193    @Override
     1194    public void zoomChanged() {
     1195        PointerInfo pointerInfo = MouseInfo.getPointerInfo();
     1196        if (pointerInfo != null) {
     1197            Point mp = pointerInfo.getLocation();
     1198            updateLatLonText(mp.x, mp.y);
     1199        }
     1200    }
    11831201}
  • trunk/src/org/openstreetmap/josm/gui/MapView.java

    r13143 r13154  
    910910    }
    911911
    912     @Override
    913     protected void refreshMouse() {
    914         if (lastMEvent.getWhen() > 0) {
    915             // This fake movement allows to keep consistent state between mouse position and hilighted primitives, status bar, etc.
    916             // When the map is not moved by mouse (for example with keyboard shortcuts)
    917             dispatchEvent(new MouseEvent(this, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), 0,
    918                     lastMEvent.getX(), lastMEvent.getY(), 0, false));
    919         }
    920     }
    921 
    922912    /**
    923913     * Returns the layer manager.
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r13143 r13154  
    697697        if (!initial) {
    698698            repaint();
    699             refreshMouse();
    700699            fireZoomChanged();
    701700        }
    702     }
    703 
    704     protected void refreshMouse() {
    705         // To be overriden by subclasses handling mouse events
    706701    }
    707702
Note: See TracChangeset for help on using the changeset viewer.