// Copyright 2001, FreeHEP.
package org.freehep.graphicsio.swf;
import java.awt.geom.AffineTransform;
import java.io.IOException;
/**
* SWF Button Record
*
* @author Mark Donszelmann
* @author Charles Loomis
* @version $Id: ButtonRecord.java 8584 2006-08-10 23:06:37Z duns $
*/
public class ButtonRecord {
public final static int UP = 0x01;
public final static int OVER = 0x02;
public final static int DOWN = 0x04;
public final static int HIT = 0x08;
private boolean hitTest;
private boolean down;
private boolean over;
private boolean up;
private int id;
private int depth;
private AffineTransform matrix;
private ColorXform cxform;
public ButtonRecord(boolean hitTest, boolean down, boolean over,
boolean up, int id, int depth, AffineTransform matrix,
ColorXform cxform) {
this.hitTest = hitTest;
this.down = down;
this.over = over;
this.up = up;
this.id = id;
this.depth = depth;
this.matrix = matrix;
this.cxform = cxform;
}
public ButtonRecord(boolean hitTest, boolean down, boolean over,
boolean up, int id, int depth, AffineTransform matrix) {
this(hitTest, down, over, up, id, depth, matrix, null);
}
public ButtonRecord(SWFInputStream input, boolean hasColorXform)
throws IOException {
/* int reserved = (int) */ input.readUBits(4);
hitTest = input.readBitFlag();
down = input.readBitFlag();
over = input.readBitFlag();
up = input.readBitFlag();
if (isEndRecord())
return;
id = input.readUnsignedShort();
depth = input.readUnsignedShort();
matrix = input.readMatrix();
if (hasColorXform) {
cxform = new ColorXform(input, true);
} else {
// NOTE: it may be just alignment, FREEHEP-535
input.readUnsignedByte();
}
}
public void write(SWFOutputStream swf) throws IOException {
swf.writeUBits(0, 4);
swf.writeBitFlag(hitTest);
swf.writeBitFlag(down);
swf.writeBitFlag(over);
swf.writeBitFlag(up);
swf.writeUnsignedShort(id);
swf.writeUnsignedShort(depth);
swf.writeMatrix(matrix);
if (cxform != null) {
cxform.write(swf, true);
} else {
// NOTE: it may be just alignment, FREEHEP-535
swf.writeUnsignedByte(0);
}
}
public boolean isEndRecord() {
return !(hitTest || down || over || up);
}
public String toString() {
return "ButtonRecord char:" + id + " depth:" + depth + " " + matrix
+ " " + ((cxform != null) ? "" + cxform : "");
}
}