Sketcher2 source code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.5 KiB

package com.jotuntech.sketcher.common;
import java.awt.Point;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class BitmapUndoData extends HashMap<Point, BitmapTileDiff> implements UndoData {
protected Iterator<Entry<Point, BitmapTileDiff>> tileIterator = null;
protected static DiffPacker packer;
protected static DiffUnpacker unpacker;
public void reset() {
tileIterator = null;
}
public byte[] encode() {
if(tileIterator == null) {
tileIterator = entrySet().iterator();
}
if(tileIterator.hasNext()) {
Entry<Point, BitmapTileDiff> e = tileIterator.next();
Point p = e.getKey();
BitmapTileDiff btd = e.getValue();
byte[] encoded = new byte[BitmapTile.SIZE * BitmapTile.SIZE * 8 + 2];
int offset = 0;
encoded[offset++] = (byte) p.x;
encoded[offset++] = (byte) p.y;
if(packer == null) {
packer = new DiffPacker();
}
packer.pack(btd.diffAlpha, btd.diffRed, btd.diffGreen, btd.diffBlue, encoded, offset, encoded.length - offset);
return encoded;
} else {
tileIterator = null;
return null;
}
}
public void decode(byte[] in) {
int offset = 0;
int x = 0xFF & in[offset++];
int y = 0xFF & in[offset++];
Point p = new Point(x, y);
BitmapTileDiff btd = new BitmapTileDiff();
if(unpacker == null) {
unpacker = new DiffUnpacker();
}
unpacker.unpack(in, offset, in.length - offset, btd.diffAlpha, btd.diffRed, btd.diffGreen, btd.diffBlue);
put(p, btd);
}
}