diff --git a/CHANGELOG.md b/CHANGELOG.md index 5447983f4..9b536b138 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ All notable changes to this project will be documented in this file. ### Changed - [#2185] MochiCrypt no longer offered for auto decrypt, user needs to choose variant from "Use unpacker" menu +- [#2206] FB values in MATRIX (scale/rotate) as floats instead of int, -f suffixed parameters in text editor ## [20.1.0] - 2023-12-30 ### Added @@ -3383,6 +3384,7 @@ Major version of SWF to XML export changed to 2. [#2176]: https://www.free-decompiler.com/flash/issues/2176 [#2179]: https://www.free-decompiler.com/flash/issues/2179 [#2185]: https://www.free-decompiler.com/flash/issues/2185 +[#2206]: https://www.free-decompiler.com/flash/issues/2206 [#2149]: https://www.free-decompiler.com/flash/issues/2149 [#2172]: https://www.free-decompiler.com/flash/issues/2172 [#2174]: https://www.free-decompiler.com/flash/issues/2174 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java index 1a3ca32bf..0faa17c08 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -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"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java index cfc244081..f404b80fa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java @@ -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); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java index aa2b45d63..4f97deaa5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java @@ -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; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java index 50c60eddc..f9f2de252 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java @@ -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); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java index 818b46e11..6b2a1108d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java @@ -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) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java index 767060a94..00e4055c9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java @@ -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; diff --git a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java index ff29d13bd..80ad5b6d1 100644 --- a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java @@ -19,12 +19,14 @@ package com.jpexs.decompiler.flash.gui; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.amf.amf3.Amf3Value; import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.gui.generictageditors.Amf3ValueEditor; import com.jpexs.decompiler.flash.gui.generictageditors.BinaryDataEditor; import com.jpexs.decompiler.flash.gui.generictageditors.BooleanEditor; import com.jpexs.decompiler.flash.gui.generictageditors.ChangeListener; import com.jpexs.decompiler.flash.gui.generictageditors.ColorEditor; import com.jpexs.decompiler.flash.gui.generictageditors.EnumEditor; +import com.jpexs.decompiler.flash.gui.generictageditors.FloatEditor; import com.jpexs.decompiler.flash.gui.generictageditors.FullSized; import com.jpexs.decompiler.flash.gui.generictageditors.GenericTagEditor; import com.jpexs.decompiler.flash.gui.generictageditors.NumberEditor; @@ -346,11 +348,12 @@ public class GenericTagTreePanel extends GenericTagPanel { } editor = new EnumEditor(field.getName(), obj, field, index, type, swfType, values); + } else if (type.equals(double.class) || type.equals(Double.class) + || type.equals(float.class) || type.equals(Float.class)) { + editor = new FloatEditor(field.getName(), obj, field, index, type); } else if (type.equals(int.class) || type.equals(Integer.class) || type.equals(short.class) || type.equals(Short.class) - || type.equals(long.class) || type.equals(Long.class) - || type.equals(double.class) || type.equals(Double.class) - || type.equals(float.class) || type.equals(Float.class)) { + || type.equals(long.class) || type.equals(Long.class)) { editor = new NumberEditor(field.getName(), obj, field, index, type, swfType); } else if (type.equals(boolean.class) || type.equals(Boolean.class)) { editor = new BooleanEditor(field.getName(), obj, field, index, type); @@ -904,8 +907,8 @@ public class GenericTagTreePanel extends GenericTagPanel { if (val instanceof byte[]) { valStr += " = " + ((byte[]) val).length + " byte"; } else if (val instanceof ByteArrayRange) { - valStr += " = " + ((ByteArrayRange) val).getLength() + " byte"; - } else { + valStr += " = " + ((ByteArrayRange) val).getLength() + " byte"; + } else { valStr += " = " + colorAdd + val.toString() + enumAdd; } } diff --git a/src/com/jpexs/decompiler/flash/gui/generictageditors/FloatEditor.java b/src/com/jpexs/decompiler/flash/gui/generictageditors/FloatEditor.java new file mode 100644 index 000000000..eace2e554 --- /dev/null +++ b/src/com/jpexs/decompiler/flash/gui/generictageditors/FloatEditor.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2010-2023 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.generictageditors; + +import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.ReflectionTools; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.lang.reflect.Field; +import java.util.Objects; +import javax.swing.JTextField; + +/** + * + * @author JPEXS + */ +public class FloatEditor extends JTextField implements GenericTagEditor { + + private final Object obj; + + private final Field field; + + private final int index; + + private final Class type; + + private String fieldName; + + @Override + public boolean getScrollableTracksViewportWidth() { + return true; + } + + @Override + public Dimension getPreferredSize() { + Dimension ret = super.getPreferredSize(); + ret.width = 300; + return ret; + } + + @Override + public BaselineResizeBehavior getBaselineResizeBehavior() { + return Component.BaselineResizeBehavior.CONSTANT_ASCENT; + } + + @Override + public int getBaseline(int width, int height) { + return 0; + } + + public FloatEditor(String fieldName, Object obj, Field field, int index, Class type) { + this.obj = obj; + this.field = field; + this.index = index; + this.type = type; + this.fieldName = fieldName; + reset(); + } + + @Override + public void reset() { + try { + Object val = ReflectionTools.getValue(obj, field, index); + setText(val == null ? "" : val.toString()); + } catch (IllegalArgumentException | IllegalAccessException ex) { + // ignore + } + } + + @Override + public boolean save() { + try { + String oldValue = (String) EcmaScript.toString(ReflectionTools.getValue(obj, field, index)); + String newValue = getText(); + if (Objects.equals(oldValue, newValue)) { + return false; + } + Object val; + if (type.equals(double.class) || type.equals(Double.class)) { + val = Double.valueOf(getText()); + } else { + val = Float.valueOf(getText()); + } + ReflectionTools.setValue(obj, field, index, val); + } catch (IllegalArgumentException | IllegalAccessException ex) { + // ignore + } + return true; + } + + @Override + public void addChangeListener(final ChangeListener l) { + final GenericTagEditor t = this; + addFocusListener(new FocusAdapter() { + + @Override + public void focusLost(FocusEvent e) { + l.change(t); + } + + }); + } + + @Override + public Object getChangedValue() { + return getText(); + } + + @Override + public String getFieldName() { + return fieldName; + } + + @Override + public Field getField() { + return field; + } + + @Override + public String getReadOnlyValue() { + return Helper.escapeHTML(getChangedValue().toString()); + } + + @Override + public void added() { + + } + + @Override + public void validateValue() { + } + + @Override + public Object getObject() { + return obj; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/generictageditors/NumberEditor.java b/src/com/jpexs/decompiler/flash/gui/generictageditors/NumberEditor.java index 086fa540e..cdab2cafb 100644 --- a/src/com/jpexs/decompiler/flash/gui/generictageditors/NumberEditor.java +++ b/src/com/jpexs/decompiler/flash/gui/generictageditors/NumberEditor.java @@ -141,7 +141,6 @@ public class NumberEditor extends JSpinner implements GenericTagEditor { case FLOAT16: m = new SpinnerNumberModel(toInt(value), -0x8000, 0x7fff, 1); break; - case FB: case SB: long max = 1; if (swfType.count() > 0) { @@ -154,11 +153,6 @@ public class NumberEditor extends JSpinner implements GenericTagEditor { case SI32: m = new SpinnerNumberModel(toDouble(value), -0x80000000, 0x7fffffff, 1); break; - case FLOAT: - case FIXED: - case FIXED8: - m = new SpinnerNumberModel(toDouble(value), -0x80000000, 0x7fffffff, 0.01); - break; } return m; }