From d3a328405eadfe925adcb5d82923bd245c87501a Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Thu, 12 Jan 2017 08:26:28 +1100 Subject: [PATCH] Cycle palettes --- .../applefile/DoubleHiResImage.java | 8 ++++-- .../diskbrowser/applefile/HiResImage.java | 8 ++++++ .../bytezone/diskbrowser/gui/DataPanel.java | 11 ++++++++ .../bytezone/diskbrowser/gui/MenuHandler.java | 2 ++ .../diskbrowser/gui/PaletteAction.java | 28 +++++++++++++++++++ 5 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/com/bytezone/diskbrowser/gui/PaletteAction.java diff --git a/src/com/bytezone/diskbrowser/applefile/DoubleHiResImage.java b/src/com/bytezone/diskbrowser/applefile/DoubleHiResImage.java index 12c7103..e8c9ea9 100644 --- a/src/com/bytezone/diskbrowser/applefile/DoubleHiResImage.java +++ b/src/com/bytezone/diskbrowser/applefile/DoubleHiResImage.java @@ -125,7 +125,7 @@ public class DoubleHiResImage extends HiResImage private final byte[] auxBuffer; private DoubleScrunch doubleScrunch; byte[] packedBuffer; - private final int paletteIndex = 2; + // private final int paletteIndex = 2; public DoubleHiResImage (String name, byte[] buffer, byte[] auxBuffer) { @@ -198,6 +198,8 @@ public class DoubleHiResImage extends HiResImage @Override protected void createColourImage () { + int paletteNdx = paletteIndex % palette2.length; + // image will be doubled horizontally image = new BufferedImage (140 * 2, 192, BufferedImage.TYPE_INT_RGB); DataBuffer dataBuffer = image.getRaster ().getDataBuffer (); @@ -217,8 +219,8 @@ public class DoubleHiResImage extends HiResImage for (int px = 0; px < 28; px += 4) { int val = (value >> px) & 0x0F; - dataBuffer.setElem (ndx++, palette2[paletteIndex][val]); - dataBuffer.setElem (ndx++, palette2[paletteIndex][val]); // repeat pixel + dataBuffer.setElem (ndx++, palette2[paletteNdx][val]); + dataBuffer.setElem (ndx++, palette2[paletteNdx][val]); // repeat pixel } } } diff --git a/src/com/bytezone/diskbrowser/applefile/HiResImage.java b/src/com/bytezone/diskbrowser/applefile/HiResImage.java index 5621b13..7666575 100644 --- a/src/com/bytezone/diskbrowser/applefile/HiResImage.java +++ b/src/com/bytezone/diskbrowser/applefile/HiResImage.java @@ -17,6 +17,7 @@ public abstract class HiResImage extends AbstractFile protected static boolean colourQuirks; protected static boolean monochrome; + protected static int paletteIndex; protected int fileType; protected int auxType; @@ -79,6 +80,13 @@ public abstract class HiResImage extends AbstractFile protected abstract void createColourImage (); + public void cyclePalette () + { + ++paletteIndex; + if (!monochrome) + createImage (); + } + public void setColourQuirks (boolean value) { if (colourQuirks == value) diff --git a/src/com/bytezone/diskbrowser/gui/DataPanel.java b/src/com/bytezone/diskbrowser/gui/DataPanel.java index 6892fa9..1550d12 100755 --- a/src/com/bytezone/diskbrowser/gui/DataPanel.java +++ b/src/com/bytezone/diskbrowser/gui/DataPanel.java @@ -130,6 +130,17 @@ class DataPanel extends JTabbedPane mh.colourQuirksItem.setAction (new ColourQuirksAction (this)); mh.monochromeItem.setAction (new MonochromeAction (this)); mh.debuggingItem.setAction (new DebuggingAction (this)); + mh.paletteItem.setAction (new PaletteAction (this)); + } + + public void cyclePalette () + { + if (currentDataSource instanceof HiResImage) + { + HiResImage image = (HiResImage) currentDataSource; + image.cyclePalette (); + imagePanel.setImage (image.getImage ()); + } } public void setColourQuirks (boolean value) diff --git a/src/com/bytezone/diskbrowser/gui/MenuHandler.java b/src/com/bytezone/diskbrowser/gui/MenuHandler.java index 5a6ff76..703a264 100755 --- a/src/com/bytezone/diskbrowser/gui/MenuHandler.java +++ b/src/com/bytezone/diskbrowser/gui/MenuHandler.java @@ -60,6 +60,7 @@ public class MenuHandler JMenuItem colourQuirksItem = new JCheckBoxMenuItem ("Colour quirks"); JMenuItem monochromeItem = new JCheckBoxMenuItem ("Monochrome"); JMenuItem debuggingItem = new JCheckBoxMenuItem ("Debugging"); + JMenuItem paletteItem = new JMenuItem ("Cycle Palette"); public MenuHandler (Preferences prefs) { @@ -109,6 +110,7 @@ public class MenuHandler formatMenu.add (colourQuirksItem); formatMenu.add (monochromeItem); formatMenu.add (debuggingItem); + formatMenu.add (paletteItem); helpMenu.add (new JMenuItem (new EnvironmentAction ())); diff --git a/src/com/bytezone/diskbrowser/gui/PaletteAction.java b/src/com/bytezone/diskbrowser/gui/PaletteAction.java new file mode 100644 index 0000000..668f5d1 --- /dev/null +++ b/src/com/bytezone/diskbrowser/gui/PaletteAction.java @@ -0,0 +1,28 @@ +package com.bytezone.diskbrowser.gui; + +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.KeyStroke; + +public class PaletteAction extends AbstractAction +{ + private final DataPanel owner; + + public PaletteAction (DataPanel owner) + { + super ("Cycle Palette"); + putValue (Action.SHORT_DESCRIPTION, "Select next color palette"); + putValue (Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke ("alt P")); + putValue (Action.MNEMONIC_KEY, KeyEvent.VK_P); + this.owner = owner; + } + + @Override + public void actionPerformed (ActionEvent e) + { + owner.cyclePalette (); + } +} \ No newline at end of file