From b7e8c470f7e4f1ae642613bc5550fcc9a12b6d6f Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Tue, 5 Nov 2019 07:07:20 +1000 Subject: [PATCH] tidying --- .../diskbrowser/applefile/CharacterRom.java | 3 -- .../diskbrowser/applefile/IconFile.java | 31 ++++++++---- .../diskbrowser/utilities/Utility.java | 50 ++++++------------- 3 files changed, 37 insertions(+), 47 deletions(-) diff --git a/src/com/bytezone/diskbrowser/applefile/CharacterRom.java b/src/com/bytezone/diskbrowser/applefile/CharacterRom.java index 1e39475..5b09871 100644 --- a/src/com/bytezone/diskbrowser/applefile/CharacterRom.java +++ b/src/com/bytezone/diskbrowser/applefile/CharacterRom.java @@ -25,9 +25,6 @@ public class CharacterRom extends CharacterList super (name, buffer, charsX, charsY, HEADER_LENGTH); description = HexFormatter.getCString (buffer, 16); - - assert sizeX == (buffer[5] & 0xFF); - assert sizeY == (buffer[6] & 0xFF); } // ---------------------------------------------------------------------------------// diff --git a/src/com/bytezone/diskbrowser/applefile/IconFile.java b/src/com/bytezone/diskbrowser/applefile/IconFile.java index 5584583..e957d92 100644 --- a/src/com/bytezone/diskbrowser/applefile/IconFile.java +++ b/src/com/bytezone/diskbrowser/applefile/IconFile.java @@ -17,7 +17,7 @@ public class IconFile extends AbstractFile implements ProdosConstants private final int iBlkID; private final int iBlkPath; private final String iBlkName; - private final List icons = new ArrayList (); + private final List icons = new ArrayList<> (); private final boolean debug = false; public IconFile (String name, byte[] buffer) @@ -59,9 +59,9 @@ public class IconFile extends AbstractFile implements ProdosConstants int columns = Math.min (icons.size (), 4); int rows = (icons.size () - 1) / columns + 1; - image = new BufferedImage ( // - columns * maxWidth + 2 * base + (columns - 1) * gap, // - rows * maxHeight + 2 * base + (rows - 1) * gap, // + image = new BufferedImage ( // + dimension (columns, base, maxWidth, gap), // + dimension (rows, base, maxHeight, gap), // BufferedImage.TYPE_INT_RGB); Graphics2D graphics = image.createGraphics (); @@ -87,6 +87,13 @@ public class IconFile extends AbstractFile implements ProdosConstants graphics.dispose (); } + // ---------------------------------------------------------------------------------// + private int dimension (int chars, int border, int size, int gap) + // ---------------------------------------------------------------------------------// + { + return border * 2 + chars * (size + gap) - gap; + } + @Override public String getText () { @@ -197,6 +204,10 @@ public class IconFile extends AbstractFile implements ProdosConstants System.out.println (); } + if (iconWidth == 0 || iconHeight == 0) + throw new InvalidImageException ( + String.format ("Invalid icon: Height: %d, Width: %d", iconHeight, iconWidth)); + if (iconType != 0 && iconType != 0x8000 && iconType != 0xFFFF && iconType != 0x00FF) throw new InvalidImageException (String.format ("Bad icon type: %04X", iconType)); @@ -260,7 +271,7 @@ public class IconFile extends AbstractFile implements ProdosConstants /* Offset Color RGB Mini-Palette - + 0 Black 000 0 1 Blue 00F 1 2 Yellow FF0 2 @@ -269,7 +280,7 @@ public class IconFile extends AbstractFile implements ProdosConstants 5 Red D00 1 6 Green 0E0 2 7 White FFF 3 - + 8 Black 000 0 9 Blue 00F 1 10 Yellow FF0 2 @@ -278,18 +289,18 @@ public class IconFile extends AbstractFile implements ProdosConstants 13 Red D00 1 14 Green 0E0 2 15 White FFF 3 - + The displayMode word bits are defined as: - + Bit 0 selectedIconBit 1 = invert image before copying Bit 1 openIconBit 1 = copy light-gray pattern instead of image Bit 2 offLineBit 1 = AND light-gray pattern to image being copied Bits 3-7 reserved. Bits 8-11 foreground color to apply to black part of black & white icons Bits 12-15 background color to apply to white part of black & white icons - + Bits 0-2 can occur at once and are tested in the order 1-2-0. - + "Color is only applied to the black and white icons if bits 15-8 are not all 0. Colored pixels in an icon are inverted by black pixels becoming white and any other color of pixel becoming black." diff --git a/src/com/bytezone/diskbrowser/utilities/Utility.java b/src/com/bytezone/diskbrowser/utilities/Utility.java index f6f8b38..561182a 100644 --- a/src/com/bytezone/diskbrowser/utilities/Utility.java +++ b/src/com/bytezone/diskbrowser/utilities/Utility.java @@ -14,20 +14,6 @@ public class Utility public static final List suffixes = Arrays.asList ("po", "dsk", "do", "hdv", "2mg", "v2d", "d13", "sdk", "woz"); - // not used - it doesn't work with Oracle's JDK - // private static boolean hasRetinaDisplay () - // { - // Object obj = - // Toolkit.getDefaultToolkit ().getDesktopProperty ("apple.awt.contentScaleFactor"); - // if (obj instanceof Float) - // { - // Float f = (Float) obj; - // int scale = f.intValue (); - // return (scale == 2); // 1 indicates a regular mac display. - // } - // return false; - // } - // ---------------------------------------------------------------------------------// public static boolean test (Graphics2D g) // ---------------------------------------------------------------------------------// @@ -57,19 +43,27 @@ public class Utility // ---------------------------------------------------------------------------------// { for (int i = 0; i < buffer.length; i++) - { - if (buffer[i] == key[0]) + if (matches (buffer, i, key)) { - if (matches (buffer, i, key)) - { - System.out.printf ("Matches at %04X%n", i); - return true; - } + System.out.printf ("Matches at %04X%n", i); + return true; } - } + return false; } + // ---------------------------------------------------------------------------------// + public static boolean matches (byte[] buffer, int offset, byte[] key) + // ---------------------------------------------------------------------------------// + { + int ptr = 0; + while (offset < buffer.length && ptr < key.length) + if (buffer[offset++] != key[ptr++]) + return false; + + return true; + } + // ---------------------------------------------------------------------------------// public static LocalDateTime getDateTime (byte[] buffer, int ptr) // ---------------------------------------------------------------------------------// @@ -90,18 +84,6 @@ public class Utility } } - // ---------------------------------------------------------------------------------// - public static boolean matches (byte[] buffer, int offset, byte[] key) - // ---------------------------------------------------------------------------------// - { - int ptr = 0; - while (offset < buffer.length && ptr < key.length) - if (buffer[offset++] != key[ptr++]) - return false; - - return true; - } - // ---------------------------------------------------------------------------------// public static int getSuffixNo (String filename) // ---------------------------------------------------------------------------------//