diff --git a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index e96628844..9f75430da 100644 --- a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -399,6 +399,11 @@ public final class ImagePanel extends JPanel implements MediaDisplay { private int guidesCharacterId = -1; + @Override + public boolean canHaveRuler() { + return this.contentCanHaveRuler; + } + @Override public boolean canUseSnapping() { return selectionMode || doFreeTransform || hilightedPoints != null; diff --git a/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java b/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java index 2ecf22982..263f537be 100644 --- a/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java +++ b/src/com/jpexs/decompiler/flash/gui/SoundTagPlayer.java @@ -92,6 +92,11 @@ public class SoundTagPlayer implements MediaDisplay { private int instanceId = totalInstances++; + @Override + public boolean canHaveRuler() { + return false; + } + @Override public boolean canUseSnapping() { return false; diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/ruler16.png b/src/com/jpexs/decompiler/flash/gui/graphics/ruler16.png new file mode 100644 index 000000000..3e490250f Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/ruler16.png differ diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index 9c0fb9d83..06aeedb73 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -1029,3 +1029,4 @@ snap_options.snap_to_guides = Snap to Guides snap_options.snap_to_pixels = Snap to Pixels snap_options.snap_to_objects = Snap to Objects +button.ruler.hint = Toggle ruler display diff --git a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index f3de97ae1..13976720c 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -71,6 +71,11 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis private Color bgColor; + @Override + public boolean canHaveRuler() { + return false; + } + @Override public boolean canUseSnapping() { return false; diff --git a/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java b/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java index f8b60f82c..8191ba9be 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java +++ b/src/com/jpexs/decompiler/flash/gui/player/MediaDisplay.java @@ -84,4 +84,6 @@ public interface MediaDisplay extends Closeable { public boolean isMutable(); public boolean canUseSnapping(); + + public boolean canHaveRuler(); } diff --git a/src/com/jpexs/decompiler/flash/gui/player/ZoomPanel.java b/src/com/jpexs/decompiler/flash/gui/player/ZoomPanel.java index 02cc82855..c4532a7dc 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/ZoomPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/ZoomPanel.java @@ -16,6 +16,8 @@ */ package com.jpexs.decompiler.flash.gui.player; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.configuration.ConfigurationItemChangeListener; import com.jpexs.decompiler.flash.gui.AppStrings; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.gui.abc.SnapOptionsButton; @@ -27,6 +29,7 @@ import java.util.Objects; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JToggleButton; /** * @@ -37,6 +40,7 @@ public class ZoomPanel extends JPanel implements MediaDisplayListener { private MediaDisplay display; private JButton zoomFitButton; private SnapOptionsButton snapOptionsButton; + private JToggleButton rulerButton; private final JLabel percentLabel = new JLabel("100%"); private boolean zoomToFit = false; private double realZoom = 1.0; @@ -59,7 +63,19 @@ public class ZoomPanel extends JPanel implements MediaDisplayListener { JButton zoomNoneButton = new JButton(View.getIcon("zoomnone16")); zoomNoneButton.addActionListener(this::zoomNoneButtonActionPerformed); zoomNoneButton.setToolTipText(AppStrings.translate("button.zoomnone.hint")); - + + rulerButton = new JToggleButton(View.getIcon("ruler16")); + rulerButton.addActionListener(this::rulerActionPerformed); + rulerButton.setToolTipText(AppStrings.translate("button.ruler.hint")); + rulerButton.setSelected(Configuration.showRuler.get()); + + Configuration.showRuler.addListener(new ConfigurationItemChangeListener() { + @Override + public void configurationItemChanged(Boolean newValue) { + rulerButton.setSelected(newValue); + } + }); + snapOptionsButton = new SnapOptionsButton(); setLayout(new FlowLayout()); @@ -68,11 +84,17 @@ public class ZoomPanel extends JPanel implements MediaDisplayListener { add(zoomOutButton); add(zoomNoneButton); add(zoomFitButton); + add(rulerButton); add(snapOptionsButton); display.addEventListener(this); } + private void rulerActionPerformed(ActionEvent evt) { + JToggleButton toggleButton = (JToggleButton) evt.getSource(); + Configuration.showRuler.set(toggleButton.isSelected()); + } + private void zoomInButtonActionPerformed(ActionEvent evt) { double currentRealZoom = getRealZoom(); if (currentRealZoom >= MAX_ZOOM) { @@ -155,6 +177,7 @@ public class ZoomPanel extends JPanel implements MediaDisplayListener { zoomFitButton.setVisible(zoom != null); percentLabel.setVisible(zoom != null); snapOptionsButton.setVisible(display.canUseSnapping()); + rulerButton.setVisible(display.canHaveRuler()); Zoom currentZoom = new Zoom(); currentZoom.fit = zoomToFit; currentZoom.value = realZoom;