mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-22 02:06:06 +00:00
Changed #2206 FB values in MATRIX (scale/rotate) as floats instead of int, -f suffixed parameters in text editor
This commit is contained in:
@@ -1929,15 +1929,15 @@ public class SWFInputStream implements AutoCloseable {
|
||||
ret.hasScale = readUB(1, "hasScale") == 1;
|
||||
if (ret.hasScale) {
|
||||
int NScaleBits = (int) readUB(5, "NScaleBits");
|
||||
ret.scaleX = (int) readSB(NScaleBits, "scaleX");
|
||||
ret.scaleY = (int) readSB(NScaleBits, "scaleY");
|
||||
ret.scaleX = readFB(NScaleBits, "scaleX");
|
||||
ret.scaleY = readFB(NScaleBits, "scaleY");
|
||||
ret.nScaleBits = NScaleBits;
|
||||
}
|
||||
ret.hasRotate = readUB(1, "hasRotate") == 1;
|
||||
if (ret.hasRotate) {
|
||||
int NRotateBits = (int) readUB(5, "NRotateBits");
|
||||
ret.rotateSkew0 = (int) readSB(NRotateBits, "rotateSkew0");
|
||||
ret.rotateSkew1 = (int) readSB(NRotateBits, "rotateSkew1");
|
||||
ret.rotateSkew0 = readFB(NRotateBits, "rotateSkew0");
|
||||
ret.rotateSkew1 = readFB(NRotateBits, "rotateSkew1");
|
||||
ret.nRotateBits = NRotateBits;
|
||||
}
|
||||
int NTranslateBits = (int) readUB(5, "NTranslateBits");
|
||||
|
||||
@@ -650,30 +650,30 @@ public class SWFOutputStream extends OutputStream {
|
||||
writeUB(1, value.hasScale ? 1 : 0);
|
||||
if (value.hasScale) {
|
||||
int nBits = 0;
|
||||
nBits = enlargeBitCountS(nBits, value.scaleX);
|
||||
nBits = enlargeBitCountS(nBits, value.scaleY);
|
||||
nBits = enlargeBitCountS(nBits, value.getScaleXInteger());
|
||||
nBits = enlargeBitCountS(nBits, value.getScaleYInteger());
|
||||
|
||||
if (Configuration._debugCopy.get()) {
|
||||
nBits = Math.max(nBits, value.nScaleBits);
|
||||
}
|
||||
|
||||
writeUB(5, nBits);
|
||||
writeSB(nBits, value.scaleX);
|
||||
writeSB(nBits, value.scaleY);
|
||||
writeFB(nBits, value.scaleX);
|
||||
writeFB(nBits, value.scaleY);
|
||||
}
|
||||
writeUB(1, value.hasRotate ? 1 : 0);
|
||||
if (value.hasRotate) {
|
||||
int nBits = 0;
|
||||
nBits = enlargeBitCountS(nBits, value.rotateSkew0);
|
||||
nBits = enlargeBitCountS(nBits, value.rotateSkew1);
|
||||
nBits = enlargeBitCountS(nBits, value.getRotateSkew0Integer());
|
||||
nBits = enlargeBitCountS(nBits, value.getRotateSkew1Integer());
|
||||
|
||||
if (Configuration._debugCopy.get()) {
|
||||
nBits = Math.max(nBits, value.nRotateBits);
|
||||
}
|
||||
|
||||
writeUB(5, nBits);
|
||||
writeSB(nBits, value.rotateSkew0);
|
||||
writeSB(nBits, value.rotateSkew1);
|
||||
writeFB(nBits, value.rotateSkew0);
|
||||
writeFB(nBits, value.rotateSkew1);
|
||||
}
|
||||
int NTranslateBits = 0;
|
||||
NTranslateBits = enlargeBitCountS(NTranslateBits, value.translateX);
|
||||
|
||||
@@ -474,10 +474,10 @@ public final class Matrix implements Cloneable {
|
||||
result.translateY = (int) translateY;
|
||||
result.hasRotate = true;
|
||||
result.hasScale = true;
|
||||
result.scaleX = fromFloat(scaleX);
|
||||
result.scaleY = fromFloat(scaleY);
|
||||
result.rotateSkew0 = fromFloat(rotateSkew0);
|
||||
result.rotateSkew1 = fromFloat(rotateSkew1);
|
||||
result.scaleX = (float) scaleX;
|
||||
result.scaleY = (float) scaleY;
|
||||
result.rotateSkew0 = (float) rotateSkew0;
|
||||
result.rotateSkew1 = (float) rotateSkew1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,12 +242,12 @@ public abstract class StaticTextTag extends TextTag {
|
||||
writer.append("translatey ").append(textMatrix.translateY).newLine();
|
||||
}
|
||||
if (textMatrix.hasScale) {
|
||||
writer.append("scalex ").append(textMatrix.scaleX).newLine();
|
||||
writer.append("scaley ").append(textMatrix.scaleY).newLine();
|
||||
writer.append("scalexf ").append(textMatrix.scaleX).newLine();
|
||||
writer.append("scaleyf ").append(textMatrix.scaleY).newLine();
|
||||
}
|
||||
if (textMatrix.hasRotate) {
|
||||
writer.append("rotateskew0 ").append(textMatrix.rotateSkew0).newLine();
|
||||
writer.append("rotateskew1 ").append(textMatrix.rotateSkew1).newLine();
|
||||
writer.append("rotateskew0f ").append(textMatrix.rotateSkew0).newLine();
|
||||
writer.append("rotateskew1f ").append(textMatrix.rotateSkew1).newLine();
|
||||
}
|
||||
writer.append("]");
|
||||
int textHeight = 12;
|
||||
@@ -433,7 +433,7 @@ public abstract class StaticTextTag extends TextTag {
|
||||
break;
|
||||
case "scalex":
|
||||
try {
|
||||
textMatrix.scaleX = Integer.parseInt(paramValue);
|
||||
textMatrix.scaleX = MATRIX.toFloat(Integer.parseInt(paramValue));
|
||||
textMatrix.hasScale = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid scalex value - number expected. Found: " + paramValue, lexer.yyline());
|
||||
@@ -441,15 +441,33 @@ public abstract class StaticTextTag extends TextTag {
|
||||
break;
|
||||
case "scaley":
|
||||
try {
|
||||
textMatrix.scaleY = Integer.parseInt(paramValue);
|
||||
textMatrix.scaleY = MATRIX.toFloat(Integer.parseInt(paramValue));
|
||||
textMatrix.hasScale = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid scalex value - number expected. Found: " + paramValue, lexer.yyline());
|
||||
throw new TextParseException("Invalid scaley value - number expected. Found: " + paramValue, lexer.yyline());
|
||||
}
|
||||
break;
|
||||
|
||||
case "scalexf":
|
||||
try {
|
||||
textMatrix.scaleX = Float.parseFloat(paramValue);
|
||||
textMatrix.hasScale = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid scalexf value - float number expected. Found: " + paramValue, lexer.yyline());
|
||||
}
|
||||
break;
|
||||
case "scaleyf":
|
||||
try {
|
||||
textMatrix.scaleY = Float.parseFloat(paramValue);
|
||||
textMatrix.hasScale = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid scaleyf value - float number expected. Found: " + paramValue, lexer.yyline());
|
||||
}
|
||||
break;
|
||||
|
||||
case "rotateskew0":
|
||||
try {
|
||||
textMatrix.rotateSkew0 = Integer.parseInt(paramValue);
|
||||
textMatrix.rotateSkew0 = MATRIX.toFloat(Integer.parseInt(paramValue));
|
||||
textMatrix.hasRotate = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid rotateskew0 value - number expected. Found: " + paramValue, lexer.yyline());
|
||||
@@ -457,12 +475,28 @@ public abstract class StaticTextTag extends TextTag {
|
||||
break;
|
||||
case "rotateskew1":
|
||||
try {
|
||||
textMatrix.rotateSkew1 = Integer.parseInt(paramValue);
|
||||
textMatrix.rotateSkew1 = MATRIX.toFloat(Integer.parseInt(paramValue));
|
||||
textMatrix.hasRotate = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid rotateskew1 value - number expected. Found: " + paramValue, lexer.yyline());
|
||||
}
|
||||
break;
|
||||
case "rotateskew0f":
|
||||
try {
|
||||
textMatrix.rotateSkew0 = Float.parseFloat(paramValue);
|
||||
textMatrix.hasRotate = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid rotateskew0 value - float number expected. Found: " + paramValue, lexer.yyline());
|
||||
}
|
||||
break;
|
||||
case "rotateskew1f":
|
||||
try {
|
||||
textMatrix.rotateSkew1 = Float.parseFloat(paramValue);
|
||||
textMatrix.hasRotate = true;
|
||||
} catch (NumberFormatException nfe) {
|
||||
throw new TextParseException("Invalid rotateskew1 value - float number expected. Found: " + paramValue, lexer.yyline());
|
||||
}
|
||||
break;
|
||||
case "translatex":
|
||||
try {
|
||||
textMatrix.translateX = Integer.parseInt(paramValue);
|
||||
|
||||
@@ -40,14 +40,14 @@ public class MATRIX implements Serializable {
|
||||
*/
|
||||
@Conditional("hasScale")
|
||||
@SWFType(value = BasicType.FB, countField = "nScaleBits")
|
||||
public int scaleX;
|
||||
public float scaleX;
|
||||
|
||||
/**
|
||||
* Y scale value
|
||||
*/
|
||||
@Conditional("hasScale")
|
||||
@SWFType(value = BasicType.FB, countField = "nScaleBits")
|
||||
public int scaleY;
|
||||
public float scaleY;
|
||||
|
||||
/**
|
||||
* Has rotate and skew values
|
||||
@@ -59,14 +59,14 @@ public class MATRIX implements Serializable {
|
||||
*/
|
||||
@Conditional("hasRotate")
|
||||
@SWFType(value = BasicType.FB, countField = "nRotateBits")
|
||||
public int rotateSkew0;
|
||||
public float rotateSkew0;
|
||||
|
||||
/**
|
||||
* Second rotate and skew value
|
||||
*/
|
||||
@Conditional("hasRotate")
|
||||
@SWFType(value = BasicType.FB, countField = "nRotateBits")
|
||||
public int rotateSkew1;
|
||||
public float rotateSkew1;
|
||||
|
||||
/**
|
||||
* X translate value in twips
|
||||
@@ -114,14 +114,14 @@ public class MATRIX implements Serializable {
|
||||
return "[MATRIX scale:" + getScaleXFloat() + "," + getScaleYFloat() + ", rotate:" + getRotateSkew0Float() + "," + getRotateSkew1Float() + ", translate:" + translateX + "," + translateY + "]";
|
||||
}
|
||||
|
||||
private float toFloat(int i) {
|
||||
public static float toFloat(int i) {
|
||||
return ((float) i) / (1 << 16);
|
||||
}
|
||||
|
||||
public Point apply(Point p) {
|
||||
Point ret = new Point();
|
||||
ret.x = (int) (p.x * (hasScale ? toFloat(scaleX) : 1) + p.y * (hasRotate ? toFloat(rotateSkew1) : 0) + translateX);
|
||||
ret.y = (int) (p.x * (hasRotate ? toFloat(rotateSkew0) : 0) + p.y * (hasScale ? toFloat(scaleY) : 1) + translateY);
|
||||
ret.x = (int) (p.x * (hasScale ? scaleX : 1) + p.y * (hasRotate ? rotateSkew1 : 0) + translateX);
|
||||
ret.y = (int) (p.x * (hasRotate ? rotateSkew0 : 0) + p.y * (hasScale ? scaleY : 1) + translateY);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -135,37 +135,41 @@ public class MATRIX implements Serializable {
|
||||
return new RECT(Xmin, Xmax, Ymin, Ymax);
|
||||
|
||||
}
|
||||
|
||||
public int getRotateSkew0() {
|
||||
return hasRotate ? rotateSkew0 : 0;
|
||||
|
||||
private int fromFloat(double f) {
|
||||
return (int) (f * (1 << 16));
|
||||
}
|
||||
|
||||
public int getRotateSkew1() {
|
||||
return hasRotate ? rotateSkew1 : 0;
|
||||
public int getRotateSkew0Integer() {
|
||||
return hasRotate ? fromFloat(rotateSkew0) : 0;
|
||||
}
|
||||
|
||||
public int getRotateSkew1Integer() {
|
||||
return hasRotate ? fromFloat(rotateSkew1) : 0;
|
||||
}
|
||||
|
||||
public float getRotateSkew0Float() {
|
||||
return (hasRotate ? toFloat(rotateSkew0) : 0);
|
||||
return (hasRotate ? rotateSkew0 : 0);
|
||||
}
|
||||
|
||||
public float getRotateSkew1Float() {
|
||||
return (hasRotate ? toFloat(rotateSkew1) : 0);
|
||||
return (hasRotate ? rotateSkew1 : 0);
|
||||
}
|
||||
|
||||
public float getScaleXFloat() {
|
||||
return (hasScale ? toFloat(scaleX) : 1);
|
||||
return (hasScale ? scaleX : 1);
|
||||
}
|
||||
|
||||
public float getScaleYFloat() {
|
||||
return (hasScale ? toFloat(scaleY) : 1);
|
||||
return (hasScale ? scaleY : 1);
|
||||
}
|
||||
|
||||
public int getScaleX() {
|
||||
return (hasScale ? (scaleX) : (1 << 16));
|
||||
public int getScaleXInteger() {
|
||||
return (hasScale ? fromFloat(scaleX) : (1 << 16));
|
||||
}
|
||||
|
||||
public int getScaleY() {
|
||||
return (hasScale ? (scaleY) : (1 << 16));
|
||||
public int getScaleYInteger() {
|
||||
return (hasScale ? fromFloat(scaleY) : (1 << 16));
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
@@ -175,10 +179,10 @@ public class MATRIX implements Serializable {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 37 * hash + getScaleX();
|
||||
hash = 37 * hash + getScaleY();
|
||||
hash = 37 * hash + getRotateSkew0();
|
||||
hash = 37 * hash + getRotateSkew1();
|
||||
hash = 37 * hash + getScaleXInteger();
|
||||
hash = 37 * hash + getScaleYInteger();
|
||||
hash = 37 * hash + getRotateSkew0Integer();
|
||||
hash = 37 * hash + getRotateSkew1Integer();
|
||||
hash = 37 * hash + translateX;
|
||||
hash = 37 * hash + translateY;
|
||||
return hash;
|
||||
@@ -193,16 +197,16 @@ public class MATRIX implements Serializable {
|
||||
return false;
|
||||
}
|
||||
final MATRIX other = (MATRIX) obj;
|
||||
if (getScaleX() != other.getScaleX()) {
|
||||
if (getScaleXInteger() != other.getScaleXInteger()) {
|
||||
return false;
|
||||
}
|
||||
if (getScaleY() != other.getScaleY()) {
|
||||
if (getScaleYInteger() != other.getScaleYInteger()) {
|
||||
return false;
|
||||
}
|
||||
if (getRotateSkew0() != other.getRotateSkew0()) {
|
||||
if (getRotateSkew0Integer() != other.getRotateSkew0Integer()) {
|
||||
return false;
|
||||
}
|
||||
if (getRotateSkew1() != other.getRotateSkew1()) {
|
||||
if (getRotateSkew1Integer() != other.getRotateSkew1Integer()) {
|
||||
return false;
|
||||
}
|
||||
if (translateX != other.translateX) {
|
||||
|
||||
@@ -132,10 +132,10 @@ public class MORPHFILLSTYLE implements NeedsCharacters, Serializable {
|
||||
}
|
||||
MATRIX ret = new MATRIX();
|
||||
double ratio_d = ratio / 65535.0;
|
||||
ret.scaleX = (int) Math.round(a.getScaleX() + (b.getScaleX() - a.getScaleX()) * ratio_d);
|
||||
ret.scaleY = (int) Math.round(a.getScaleY() + (b.getScaleY() - a.getScaleY()) * ratio_d);
|
||||
ret.rotateSkew0 = (int) Math.round(a.getRotateSkew0() + (b.getRotateSkew0() - a.getRotateSkew0()) * ratio_d);
|
||||
ret.rotateSkew1 = (int) Math.round(a.getRotateSkew1() + (b.getRotateSkew1() - a.getRotateSkew1()) * ratio_d);
|
||||
ret.scaleX = MATRIX.toFloat((int) Math.round(a.getScaleXInteger() + (b.getScaleXInteger() - a.getScaleXInteger()) * ratio_d));
|
||||
ret.scaleY = MATRIX.toFloat((int) Math.round(a.getScaleYInteger() + (b.getScaleYInteger() - a.getScaleYInteger()) * ratio_d));
|
||||
ret.rotateSkew0 = MATRIX.toFloat((int) Math.round(a.getRotateSkew0Integer() + (b.getRotateSkew0Integer() - a.getRotateSkew0Integer()) * ratio_d));
|
||||
ret.rotateSkew1 = MATRIX.toFloat((int) Math.round(a.getRotateSkew1Integer() + (b.getRotateSkew1Integer() - a.getRotateSkew1Integer()) * ratio_d));
|
||||
ret.translateX = (int) Math.round(a.translateX + (b.translateX - a.translateX) * ratio_d);
|
||||
ret.translateY = (int) Math.round(a.translateY + (b.translateY - a.translateY) * ratio_d);
|
||||
ret.hasRotate = true;
|
||||
|
||||
Reference in New Issue
Block a user