package pt.tumba.parser.swf; import java.io.IOException; /** * Description of the Class * *@author unknown *@created 15 de Setembro de 2002 */ public class Matrix { /** * Description of the Field */ protected double scaleX = 1.0; /** * Description of the Field */ protected double scaleY = 1.0; /** * Description of the Field */ protected double skew0 = 0.0; /** * Description of the Field */ protected double skew1 = 0.0; /** * Description of the Field */ protected double translateX = 0.0; /** * Description of the Field */ protected double translateY = 0.0; /** * Gets the scaleX attribute of the Matrix object * *@return The scaleX value */ public double getScaleX() { return scaleX; } /** * Gets the scaleY attribute of the Matrix object * *@return The scaleY value */ public double getScaleY() { return scaleY; } /** * Gets the skew0 attribute of the Matrix object * *@return The skew0 value */ public double getSkew0() { return skew0; } /** * Gets the skew1 attribute of the Matrix object * *@return The skew1 value */ public double getSkew1() { return skew1; } /** * Gets the translateX attribute of the Matrix object * *@return The translateX value */ public double getTranslateX() { return translateX; } /** * Gets the translateY attribute of the Matrix object * *@return The translateY value */ public double getTranslateY() { return translateY; } /** * Sets the scaleX attribute of the Matrix object * *@param scaleX The new scaleX value */ public void setScaleX(double scaleX) { this.scaleX = scaleX; } /** * Sets the scaleY attribute of the Matrix object * *@param scaleY The new scaleY value */ public void setScaleY(double scaleY) { this.scaleY = scaleY; } /** * Sets the skew0 attribute of the Matrix object * *@param skew0 The new skew0 value */ public void setSkew0(double skew0) { this.skew0 = skew0; } /** * Sets the skew1 attribute of the Matrix object * *@param skew1 The new skew1 value */ public void setSkew1(double skew1) { this.skew1 = skew1; } /** * Sets the translateX attribute of the Matrix object * *@param translateX The new translateX value */ public void setTranslateX(double translateX) { this.translateX = translateX; } /** * Sets the translateY attribute of the Matrix object * *@param translateY The new translateY value */ public void setTranslateY(double translateY) { this.translateY = translateY; } /** * An identity matrix */ public Matrix() { this(1.0, 1.0, 0.0, 0.0, 0, 0); } /** * Constructor for the Matrix object * *@param translateX Description of the Parameter *@param translateY Description of the Parameter */ public Matrix(double translateX, double translateY) { this(1.0, 1.0, 0.0, 0.0, translateX, translateY); } /** * Copy another matrix * *@param copy Description of the Parameter */ public Matrix(Matrix copy) { if (copy == null) { return; } scaleX = copy.scaleX; scaleY = copy.scaleY; skew0 = copy.skew0; skew1 = copy.skew1; translateX = copy.translateX; translateY = copy.translateY; } /** * Constructor for the Matrix object * *@param scaleX Description of the Parameter *@param scaleY Description of the Parameter *@param skew0 Description of the Parameter *@param skew1 Description of the Parameter *@param translateX Description of the Parameter *@param translateY Description of the Parameter */ public Matrix(double scaleX, double scaleY, double skew0, double skew1, double translateX, double translateY) { this.scaleX = scaleX; this.scaleY = scaleY; this.skew0 = skew0; this.skew1 = skew1; this.translateX = translateX; this.translateY = translateY; } /** * Constructor for the Matrix object * *@param in Description of the Parameter *@exception IOException Description of the Exception */ public Matrix(InStream in) throws IOException { in.synchBits(); if (in.readUBits(1) == 1) { //has scale values int scaleBits = (int) in.readUBits(5); scaleX = ((double) in.readSBits(scaleBits)) / 65536.0; scaleY = ((double) in.readSBits(scaleBits)) / 65536.0; } if (in.readUBits(1) == 1) { //has rotate/skew values int skewBits = (int) in.readUBits(5); skew0 = ((double) in.readSBits(skewBits)) / 65536.0; skew1 = ((double) in.readSBits(skewBits)) / 65536.0; } int translateBits = (int) in.readUBits(5); translateX = in.readSBits(translateBits); translateY = in.readSBits(translateBits); } /** * Description of the Method * *@param out Description of the Parameter *@exception IOException Description of the Exception */ public void write(OutStream out) throws IOException { out.flushBits(); if (scaleX != 1.0 || scaleY != 1.0) { //if non-default values int intScaleX = (int) (scaleX * 65536.0); int intScaleY = (int) (scaleY * 65536.0); int scaleBits = OutStream.determineSignedBitSize(intScaleX); int scaleBits2 = OutStream.determineSignedBitSize(intScaleY); if (scaleBits < scaleBits2) { scaleBits = scaleBits2; } out.writeUBits(1, 1); out.writeUBits(5, scaleBits); out.writeSBits(scaleBits, intScaleX); out.writeSBits(scaleBits, intScaleY); } else { out.writeUBits(1, 0); } if (skew0 != 0.0 || skew1 != 0.0) { //if non-default values int intSkew0 = (int) (skew0 * 65536.0); int intSkew1 = (int) (skew1 * 65536.0); int skewBits = OutStream.determineSignedBitSize(intSkew0); int skewBits2 = OutStream.determineSignedBitSize(intSkew1); if (skewBits < skewBits2) { skewBits = skewBits2; } out.writeUBits(1, 1); out.writeUBits(5, skewBits); out.writeSBits(skewBits, intSkew0); out.writeSBits(skewBits, intSkew1); } else { out.writeUBits(1, 0); } if (translateX == 0 && translateY == 0) { out.writeUBits(5, 0); } else { int translateBits = OutStream.determineSignedBitSize((int) translateX); int translateBits2 = OutStream.determineSignedBitSize((int) translateY); if (translateBits < translateBits2) { translateBits = translateBits2; } out.writeUBits(5, translateBits); out.writeSBits(translateBits, (int) translateX); out.writeSBits(translateBits, (int) translateY); } out.flushBits(); } /** * Description of the Method * *@return Description of the Return Value */ public String toString() { return " Matrix(sx,sy,s0,s1,tx,ty)=(" + scaleX + "," + scaleY + "," + skew0 + "," + skew1 + "," + translateX + "," + translateY + ")"; } }