001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.layer.imagery;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionEvent;
007
008import javax.swing.AbstractAction;
009
010import org.openstreetmap.josm.gui.MainApplication;
011import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
012
013/**
014 * Change resolution to native zoom level.
015 * @since 11950 (extracted from {@link AbstractTileSourceLayer})
016 */
017public class ZoomToNativeLevelAction extends AbstractAction {
018
019    private final AbstractTileSourceLayer<?> layer;
020
021    /**
022     * Constructs a new {@code ZoomToNativeLevelAction}.
023     * @param layer imagery layer
024     */
025    public ZoomToNativeLevelAction(AbstractTileSourceLayer<?> layer) {
026        super(tr("Zoom to native resolution"));
027        this.layer = layer;
028    }
029
030    @Override
031    public void actionPerformed(ActionEvent ae) {
032        double newFactor = Math.sqrt(layer.getScaleFactor(layer.getZoomLevel()));
033        MainApplication.getMap().mapView.zoomToFactor(newFactor);
034        layer.invalidate();
035    }
036}