dmolony-DiskBrowser/src/com/bytezone/diskbrowser/applefile/CharacterList.java

124 lines
3.9 KiB
Java
Raw Normal View History

2019-11-01 23:29:36 +00:00
package com.bytezone.diskbrowser.applefile;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
2019-11-02 03:06:57 +00:00
import java.awt.image.DataBuffer;
2019-11-01 23:29:36 +00:00
import java.util.ArrayList;
import java.util.List;
2019-11-07 03:06:09 +00:00
import com.bytezone.diskbrowser.utilities.Utility;
2019-11-02 06:56:06 +00:00
// -----------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
abstract class CharacterList extends AbstractFile
2019-11-02 06:56:06 +00:00
// -----------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
{
static final int borderX = 3;
static final int borderY = 3;
static final int gapX = 3;
static final int gapY = 3;
static final int sizeX = 7;
static final int sizeY = 8;
List<Character> characters = new ArrayList<> ();
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
public CharacterList (String name, byte[] buffer, int charsX, int charsY)
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
{
this (name, buffer, charsX, charsY, 0);
}
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
public CharacterList (String name, byte[] buffer, int charsX, int charsY, int offset)
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
{
super (name, buffer);
2019-11-07 03:06:09 +00:00
image = new BufferedImage ( //
Utility.dimension (charsX, borderX, sizeX, gapX), //
Utility.dimension (charsY, borderY, sizeY, gapY), //
2019-11-01 23:29:36 +00:00
BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = image.createGraphics ();
g2d.setComposite (AlphaComposite.getInstance (AlphaComposite.SRC_OVER, (float) 1.0));
if (false) // show gaps around the glyphs
{
g2d.setColor (new Color (245, 245, 245)); // match background
g2d.fillRect (0, 0, image.getWidth (), image.getHeight ());
}
int x = borderX;
int y = borderY;
int count = 0;
int ptr = offset;
while (ptr < buffer.length)
{
Character c = createCharacter (buffer, ptr);
characters.add (c);
ptr += sizeY;
g2d.drawImage (c.image, x, y, null);
if (++count % charsX == 0)
{
x = borderX;
y += sizeY + gapY;
}
else
x += sizeX + gapX;
}
g2d.dispose ();
}
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
abstract Character createCharacter (byte[] buffer, int ptr);
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-02 03:06:57 +00:00
@Override
public String getText ()
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-02 03:06:57 +00:00
{
StringBuilder text = new StringBuilder ("Name : " + name + "\n\n");
for (Character character : characters)
{
text.append (character);
text.append ("\n");
}
return text.toString ();
}
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
class Character
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
{
2019-11-02 03:06:57 +00:00
BufferedImage image = new BufferedImage (sizeX, sizeY, BufferedImage.TYPE_BYTE_GRAY);
2019-11-01 23:29:36 +00:00
2019-11-02 06:56:06 +00:00
// -------------------------------------------------------------------------------//
2019-11-02 03:06:57 +00:00
@Override
public String toString ()
2019-11-02 06:56:06 +00:00
// -------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
{
2019-11-02 03:06:57 +00:00
StringBuilder text = new StringBuilder ();
DataBuffer dataBuffer = image.getRaster ().getDataBuffer ();
int element = 0;
for (int i = 0; i < sizeY; i++)
{
for (int j = 0; j < sizeX; j++)
text.append (dataBuffer.getElem (element++) == 0 ? "." : "X");
text.append ("\n");
}
return text.toString ();
2019-11-01 23:29:36 +00:00
}
}
}