mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-05 18:27:25 +00:00
17
CHANGELOG.md
17
CHANGELOG.md
@@ -1,6 +1,15 @@
|
||||
# Change Log
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## [Unreleased]
|
||||
### Fixed
|
||||
- [#1860] FLA export - EmptyStackException during exporting MorphShape
|
||||
- [#1782] FLA export - exporting from SWF files inside bundles (like binarysearch)
|
||||
- Expand correct tree on SWF load
|
||||
- [#1679] FLA export - MorphShapes (shape tween)
|
||||
- [#1860], [#1732], [#1837] FLA export - AS3 - missing framescripts on the timeline
|
||||
- Flash viewer - dropshadow filter hideobject(compositeSource) parameter
|
||||
|
||||
## [16.0.3] - 2022-11-02
|
||||
### Fixed
|
||||
- [#1817] PDF export - now storing JPEG images without recompression to PNG
|
||||
@@ -2326,7 +2335,8 @@ All notable changes to this project will be documented in this file.
|
||||
### Added
|
||||
- Initial public release
|
||||
|
||||
[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.2...dev
|
||||
[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.3...dev
|
||||
[16.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.2...version16.0.3
|
||||
[16.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.1...version16.0.2
|
||||
[16.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version16.0.0...version16.0.1
|
||||
[16.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version15.1.1...version16.0.0
|
||||
@@ -2450,6 +2460,11 @@ All notable changes to this project will be documented in this file.
|
||||
[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9
|
||||
[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8
|
||||
[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7
|
||||
[#1860]: https://www.free-decompiler.com/flash/issues/1860
|
||||
[#1782]: https://www.free-decompiler.com/flash/issues/1782
|
||||
[#1679]: https://www.free-decompiler.com/flash/issues/1679
|
||||
[#1732]: https://www.free-decompiler.com/flash/issues/1732
|
||||
[#1837]: https://www.free-decompiler.com/flash/issues/1837
|
||||
[#1817]: https://www.free-decompiler.com/flash/issues/1817
|
||||
[#1816]: https://www.free-decompiler.com/flash/issues/1816
|
||||
[#1859]: https://www.free-decompiler.com/flash/issues/1859
|
||||
|
||||
@@ -556,8 +556,9 @@ public final class SWF implements SWFContainerItem, Timelined {
|
||||
|
||||
public void computeDependentFrames() {
|
||||
Map<Integer, Set<Integer>> dep = new HashMap<>();
|
||||
for (int i = 0; i < timeline.getFrameCount(); i++) {
|
||||
Frame frame = timeline.getFrame(i);
|
||||
Timeline tim = getTimeline();
|
||||
for (int i = 0; i < tim.getFrameCount(); i++) {
|
||||
Frame frame = tim.getFrame(i);
|
||||
Set<Integer> needed = new HashSet<>();
|
||||
frame.getNeededCharacters(needed);
|
||||
for (Integer needed1 : needed) {
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.types.traits;
|
||||
import com.jpexs.decompiler.flash.abc.ABC;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetLexAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.ThisAVM2Item;
|
||||
@@ -282,7 +283,10 @@ public class TraitClass extends Trait implements TraitWithSlot {
|
||||
if ("addFrameScript".equals(propName.resolvedMultinameName)) {
|
||||
for (int i = 0; i < callProp.arguments.size(); i += 2) {
|
||||
if (callProp.arguments.get(i) instanceof IntegerValueAVM2Item) {
|
||||
if (callProp.arguments.get(i + 1) instanceof GetPropertyAVM2Item) {
|
||||
if (callProp.arguments.get(i + 1) instanceof GetLexAVM2Item) {
|
||||
GetLexAVM2Item lex = (GetLexAVM2Item) callProp.arguments.get(i + 1);
|
||||
frameTraitNames.add(abc.constants.getMultinameId(lex.propertyName, false));
|
||||
} else if (callProp.arguments.get(i + 1) instanceof GetPropertyAVM2Item) {
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) callProp.arguments.get(i + 1);
|
||||
if (getProp.object instanceof ThisAVM2Item) {
|
||||
if (getProp.propertyName instanceof FullMultinameAVM2Item) {
|
||||
|
||||
@@ -230,8 +230,8 @@ public abstract class MorphShapeTag extends DrawableTag {
|
||||
}
|
||||
StyleChangeRecord scr = scr1.clone();
|
||||
if (scr1.stateMoveTo || scr2.stateMoveTo) {
|
||||
scr.moveDeltaX = startPosX + (endPosX - startPosX) * ratio / MAX_RATIO;
|
||||
scr.moveDeltaY = startPosY + (endPosY - startPosY) * ratio / MAX_RATIO;
|
||||
scr.moveDeltaX = startPosX + (int)Math.round((endPosX - startPosX) * ratio / (double)MAX_RATIO);
|
||||
scr.moveDeltaY = startPosY + (int)Math.round((endPosY - startPosY) * ratio / (double)MAX_RATIO);
|
||||
scr.stateMoveTo = scr.moveDeltaX != posX || scr.moveDeltaY != posY;
|
||||
}
|
||||
finalRecords.add(scr);
|
||||
@@ -264,10 +264,10 @@ public abstract class MorphShapeTag extends DrawableTag {
|
||||
continue;
|
||||
}
|
||||
CurvedEdgeRecord cer = new CurvedEdgeRecord();
|
||||
cer.controlDeltaX = cer1.controlDeltaX + (cer2.controlDeltaX - cer1.controlDeltaX) * ratio / MAX_RATIO;
|
||||
cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * ratio / MAX_RATIO;
|
||||
cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * ratio / MAX_RATIO;
|
||||
cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * ratio / MAX_RATIO;
|
||||
cer.controlDeltaX = cer1.controlDeltaX + (int)Math.round((cer2.controlDeltaX - cer1.controlDeltaX) * ratio / (double)MAX_RATIO);
|
||||
cer.controlDeltaY = cer1.controlDeltaY + (int)Math.round((cer2.controlDeltaY - cer1.controlDeltaY) * ratio / (double)MAX_RATIO);
|
||||
cer.anchorDeltaX = cer1.anchorDeltaX + (int)Math.round((cer2.anchorDeltaX - cer1.anchorDeltaX) * ratio / (double)MAX_RATIO);
|
||||
cer.anchorDeltaY = cer1.anchorDeltaY + (int)Math.round((cer2.anchorDeltaY - cer1.anchorDeltaY) * ratio / (double)MAX_RATIO);
|
||||
startPosX += cer1.controlDeltaX + cer1.anchorDeltaX;
|
||||
startPosY += cer1.controlDeltaY + cer1.anchorDeltaY;
|
||||
endPosX += cer2.controlDeltaX + cer2.anchorDeltaX;
|
||||
@@ -290,8 +290,8 @@ public abstract class MorphShapeTag extends DrawableTag {
|
||||
StraightEdgeRecord ser = new StraightEdgeRecord();
|
||||
ser.generalLineFlag = true;
|
||||
ser.vertLineFlag = false;
|
||||
ser.deltaX = ser1.deltaX + (ser2.deltaX - ser1.deltaX) * ratio / MAX_RATIO;
|
||||
ser.deltaY = ser1.deltaY + (ser2.deltaY - ser1.deltaY) * ratio / MAX_RATIO;
|
||||
ser.deltaX = ser1.deltaX + (int)Math.round((ser2.deltaX - ser1.deltaX) * ratio / (double)MAX_RATIO);
|
||||
ser.deltaY = ser1.deltaY + (int)Math.round((ser2.deltaY - ser1.deltaY) * ratio / (double)MAX_RATIO);
|
||||
startPosX += ser1.deltaX;
|
||||
startPosY += ser1.deltaY;
|
||||
endPosX += ser2.deltaX;
|
||||
@@ -307,7 +307,7 @@ public abstract class MorphShapeTag extends DrawableTag {
|
||||
shape.shapeRecords = finalRecords;
|
||||
return shape;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getUsedParameters() {
|
||||
return PARAMETER_RATIO;
|
||||
|
||||
@@ -93,7 +93,7 @@ public class DROPSHADOWFILTER extends FILTER {
|
||||
|
||||
@Override
|
||||
public SerializableImage apply(SerializableImage src, double zoom) {
|
||||
return Filtering.dropShadow(src, (int) Math.round(blurX * zoom), (int) Math.round(blurY * zoom), (int) (angle * 180 / Math.PI), distance * zoom, dropShadowColor.toColor(), innerShadow, passes, strength, knockout);
|
||||
return Filtering.dropShadow(src, (int) Math.round(blurX * zoom), (int) Math.round(blurY * zoom), (int) (angle * 180 / Math.PI), distance * zoom, dropShadowColor.toColor(), innerShadow, passes, strength, knockout, compositeSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -286,8 +286,8 @@ public class Filtering {
|
||||
BufferedImage shadowInner = null;
|
||||
BufferedImage hilightInner = null;
|
||||
if (type != OUTER) {
|
||||
BufferedImage hilightIm = dropShadow(src, 0, 0, angle, distance, Color.red, true, iterations, strength, true);//new DropShadowFilter(blurX, blurY, strength, inner ? highlightColor : shadowColor, angle, distance, inner, true, iterations).filter(src
|
||||
BufferedImage shadowIm = dropShadow(src, 0, 0, angle + 180, distance, Color.blue, true, iterations, strength, true); //new DropShadowFilter(blurX, blurY, strength, inner ? shadowColor : highlightColor, angle + 180, distance, inner, true, iterations).filter(src);
|
||||
BufferedImage hilightIm = dropShadow(src, 0, 0, angle, distance, Color.red, true, iterations, strength, true, true);//new DropShadowFilter(blurX, blurY, strength, inner ? highlightColor : shadowColor, angle, distance, inner, true, iterations).filter(src
|
||||
BufferedImage shadowIm = dropShadow(src, 0, 0, angle + 180, distance, Color.blue, true, iterations, strength, true, true); //new DropShadowFilter(blurX, blurY, strength, inner ? shadowColor : highlightColor, angle + 180, distance, inner, true, iterations).filter(src);
|
||||
BufferedImage h2 = new BufferedImage(width, height, src.getType());
|
||||
BufferedImage s2 = new BufferedImage(width, height, src.getType());
|
||||
Graphics2D hc = h2.createGraphics();
|
||||
@@ -306,8 +306,8 @@ public class Filtering {
|
||||
BufferedImage shadowOuter = null;
|
||||
BufferedImage hilightOuter = null;
|
||||
if (type != INNER) {
|
||||
BufferedImage hilightIm = dropShadow(src, 0, 0, angle + 180, distance, Color.red, false, iterations, strength, true);//new DropShadowFilter(blurX, blurY, strength, inner ? highlightColor : shadowColor, angle, distance, inner, true, iterations).filter(src
|
||||
BufferedImage shadowIm = dropShadow(src, 0, 0, angle, distance, Color.blue, false, iterations, strength, true); //new DropShadowFilter(blurX, blurY, strength, inner ? shadowColor : highlightColor, angle + 180, distance, inner, true, iterations).filter(src);
|
||||
BufferedImage hilightIm = dropShadow(src, 0, 0, angle + 180, distance, Color.red, false, iterations, strength, true, true);//new DropShadowFilter(blurX, blurY, strength, inner ? highlightColor : shadowColor, angle, distance, inner, true, iterations).filter(src
|
||||
BufferedImage shadowIm = dropShadow(src, 0, 0, angle, distance, Color.blue, false, iterations, strength, true, true); //new DropShadowFilter(blurX, blurY, strength, inner ? shadowColor : highlightColor, angle + 180, distance, inner, true, iterations).filter(src);
|
||||
BufferedImage h2 = new BufferedImage(width, height, src.getType());
|
||||
BufferedImage s2 = new BufferedImage(width, height, src.getType());
|
||||
Graphics2D hc = h2.createGraphics();
|
||||
@@ -382,11 +382,11 @@ public class Filtering {
|
||||
}
|
||||
|
||||
public static SerializableImage glow(SerializableImage src, int blurX, int blurY, float strength, Color color, boolean inner, boolean knockout, int iterations) {
|
||||
return new SerializableImage(dropShadow(src.getBufferedImage(), blurX, blurY, 45, 0, color, inner, iterations, strength, knockout));
|
||||
return new SerializableImage(dropShadow(src.getBufferedImage(), blurX, blurY, 45, 0, color, inner, iterations, strength, knockout, true));
|
||||
}
|
||||
|
||||
public static SerializableImage dropShadow(SerializableImage src, int blurX, int blurY, float angle, double distance, Color color, boolean inner, int iterations, float strength, boolean knockout) {
|
||||
return new SerializableImage(dropShadow(src.getBufferedImage(), blurX, blurY, angle, distance, color, inner, iterations, strength, knockout));
|
||||
public static SerializableImage dropShadow(SerializableImage src, int blurX, int blurY, float angle, double distance, Color color, boolean inner, int iterations, float strength, boolean knockout, boolean compositeSource) {
|
||||
return new SerializableImage(dropShadow(src.getBufferedImage(), blurX, blurY, angle, distance, color, inner, iterations, strength, knockout, compositeSource));
|
||||
}
|
||||
|
||||
private static int cut(int val, int min, int max) {
|
||||
@@ -399,7 +399,7 @@ public class Filtering {
|
||||
return val;
|
||||
}
|
||||
|
||||
private static BufferedImage dropShadow(BufferedImage src, int blurX, int blurY, float angle, double distance, Color color, boolean inner, int iterations, float strength, boolean knockout) {
|
||||
private static BufferedImage dropShadow(BufferedImage src, int blurX, int blurY, float angle, double distance, Color color, boolean inner, int iterations, float strength, boolean knockout, boolean compositeSource) {
|
||||
int width = src.getWidth();
|
||||
int height = src.getHeight();
|
||||
int[] srcPixels = getRGB(src);
|
||||
@@ -424,18 +424,20 @@ public class Filtering {
|
||||
blur(shadow, width, height, blurX, blurY, iterations, null);
|
||||
}
|
||||
|
||||
for (int i = 0; i < shadow.length; i++) {
|
||||
int mask = (srcPixels[i] >> 24) & 0xff;
|
||||
if (!inner) {
|
||||
mask = 255 - mask;
|
||||
if (compositeSource) {
|
||||
for (int i = 0; i < shadow.length; i++) {
|
||||
int mask = (srcPixels[i] >> 24) & 0xff;
|
||||
if (!inner) {
|
||||
mask = 255 - mask;
|
||||
}
|
||||
shadow[i] = shadow[i] & 0xffffff + ((mask * ((shadow[i] >> 24) & 0xff) / 255) << 24);
|
||||
}
|
||||
shadow[i] = shadow[i] & 0xffffff + ((mask * ((shadow[i] >> 24) & 0xff) / 255) << 24);
|
||||
}
|
||||
|
||||
BufferedImage retCanvas = new BufferedImage(width, height, src.getType());
|
||||
setRGB(retCanvas, width, height, shadow);
|
||||
|
||||
if (!knockout) {
|
||||
if (!knockout && compositeSource) {
|
||||
Graphics2D g = retCanvas.createGraphics();
|
||||
g.setComposite(AlphaComposite.DstOver);
|
||||
g.drawImage(src, 0, 0, null);
|
||||
|
||||
@@ -26,12 +26,14 @@ import com.jpexs.decompiler.flash.abc.ABC;
|
||||
import com.jpexs.decompiler.flash.abc.ScriptPack;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetLexAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.avm2.model.ThisAVM2Item;
|
||||
import com.jpexs.decompiler.flash.abc.types.ConvertData;
|
||||
import com.jpexs.decompiler.flash.abc.types.InstanceInfo;
|
||||
import com.jpexs.decompiler.flash.abc.types.MethodBody;
|
||||
import com.jpexs.decompiler.flash.abc.types.Multiname;
|
||||
import com.jpexs.decompiler.flash.abc.types.Namespace;
|
||||
import com.jpexs.decompiler.flash.abc.types.ScriptInfo;
|
||||
import com.jpexs.decompiler.flash.abc.types.traits.Trait;
|
||||
@@ -137,14 +139,17 @@ import com.jpexs.helpers.SerializableImage;
|
||||
import com.jpexs.helpers.utf8.Utf8Helper;
|
||||
import java.awt.Font;
|
||||
import java.awt.Point;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.EmptyStackException;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -155,6 +160,8 @@ import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.parsers.SAXParser;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
@@ -162,11 +169,17 @@ import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerConfigurationException;
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.TransformerFactoryConfigurationError;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.SAXException;
|
||||
@@ -245,7 +258,7 @@ public class XFLConverter {
|
||||
}
|
||||
}
|
||||
if (!hasMove) {
|
||||
ret.append("!").append(startX).append(" ").append(startY);
|
||||
ret.append("! ").append(startX).append(" ").append(startY);
|
||||
}
|
||||
for (SHAPERECORD rec : records) {
|
||||
convertShapeEdge(mat, rec, x, y, ret);
|
||||
@@ -592,7 +605,6 @@ public class XFLConverter {
|
||||
if (distance(prevPoint, startPoint) <= maxDistance) { //start and end of the path near => close
|
||||
prevPoint.x = startPoint.x;
|
||||
prevPoint.y = startPoint.y;
|
||||
System.err.println("CLOSED");
|
||||
}
|
||||
}
|
||||
startPoint = currentPoint;
|
||||
@@ -810,47 +822,34 @@ public class XFLConverter {
|
||||
strokesNewStr.writeStartElement("strokes");
|
||||
if (fillStyleCount > 0 || lineStyleCount > 0) {
|
||||
|
||||
if ((fillStyle0 > 0) || (fillStyle1 > 0) || (strokeStyle > 0)) {
|
||||
|
||||
boolean empty = false;
|
||||
if ((fillStyle0 <= 0) && (fillStyle1 <= 0) && (strokeStyle > 0) && morphshape) {
|
||||
if (shapeNum == 4) {
|
||||
if (strokeStyleOrig > 0) {
|
||||
if (actualLinestyles != null && !((LINESTYLE2) actualLinestyles.lineStyles2[strokeStyleOrig]).hasFillFlag) {
|
||||
RGBA color = (RGBA) actualLinestyles.lineStyles2[strokeStyleOrig].getColor();
|
||||
if (color.alpha == 0 && color.red == 0 && color.green == 0 && color.blue == 0) {
|
||||
empty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((fillStyle0 > 0) || (fillStyle1 > 0) || (strokeStyle > 0)) {
|
||||
currentLayer.writeStartElement("Edge");
|
||||
if (fillStyle0 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle0", fillStyle0);
|
||||
}
|
||||
if (!empty) {
|
||||
currentLayer.writeStartElement("Edge");
|
||||
if (fillStyle0 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle0", fillStyle0);
|
||||
}
|
||||
if (fillStyle1 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle1", fillStyle1);
|
||||
}
|
||||
if (strokeStyle > -1) {
|
||||
currentLayer.writeAttribute("strokeStyle", strokeStyle);
|
||||
}
|
||||
StringBuilder edgesSb = new StringBuilder();
|
||||
convertShapeEdges(startEdgeX, startEdgeY, mat, edges, edgesSb);
|
||||
currentLayer.writeAttribute("edges", edgesSb.toString());
|
||||
currentLayer.writeEndElement();
|
||||
hasEdge = true;
|
||||
if (fillStyle1 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle1", fillStyle1);
|
||||
}
|
||||
if (strokeStyle > -1) {
|
||||
currentLayer.writeAttribute("strokeStyle", strokeStyle);
|
||||
}
|
||||
StringBuilder edgesSb = new StringBuilder();
|
||||
convertShapeEdges(startEdgeX, startEdgeY, mat, edges, edgesSb);
|
||||
currentLayer.writeAttribute("edges", edgesSb.toString());
|
||||
currentLayer.writeEndElement();
|
||||
hasEdge = true;
|
||||
}
|
||||
|
||||
}
|
||||
if (currentLayer.length() > 0) {
|
||||
currentLayer.writeEndElement(); // edges
|
||||
currentLayer.writeEndElement(); // DOMShape
|
||||
}
|
||||
if (currentLayer.length() > 0 && hasEdge) { //no empty layers
|
||||
layers.add(currentLayer.toString());
|
||||
String s = currentLayer.toString();
|
||||
if (morphshape) {
|
||||
s = removeOnlyStrokeEdgesBeforeSameFilled(s);
|
||||
}
|
||||
layers.add(s);
|
||||
}
|
||||
currentLayer.setLength(0);
|
||||
hasEdge = false;
|
||||
@@ -905,43 +904,28 @@ public class XFLConverter {
|
||||
styleChange = true;
|
||||
}
|
||||
if (scr.stateLineStyle) {
|
||||
strokeStyle = scr.lineStyle;// == 0 ? 0 : lineStyleCount - lastLineStyleCount + scr.lineStyle;
|
||||
strokeStyle = scr.lineStyle;
|
||||
strokeStyleOrig = scr.lineStyle - 1;
|
||||
styleChange = true;
|
||||
}
|
||||
if (!edges.isEmpty()) {
|
||||
if ((fillStyle0 > 0) || (fillStyle1 > 0) || (strokeStyle > 0)) {
|
||||
boolean empty = false;
|
||||
if ((fillStyle0 <= 0) && (fillStyle1 <= 0) && (strokeStyle > 0) && morphshape) {
|
||||
if (shapeNum == 4) {
|
||||
if (strokeStyleOrig > 0) {
|
||||
if (actualLinestyles != null && !((LINESTYLE2) actualLinestyles.lineStyles2[strokeStyleOrig]).hasFillFlag) {
|
||||
RGBA color = (RGBA) actualLinestyles.lineStyles2[strokeStyleOrig].getColor();
|
||||
if (color.alpha == 0 && color.red == 0 && color.green == 0 && color.blue == 0) {
|
||||
empty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((fillStyle0 > 0) || (fillStyle1 > 0) || (strokeStyle > 0)) {
|
||||
currentLayer.writeStartElement("Edge");
|
||||
if (lastFillStyle0 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle0", lastFillStyle0);
|
||||
}
|
||||
if (!empty) {
|
||||
currentLayer.writeStartElement("Edge");
|
||||
if (lastFillStyle0 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle0", lastFillStyle0);
|
||||
}
|
||||
if (lastFillStyle1 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle1", lastFillStyle1);
|
||||
}
|
||||
if (lastStrokeStyle > -1) {
|
||||
currentLayer.writeAttribute("strokeStyle", lastStrokeStyle);
|
||||
}
|
||||
StringBuilder edgesSb = new StringBuilder();
|
||||
convertShapeEdges(startEdgeX, startEdgeY, mat, edges, edgesSb);
|
||||
currentLayer.writeAttribute("edges", edgesSb.toString());
|
||||
currentLayer.writeEndElement();
|
||||
hasEdge = true;
|
||||
if (lastFillStyle1 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle1", lastFillStyle1);
|
||||
}
|
||||
|
||||
if (lastStrokeStyle > -1) {
|
||||
currentLayer.writeAttribute("strokeStyle", lastStrokeStyle);
|
||||
}
|
||||
StringBuilder edgesSb = new StringBuilder();
|
||||
convertShapeEdges(startEdgeX, startEdgeY, mat, edges, edgesSb);
|
||||
currentLayer.writeAttribute("edges", edgesSb.toString());
|
||||
currentLayer.writeEndElement();
|
||||
hasEdge = true;
|
||||
|
||||
startEdgeX = x;
|
||||
startEdgeY = y;
|
||||
}
|
||||
@@ -953,51 +937,110 @@ public class XFLConverter {
|
||||
y = edge.changeY(y);
|
||||
}
|
||||
if (!edges.isEmpty()) {
|
||||
if ((fillStyle0 > 0) || (fillStyle1 > 0) || (strokeStyle > 0)) {
|
||||
|
||||
boolean empty = false;
|
||||
if ((fillStyle0 <= 0) && (fillStyle1 <= 0) && (strokeStyle > 0) && morphshape) {
|
||||
if (shapeNum == 4) {
|
||||
if (strokeStyleOrig > 0) {
|
||||
if (actualLinestyles != null && !((LINESTYLE2) actualLinestyles.lineStyles2[strokeStyleOrig]).hasFillFlag) {
|
||||
RGBA color = (RGBA) actualLinestyles.lineStyles2[strokeStyleOrig].getColor();
|
||||
if (color.alpha == 0 && color.red == 0 && color.green == 0 && color.blue == 0) {
|
||||
empty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((fillStyle0 > 0) || (fillStyle1 > 0) || (strokeStyle > 0)) {
|
||||
currentLayer.writeStartElement("Edge");
|
||||
if (fillStyle0 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle0", fillStyle0);
|
||||
}
|
||||
if (!empty) {
|
||||
currentLayer.writeStartElement("Edge");
|
||||
if (fillStyle0 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle0", fillStyle0);
|
||||
}
|
||||
if (fillStyle1 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle1", fillStyle1);
|
||||
}
|
||||
if (strokeStyle > -1) {
|
||||
currentLayer.writeAttribute("strokeStyle", strokeStyle);
|
||||
}
|
||||
StringBuilder edgesSb = new StringBuilder();
|
||||
convertShapeEdges(startEdgeX, startEdgeY, mat, edges, edgesSb);
|
||||
currentLayer.writeAttribute("edges", edgesSb.toString());
|
||||
currentLayer.writeEndElement();
|
||||
hasEdge = true;
|
||||
if (fillStyle1 > -1) {
|
||||
currentLayer.writeAttribute("fillStyle1", fillStyle1);
|
||||
}
|
||||
if (strokeStyle > -1) {
|
||||
currentLayer.writeAttribute("strokeStyle", strokeStyle);
|
||||
}
|
||||
StringBuilder edgesSb = new StringBuilder();
|
||||
convertShapeEdges(startEdgeX, startEdgeY, mat, edges, edgesSb);
|
||||
currentLayer.writeAttribute("edges", edgesSb.toString());
|
||||
currentLayer.writeEndElement();
|
||||
hasEdge = true;
|
||||
}
|
||||
}
|
||||
edges.clear();
|
||||
if (currentLayer.length() > 0) {
|
||||
currentLayer.writeEndElement(); // edges
|
||||
currentLayer.writeEndElement(); // DOMShape
|
||||
|
||||
|
||||
if (currentLayer.length() > 0 && hasEdge) { //no empty layers
|
||||
layers.add(currentLayer.toString());
|
||||
String s = currentLayer.toString();
|
||||
if (morphshape) {
|
||||
s = removeOnlyStrokeEdgesBeforeSameFilled(s);
|
||||
}
|
||||
layers.add(s);
|
||||
}
|
||||
}
|
||||
return layers;
|
||||
}
|
||||
|
||||
/**
|
||||
* A hack. This will remove a stroked path with no fill which has same stroke as subsequent path.
|
||||
* This happens in the morphshape edges. This needs to be cleaned up before exporting to FLA.
|
||||
*
|
||||
* @param layer
|
||||
* @return
|
||||
*/
|
||||
private static String removeOnlyStrokeEdgesBeforeSameFilled(String layer) {
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
|
||||
dbf.setNamespaceAware(false);
|
||||
dbf.setValidating(false);
|
||||
DocumentBuilder db;
|
||||
try {
|
||||
db = dbf.newDocumentBuilder();
|
||||
String docString = "<x>" + layer + "</x>";
|
||||
Document doc = db.parse(new ByteArrayInputStream(docString.getBytes("UTF-8")));
|
||||
NodeList edgesParentList = doc.getElementsByTagName("edges");
|
||||
String prevStrokeOnly = null;
|
||||
String prevEdgesStr = "";
|
||||
for (int j = 0; j < edgesParentList.getLength(); j++) {
|
||||
Node edgesParent = edgesParentList.item(j);
|
||||
NodeList edges = edgesParent.getChildNodes();
|
||||
Node prevNode = null;
|
||||
for (int i = 0; i < edges.getLength(); i++) {
|
||||
Node edge = edges.item(i);
|
||||
if (edge.getNodeType() == Node.TEXT_NODE) {
|
||||
continue;
|
||||
}
|
||||
NamedNodeMap attributes = edge.getAttributes();
|
||||
Node strokeStyleNode = attributes.getNamedItem("strokeStyle");
|
||||
Node fillStyle0Node = attributes.getNamedItem("fillStyle0");
|
||||
Node fillStyle1Node = attributes.getNamedItem("fillStyle1");
|
||||
Node edgesNode = attributes.getNamedItem("edges");
|
||||
String edgesStr = edgesNode.getNodeValue();
|
||||
|
||||
String strokeStyle = strokeStyleNode != null ? strokeStyleNode.getNodeValue() : null;
|
||||
String fillStyle0 = fillStyle0Node != null ? fillStyle0Node.getNodeValue() : null;
|
||||
String fillStyle1 = fillStyle1Node != null ? fillStyle1Node.getNodeValue() : null;
|
||||
|
||||
if (prevStrokeOnly != null &&
|
||||
strokeStyle != null &&
|
||||
strokeStyle.equals(prevStrokeOnly) &&
|
||||
prevEdgesStr.equals(edgesStr)) {
|
||||
Node edgeToRemove = prevNode;
|
||||
edgeToRemove.getParentNode().removeChild(edgeToRemove);
|
||||
}
|
||||
|
||||
prevStrokeOnly = null;
|
||||
if (strokeStyle != null && fillStyle0 == null && fillStyle1 == null) {
|
||||
prevStrokeOnly = strokeStyle;
|
||||
}
|
||||
prevNode = edge;
|
||||
prevEdgesStr = edgesStr;
|
||||
}
|
||||
}
|
||||
TransformerFactory tf = TransformerFactory.newInstance();
|
||||
Transformer transformer = tf.newTransformer();
|
||||
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
|
||||
StringWriter writer = new StringWriter();
|
||||
transformer.transform(new DOMSource(doc), new StreamResult(writer));
|
||||
String output = writer.getBuffer().toString();
|
||||
output = output.trim();
|
||||
output = output.substring(3, output.length() - 4);
|
||||
return output;
|
||||
} catch (TransformerException | SAXException | IOException | ParserConfigurationException ex) {
|
||||
Logger.getLogger(XFLConverter.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
private static int getLayerCount(ReadOnlyTagList tags) {
|
||||
int maxDepth = 0;
|
||||
@@ -2269,8 +2312,8 @@ public class XFLConverter {
|
||||
int characterId = -1;
|
||||
int ratio = -1;
|
||||
boolean shapeTween = false;
|
||||
boolean lastShapeTween = false;
|
||||
MorphShapeTag shapeTweener = null;
|
||||
int lastTweenRatio = -1;
|
||||
|
||||
//Add ShowFrameTag to the end when there is one last missing
|
||||
List<Tag> timTags = timelineTags.toArrayList();
|
||||
@@ -2360,7 +2403,8 @@ public class XFLConverter {
|
||||
if (shapeTween && character != null) {
|
||||
MorphShapeTag m = (MorphShapeTag) character;
|
||||
shapeTweener = m;
|
||||
shapeTween = false;
|
||||
shapeTween = false;
|
||||
lastTweenRatio = ratio;
|
||||
}
|
||||
character = null;
|
||||
metadata = null;
|
||||
@@ -2384,7 +2428,18 @@ public class XFLConverter {
|
||||
|
||||
if (frame + 1 <= endFrame) {
|
||||
lastIn = true;
|
||||
if ((character instanceof ShapeTag) && (nonLibraryShapes.contains(characterId) || shapeTweener != null)) {
|
||||
if (shapeTweener != null) {
|
||||
MorphShapeTag m = shapeTweener;
|
||||
XFLXmlWriter addLastWriter = new XFLXmlWriter();
|
||||
SHAPEWITHSTYLE endShape = m.getShapeAtRatio(lastTweenRatio);
|
||||
convertShape(characters, matrix, m.getShapeNum() == 1 ? 3 : 4, endShape.shapeRecords, m.getFillStyles().getFillStylesAt(lastTweenRatio), m.getLineStyles().getLineStylesAt(m.getShapeNum(), lastTweenRatio), true, false, addLastWriter);
|
||||
duration--;
|
||||
convertFrame(true, null, null, frame - duration, duration, "", lastElements, files, writer2);
|
||||
duration = 1;
|
||||
lastElements = addLastWriter.toString();
|
||||
shapeTweener = null;
|
||||
}
|
||||
if ((character instanceof ShapeTag) && (nonLibraryShapes.contains(characterId))) { // || shapeTweener != null)) {
|
||||
ShapeTag shape = (ShapeTag) character;
|
||||
convertShape(characters, matrix, shape.getShapeNum(), shape.getShapes().shapeRecords, shape.getShapes().fillStyles, shape.getShapes().lineStyles, false, false, elementsWriter);
|
||||
shapeTween = false;
|
||||
@@ -2392,7 +2447,7 @@ public class XFLConverter {
|
||||
} else if (character != null) {
|
||||
if (character instanceof MorphShapeTag) {
|
||||
MorphShapeTag m = (MorphShapeTag) character;
|
||||
convertShape(characters, matrix, 3, m.getStartEdges().shapeRecords, m.getFillStyles().getStartFillStyles(), m.getLineStyles().getStartLineStyles(m.getShapeNum()), true, false, elementsWriter);
|
||||
convertShape(characters, matrix, m.getShapeNum() == 1 ? 3 : 4, m.getStartEdges().shapeRecords, m.getFillStyles().getStartFillStyles(), m.getLineStyles().getStartLineStyles(m.getShapeNum()), true, false, elementsWriter);
|
||||
shapeTween = true;
|
||||
} else {
|
||||
shapeTween = false;
|
||||
@@ -2409,7 +2464,7 @@ public class XFLConverter {
|
||||
frame++;
|
||||
String elements = elementsWriter.toString();
|
||||
if (!elements.equals(lastElements) && frame > 0) {
|
||||
convertFrame(lastShapeTween, null, null, frame - duration, duration, "", lastElements, files, writer2);
|
||||
convertFrame(false, null, null, frame - duration, duration, "", lastElements, files, writer2);
|
||||
duration = 1;
|
||||
} else if (frame == 0) {
|
||||
duration = 1;
|
||||
@@ -2417,19 +2472,16 @@ public class XFLConverter {
|
||||
duration++;
|
||||
}
|
||||
|
||||
lastShapeTween = shapeTween;
|
||||
lastElements = elements;
|
||||
if (frame > endFrame) {
|
||||
if (lastIn) {
|
||||
lastElements = "";
|
||||
lastShapeTween = false;
|
||||
lastIn = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (lastIn) {
|
||||
lastElements = "";
|
||||
lastShapeTween = false;
|
||||
lastIn = false;
|
||||
}
|
||||
frame++;
|
||||
@@ -2443,7 +2495,7 @@ public class XFLConverter {
|
||||
}
|
||||
if (!lastElements.isEmpty()) {
|
||||
frame++;
|
||||
convertFrame(lastShapeTween, null, null, (frame - duration < 0 ? 0 : frame - duration), duration, "", lastElements, files, writer2);
|
||||
convertFrame(false, null, null, (frame - duration < 0 ? 0 : frame - duration), duration, "", lastElements, files, writer2);
|
||||
}
|
||||
afterStr = "</frames>" + afterStr;
|
||||
|
||||
@@ -2579,7 +2631,7 @@ public class XFLConverter {
|
||||
try {
|
||||
constructorBody.convert(new ConvertData(), "??", ScriptExportMode.AS, false, constructorMethodIndex, pack.scriptIndex, classIndex, abc, null, new ScopeStack(), GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, new NulWriter(), new ArrayList<>(), new ArrayList<>(), true, new HashSet<>());
|
||||
|
||||
Map<Integer, Integer> frameToTraitMultiname = new HashMap<>();
|
||||
Map<Integer, Multiname> frameToTraitMultiname = new HashMap<>();
|
||||
|
||||
//find all addFrameScript(xx,this.method) in constructor
|
||||
/*
|
||||
@@ -2607,13 +2659,16 @@ public class XFLConverter {
|
||||
if (callProp.arguments.get(i) instanceof IntegerValueAVM2Item) {
|
||||
IntegerValueAVM2Item frameItem = (IntegerValueAVM2Item) callProp.arguments.get(i);
|
||||
int frame = frameItem.intValue();
|
||||
if (callProp.arguments.get(i + 1) instanceof GetPropertyAVM2Item) {
|
||||
if (callProp.arguments.get(i + 1) instanceof GetLexAVM2Item) {
|
||||
GetLexAVM2Item lex = (GetLexAVM2Item) callProp.arguments.get(i + 1);
|
||||
frameToTraitMultiname.put(frame, lex.propertyName);
|
||||
} else if (callProp.arguments.get(i + 1) instanceof GetPropertyAVM2Item) {
|
||||
GetPropertyAVM2Item getProp = (GetPropertyAVM2Item) callProp.arguments.get(i + 1);
|
||||
if (getProp.object instanceof ThisAVM2Item) {
|
||||
if (getProp.propertyName instanceof FullMultinameAVM2Item) {
|
||||
FullMultinameAVM2Item framePropName = (FullMultinameAVM2Item) getProp.propertyName;
|
||||
int multinameIndex = framePropName.multinameIndex;
|
||||
frameToTraitMultiname.put(frame, multinameIndex);
|
||||
frameToTraitMultiname.put(frame, abc.constants.getMultiname(multinameIndex));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2624,15 +2679,16 @@ public class XFLConverter {
|
||||
}
|
||||
}
|
||||
}
|
||||
Map<Integer, TraitMethodGetterSetter> multinameToMethodTrait = new HashMap<>();
|
||||
Map<Multiname, TraitMethodGetterSetter> multinameToMethodTrait = new HashMap<>();
|
||||
for (Trait trait : instanceInfo.instance_traits.traits) {
|
||||
if (trait instanceof TraitMethodGetterSetter) {
|
||||
multinameToMethodTrait.put(trait.name_index, (TraitMethodGetterSetter) trait);
|
||||
Multiname m = abc.constants.getMultiname(trait.name_index);
|
||||
multinameToMethodTrait.put(abc.constants.getMultiname(trait.name_index), (TraitMethodGetterSetter) trait);
|
||||
}
|
||||
}
|
||||
|
||||
for (int frame : frameToTraitMultiname.keySet()) {
|
||||
int multiName = frameToTraitMultiname.get(frame);
|
||||
Multiname multiName = frameToTraitMultiname.get(frame);
|
||||
if (multinameToMethodTrait.containsKey(multiName)) {
|
||||
TraitMethodGetterSetter methodTrait = multinameToMethodTrait.get(multiName);
|
||||
int methodIndex = methodTrait.method_info;
|
||||
@@ -2672,6 +2728,10 @@ public class XFLConverter {
|
||||
if (!script.isEmpty()) {
|
||||
script = "#initclip\r\n" + script + "#endinitclip\r\n";
|
||||
}
|
||||
|
||||
if (spriteId == 320) {
|
||||
System.err.println("xxx");
|
||||
}
|
||||
|
||||
Map<Integer, String> frameToScriptMap = new HashMap<>();
|
||||
|
||||
|
||||
49
libsrc/ffdec_lib/testdata/morphshape/morphshape.html
vendored
Normal file
49
libsrc/ffdec_lib/testdata/morphshape/morphshape.html
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<title>morphshape</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<style type="text/css" media="screen">
|
||||
html, body { height:100%; background-color: #ffffff;}
|
||||
body { margin:0; padding:0; overflow:hidden; }
|
||||
#flashContent { width:100%; height:100%; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="flashContent">
|
||||
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" id="morphshape" align="middle">
|
||||
<param name="movie" value="morphshape.swf" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#ffffff" />
|
||||
<param name="play" value="true" />
|
||||
<param name="loop" value="true" />
|
||||
<param name="wmode" value="window" />
|
||||
<param name="scale" value="showall" />
|
||||
<param name="menu" value="true" />
|
||||
<param name="devicefont" value="false" />
|
||||
<param name="salign" value="" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<!--[if !IE]>-->
|
||||
<object type="application/x-shockwave-flash" data="morphshape.swf" width="550" height="400">
|
||||
<param name="movie" value="morphshape.swf" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#ffffff" />
|
||||
<param name="play" value="true" />
|
||||
<param name="loop" value="true" />
|
||||
<param name="wmode" value="window" />
|
||||
<param name="scale" value="showall" />
|
||||
<param name="menu" value="true" />
|
||||
<param name="devicefont" value="false" />
|
||||
<param name="salign" value="" />
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<!--<![endif]-->
|
||||
<a href="http://www.adobe.com/go/getflash">
|
||||
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
|
||||
</a>
|
||||
<!--[if !IE]>-->
|
||||
</object>
|
||||
<!--<![endif]-->
|
||||
</object>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
BIN
libsrc/ffdec_lib/testdata/morphshape/morphshape.swf
vendored
Normal file
BIN
libsrc/ffdec_lib/testdata/morphshape/morphshape.swf
vendored
Normal file
Binary file not shown.
111
libsrc/ffdec_lib/testdata/morphshape/morphshape/DOMDocument.xml
vendored
Normal file
111
libsrc/ffdec_lib/testdata/morphshape/morphshape/DOMDocument.xml
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
<DOMDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://ns.adobe.com/xfl/2008/" currentTimeline="1" xflVersion="2.2" creatorInfo="Adobe Flash Professional CS6" platform="Windows" versionInfo="Saved by Adobe Flash Windows 12.0 build 481" majorVersion="12" buildNumber="481" nextSceneIdentifier="2" playOptionsPlayLoop="false" playOptionsPlayPages="false" playOptionsPlayFrameActions="false" autoSaveHasPrompted="true">
|
||||
<timelines>
|
||||
<DOMTimeline name="Scene 1" currentFrame="7">
|
||||
<layers>
|
||||
<DOMLayer name="Layer 1" color="#4FFF4F" current="true" isSelected="true">
|
||||
<frames>
|
||||
<DOMFrame index="0" duration="9" tweenType="shape" keyMode="17922">
|
||||
<MorphShape>
|
||||
<morphSegments>
|
||||
<MorphSegment startPointA="#4.9C, 8.75" startPointB="#B.A4, #10.9A" strokeIndex1="0" strokeIndex2="1">
|
||||
<MorphCurves controlPointA="#7.DA, 8.75" anchorPointA="#B.18, 8.75" controlPointB="#B.A4, #D.72" anchorPointB="#D.B, #B.37"/>
|
||||
<MorphCurves controlPointA="#E.2B, 8.75" anchorPointA="#11.3E, 8.75" controlPointB="#F.BD, #8.FC" anchorPointB="#12.A2, #8.FC"/>
|
||||
<MorphCurves controlPointA="#11.9B, 8.75" anchorPointA="#11.F8, 8.75" controlPointB="#12.F7, #8.FC" anchorPointB="#13.49, #9.03"/>
|
||||
<MorphCurves controlPointA="#11.F8, #B.73" anchorPointA="#11.F8, #E.26" controlPointB="#15.C3, #9.3D" anchorPointB="#17.93, #B.37"/>
|
||||
<MorphCurves controlPointA="#11.F8, #11.63" anchorPointA="#11.F8, #14.A" controlPointB="#19.A, #D.72" anchorPointB="#19.A, #10.9A"/>
|
||||
<MorphCurves controlPointA="#E.BA, #14.A" anchorPointA="#B.7C, #14.A" controlPointB="#19.A, #13.C2" anchorPointB="#17.93, #15.FD"/>
|
||||
<MorphCurves controlPointA="#8.69, #14.A" anchorPointA="#5.56, #14.A" controlPointB="#15.87, #18.38" anchorPointB="#12.A2, #18.38"/>
|
||||
<MorphCurves controlPointA="#4.F9, #14.A" anchorPointA="#4.9C, #14.A" controlPointB="#12.4C, #18.38" anchorPointB="#11.F9, #18.3"/>
|
||||
<MorphCurves controlPointA="#4.9C, #11.EE" anchorPointA="#4.9C, #F.3C" controlPointB="15.5, #17.F6" anchorPointB="#D.B, #15.FD"/>
|
||||
<MorphCurves controlPointA="#4.9C, #B.FE" anchorPointA="#4.9C, 8.75" controlPointB="#B.A4, #13.C2" anchorPointB="#B.A4, #10.9A"/>
|
||||
</MorphSegment>
|
||||
<MorphSegment startPointA="#4.9C, 8.75" startPointB="#B.A4, #10.9A" strokeIndex1="0" strokeIndex2="1" fillIndex1="0" fillIndex2="1">
|
||||
<MorphCurves controlPointA="#7.DA, 8.75" anchorPointA="#B.18, 8.75" controlPointB="#B.A4, #D.72" anchorPointB="#D.B, #B.37"/>
|
||||
<MorphCurves controlPointA="#E.2B, 8.75" anchorPointA="#11.3E, 8.75" controlPointB="#F.BD, #8.FC" anchorPointB="#12.A2, #8.FC"/>
|
||||
<MorphCurves controlPointA="#11.9B, 8.75" anchorPointA="#11.F8, 8.75" controlPointB="#12.F7, #8.FC" anchorPointB="#13.49, #9.03"/>
|
||||
<MorphCurves controlPointA="#11.F8, #B.73" anchorPointA="#11.F8, #E.26" controlPointB="#15.C3, #9.3D" anchorPointB="#17.93, #B.37"/>
|
||||
<MorphCurves controlPointA="#11.F8, #11.63" anchorPointA="#11.F8, #14.A" controlPointB="#19.A, #D.72" anchorPointB="#19.A, #10.9A"/>
|
||||
<MorphCurves controlPointA="#E.BA, #14.A" anchorPointA="#B.7C, #14.A" controlPointB="#19.A, #13.C2" anchorPointB="#17.93, #15.FD"/>
|
||||
<MorphCurves controlPointA="#8.69, #14.A" anchorPointA="#5.56, #14.A" controlPointB="#15.87, #18.38" anchorPointB="#12.A2, #18.38"/>
|
||||
<MorphCurves controlPointA="#4.F9, #14.A" anchorPointA="#4.9C, #14.A" controlPointB="#12.4C, #18.38" anchorPointB="#11.F9, #18.3"/>
|
||||
<MorphCurves controlPointA="#4.9C, #11.EE" anchorPointA="#4.9C, #F.3C" controlPointB="15.5, #17.F6" anchorPointB="#D.B, #15.FD"/>
|
||||
<MorphCurves controlPointA="#4.9C, #B.FE" anchorPointA="#4.9C, 8.75" controlPointB="#B.A4, #13.C2" anchorPointB="#B.A4, #10.9A"/>
|
||||
</MorphSegment>
|
||||
</morphSegments>
|
||||
<morphHintsList/>
|
||||
</MorphShape>
|
||||
<elements>
|
||||
<DOMShape>
|
||||
<fills>
|
||||
<FillStyle index="1">
|
||||
<SolidColor color="#FF0000"/>
|
||||
</FillStyle>
|
||||
</fills>
|
||||
<strokes>
|
||||
<StrokeStyle index="1">
|
||||
<SolidStroke scaleMode="normal">
|
||||
<fill>
|
||||
<SolidColor/>
|
||||
</fill>
|
||||
</SolidStroke>
|
||||
</StrokeStyle>
|
||||
</strokes>
|
||||
<edges>
|
||||
<Edge fillStyle1="1" strokeStyle="1" edges="!4600 2240S6|4600 5280!4600 5280|1180 5280!1180 5280|1180 2240!1180 2240|4600 2240"/>
|
||||
</edges>
|
||||
</DOMShape>
|
||||
</elements>
|
||||
</DOMFrame>
|
||||
<DOMFrame index="9" keyMode="9728">
|
||||
<elements>
|
||||
<DOMShape>
|
||||
<fills>
|
||||
<FillStyle index="1">
|
||||
<SolidColor color="#00FF00"/>
|
||||
</FillStyle>
|
||||
</fills>
|
||||
<strokes>
|
||||
<StrokeStyle index="1">
|
||||
<SolidStroke scaleMode="normal" weight="5">
|
||||
<fill>
|
||||
<SolidColor color="#0000FF"/>
|
||||
</fill>
|
||||
</SolidStroke>
|
||||
</StrokeStyle>
|
||||
</strokes>
|
||||
<edges>
|
||||
<Edge fillStyle1="1" strokeStyle="1" edges="!4770 2300[5511 2300 6035 2871!6035 2871[6560 3442 6560 4250!6560 4250[6560 5058 6035 5629!6035 5629[5511 6200 4770 6200!4770 6200[4029 6200 3504 5629!3504 5629[2980 5058 2980 4250!2980 4250[2980 3442 3504 2871!3504 2871[4029 2300 4770
|
||||
2300"/>
|
||||
</edges>
|
||||
</DOMShape>
|
||||
</elements>
|
||||
</DOMFrame>
|
||||
</frames>
|
||||
</DOMLayer>
|
||||
</layers>
|
||||
</DOMTimeline>
|
||||
</timelines>
|
||||
<PrinterSettings/>
|
||||
<publishHistory>
|
||||
<PublishItem publishSize="1451" publishTime="1667490195" publishDebug="true"/>
|
||||
<PublishItem publishSize="2719" publishTime="1667389449" publishDebug="true"/>
|
||||
<PublishItem publishSize="2649" publishTime="1667386713" publishDebug="true"/>
|
||||
<PublishItem publishSize="73201" publishTime="1667385509" publishDebug="true"/>
|
||||
<PublishItem publishSize="73178" publishTime="1667381356" publishDebug="true"/>
|
||||
<PublishItem publishSize="5049" publishTime="1666994617" publishDebug="true"/>
|
||||
<PublishItem publishSize="5049" publishTime="1666994596" publishDebug="true"/>
|
||||
<PublishItem publishSize="5049" publishTime="1666993938" publishDebug="true"/>
|
||||
<PublishItem publishSize="4703" publishTime="1666992917" publishDebug="true"/>
|
||||
<PublishItem publishSize="1698" publishTime="1666992572" publishDebug="true"/>
|
||||
<PublishItem publishSize="4838" publishTime="1666991799" publishDebug="true"/>
|
||||
<PublishItem publishSize="4650" publishTime="1666990748" publishDebug="true"/>
|
||||
<PublishItem publishSize="1768" publishTime="1666990677" publishDebug="true"/>
|
||||
<PublishItem publishSize="2200" publishTime="1666627820" publishDebug="true"/>
|
||||
<PublishItem publishSize="1125" publishTime="1666556069" publishDebug="true"/>
|
||||
<PublishItem publishSize="13203" publishTime="1666511487" publishDebug="true"/>
|
||||
<PublishItem publishSize="1120" publishTime="1666446694" publishDebug="true"/>
|
||||
<PublishItem publishSize="601" publishTime="1666446684" publishDebug="true"/>
|
||||
<PublishItem publishSize="603" publishTime="1666444758" publishDebug="true"/>
|
||||
<PublishItem publishSize="1119" publishTime="1666444620" publishDebug="true"/>
|
||||
</publishHistory>
|
||||
</DOMDocument>
|
||||
110
libsrc/ffdec_lib/testdata/morphshape/morphshape/META-INF/metadata.xml
vendored
Normal file
110
libsrc/ffdec_lib/testdata/morphshape/morphshape/META-INF/metadata.xml
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
||||
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<rdf:Description rdf:about=""
|
||||
xmlns:xmp="http://ns.adobe.com/xap/1.0/">
|
||||
<xmp:CreatorTool>Adobe Flash Professional CS6 - build 481</xmp:CreatorTool>
|
||||
<xmp:CreateDate>2021-11-29T21:00:28-08:00</xmp:CreateDate>
|
||||
<xmp:MetadataDate>2022-11-03T11:43:33-07:00</xmp:MetadataDate>
|
||||
<xmp:ModifyDate>2022-11-03T11:43:33-07:00</xmp:ModifyDate>
|
||||
</rdf:Description>
|
||||
<rdf:Description rdf:about=""
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<dc:format>application/vnd.adobe.fla</dc:format>
|
||||
</rdf:Description>
|
||||
<rdf:Description rdf:about=""
|
||||
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
|
||||
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
|
||||
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
|
||||
<xmpMM:InstanceID>xmp.iid:6A6D3EE1675BED11AEA5D18306A6F790</xmpMM:InstanceID>
|
||||
<xmpMM:DocumentID>xmp.did:6A6D3EE1675BED11AEA5D18306A6F790</xmpMM:DocumentID>
|
||||
<xmpMM:OriginalDocumentID>xmp.did:C5BAF59A1F51EC118EC6DBA80AAFBA90</xmpMM:OriginalDocumentID>
|
||||
<xmpMM:History>
|
||||
<rdf:Seq>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:C5BAF59A1F51EC118EC6DBA80AAFBA90</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:DB01969D1058EC11B0BD896CDB4C1F9F</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:FCCDB50C4558EC11A79581A4DE002270</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:CBDFDAC26B53ED11A79581A4DE002270</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:7DAC1B2F7E56ED11AEA5D18306A6F790</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:83AC1B2F7E56ED11AEA5D18306A6F790</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:676D3EE1675BED11AEA5D18306A6F790</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>saved</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:696D3EE1675BED11AEA5D18306A6F790</stEvt:instanceID>
|
||||
<stEvt:when>2022-11-03T08:49:07-07:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
<stEvt:changed>/</stEvt:changed>
|
||||
</rdf:li>
|
||||
<rdf:li rdf:parseType="Resource">
|
||||
<stEvt:action>created</stEvt:action>
|
||||
<stEvt:instanceID>xmp.iid:6A6D3EE1675BED11AEA5D18306A6F790</stEvt:instanceID>
|
||||
<stEvt:when>2021-11-29T21:00:28-08:00</stEvt:when>
|
||||
<stEvt:softwareAgent>Adobe Flash Professional CS6 - build 481</stEvt:softwareAgent>
|
||||
</rdf:li>
|
||||
</rdf:Seq>
|
||||
</xmpMM:History>
|
||||
<xmpMM:DerivedFrom rdf:parseType="Resource">
|
||||
<stRef:instanceID>xmp.iid:696D3EE1675BED11AEA5D18306A6F790</stRef:instanceID>
|
||||
<stRef:documentID>xmp.did:696D3EE1675BED11AEA5D18306A6F790</stRef:documentID>
|
||||
<stRef:originalDocumentID>xmp.did:C5BAF59A1F51EC118EC6DBA80AAFBA90</stRef:originalDocumentID>
|
||||
</xmpMM:DerivedFrom>
|
||||
</rdf:Description>
|
||||
</rdf:RDF>
|
||||
</x:xmpmeta>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<?xpacket end="w"?>
|
||||
0
libsrc/ffdec_lib/testdata/morphshape/morphshape/MobileSettings.xml
vendored
Normal file
0
libsrc/ffdec_lib/testdata/morphshape/morphshape/MobileSettings.xml
vendored
Normal file
206
libsrc/ffdec_lib/testdata/morphshape/morphshape/PublishSettings.xml
vendored
Normal file
206
libsrc/ffdec_lib/testdata/morphshape/morphshape/PublishSettings.xml
vendored
Normal file
@@ -0,0 +1,206 @@
|
||||
<flash_profiles>
|
||||
<flash_profile version="1.0" name="Default" current="true">
|
||||
<PublishFormatProperties enabled="true">
|
||||
<defaultNames>1</defaultNames>
|
||||
<flash>1</flash>
|
||||
<projectorWin>0</projectorWin>
|
||||
<projectorMac>0</projectorMac>
|
||||
<html>1</html>
|
||||
<gif>0</gif>
|
||||
<jpeg>0</jpeg>
|
||||
<png>0</png>
|
||||
<qt>0</qt>
|
||||
<rnwk>0</rnwk>
|
||||
<swc>0</swc>
|
||||
<flashDefaultName>1</flashDefaultName>
|
||||
<projectorWinDefaultName>1</projectorWinDefaultName>
|
||||
<projectorMacDefaultName>1</projectorMacDefaultName>
|
||||
<htmlDefaultName>1</htmlDefaultName>
|
||||
<gifDefaultName>1</gifDefaultName>
|
||||
<jpegDefaultName>1</jpegDefaultName>
|
||||
<pngDefaultName>1</pngDefaultName>
|
||||
<qtDefaultName>1</qtDefaultName>
|
||||
<rnwkDefaultName>1</rnwkDefaultName>
|
||||
<swcDefaultName>1</swcDefaultName>
|
||||
<flashFileName>Untitledas3.swf</flashFileName>
|
||||
<projectorWinFileName>Untitledas3.exe</projectorWinFileName>
|
||||
<projectorMacFileName>Untitledas3.app</projectorMacFileName>
|
||||
<htmlFileName>Untitledas3.html</htmlFileName>
|
||||
<gifFileName>Untitledas3.gif</gifFileName>
|
||||
<jpegFileName>Untitledas3.jpg</jpegFileName>
|
||||
<pngFileName>Untitledas3.png</pngFileName>
|
||||
<qtFileName>Untitledas3.mov</qtFileName>
|
||||
<rnwkFileName>Untitledas3.smil</rnwkFileName>
|
||||
<swcFileName>Untitledas3.swc</swcFileName>
|
||||
</PublishFormatProperties>
|
||||
<PublishHtmlProperties enabled="true">
|
||||
<VersionDetectionIfAvailable>0</VersionDetectionIfAvailable>
|
||||
<VersionInfo>12,0,0,0;11,2,0,0;11,1,0,0;10,3,0,0;10,2,153,0;10,1,52,0;9,0,124,0;8,0,24,0;7,0,14,0;6,0,79,0;5,0,58,0;4,0,32,0;3,0,8,0;2,0,1,12;1,0,0,1;</VersionInfo>
|
||||
<UsingDefaultContentFilename>1</UsingDefaultContentFilename>
|
||||
<UsingDefaultAlternateFilename>1</UsingDefaultAlternateFilename>
|
||||
<ContentFilename>Untitledas3.xfl_content.html</ContentFilename>
|
||||
<AlternateFilename>Untitledas3.xfl_alternate.html</AlternateFilename>
|
||||
<UsingOwnAlternateFile>0</UsingOwnAlternateFile>
|
||||
<OwnAlternateFilename></OwnAlternateFilename>
|
||||
<Width>550</Width>
|
||||
<Height>400</Height>
|
||||
<Align>0</Align>
|
||||
<Units>0</Units>
|
||||
<Loop>1</Loop>
|
||||
<StartPaused>0</StartPaused>
|
||||
<Scale>0</Scale>
|
||||
<HorizontalAlignment>1</HorizontalAlignment>
|
||||
<VerticalAlignment>1</VerticalAlignment>
|
||||
<Quality>4</Quality>
|
||||
<DeblockingFilter>0</DeblockingFilter>
|
||||
<WindowMode>0</WindowMode>
|
||||
<DisplayMenu>1</DisplayMenu>
|
||||
<DeviceFont>0</DeviceFont>
|
||||
<TemplateFileName>C:\Users\MyUser\AppData\Local\Adobe\Flash CS6\en_US\Configuration\HTML\Default.html</TemplateFileName>
|
||||
<showTagWarnMsg>1</showTagWarnMsg>
|
||||
</PublishHtmlProperties>
|
||||
<PublishFlashProperties enabled="true">
|
||||
<TopDown></TopDown>
|
||||
<FireFox></FireFox>
|
||||
<Report>0</Report>
|
||||
<Protect>0</Protect>
|
||||
<OmitTraceActions>0</OmitTraceActions>
|
||||
<Quality>80</Quality>
|
||||
<DeblockingFilter>0</DeblockingFilter>
|
||||
<StreamFormat>0</StreamFormat>
|
||||
<StreamCompress>7</StreamCompress>
|
||||
<EventFormat>0</EventFormat>
|
||||
<EventCompress>7</EventCompress>
|
||||
<OverrideSounds>0</OverrideSounds>
|
||||
<Version>15</Version>
|
||||
<ExternalPlayer>FlashPlayer11.2</ExternalPlayer>
|
||||
<ActionScriptVersion>3</ActionScriptVersion>
|
||||
<PackageExportFrame>1</PackageExportFrame>
|
||||
<PackagePaths></PackagePaths>
|
||||
<AS3PackagePaths>.</AS3PackagePaths>
|
||||
<AS3ConfigConst>CONFIG::FLASH_AUTHORING="true";</AS3ConfigConst>
|
||||
<DebuggingPermitted>1</DebuggingPermitted>
|
||||
<DebuggingPassword></DebuggingPassword>
|
||||
<CompressMovie>1</CompressMovie>
|
||||
<CompressionType>0</CompressionType>
|
||||
<InvisibleLayer>1</InvisibleLayer>
|
||||
<DeviceSound>0</DeviceSound>
|
||||
<StreamUse8kSampleRate>0</StreamUse8kSampleRate>
|
||||
<EventUse8kSampleRate>0</EventUse8kSampleRate>
|
||||
<UseNetwork>0</UseNetwork>
|
||||
<DocumentClass>MainClass</DocumentClass>
|
||||
<AS3Strict>2</AS3Strict>
|
||||
<AS3Coach>4</AS3Coach>
|
||||
<AS3AutoDeclare>4096</AS3AutoDeclare>
|
||||
<AS3Dialect>AS3</AS3Dialect>
|
||||
<AS3ExportFrame>1</AS3ExportFrame>
|
||||
<AS3Optimize>1</AS3Optimize>
|
||||
<ExportSwc>0</ExportSwc>
|
||||
<ScriptStuckDelay>15</ScriptStuckDelay>
|
||||
<IncludeXMP>1</IncludeXMP>
|
||||
<HardwareAcceleration>0</HardwareAcceleration>
|
||||
<AS3Flags>4102</AS3Flags>
|
||||
<DefaultLibraryLinkage>rsl</DefaultLibraryLinkage>
|
||||
<RSLPreloaderMethod>wrap</RSLPreloaderMethod>
|
||||
<RSLPreloaderSWF>$(AppConfig)/ActionScript 3.0/rsls/loader_animation.swf</RSLPreloaderSWF>
|
||||
<LibraryPath>
|
||||
<library-path-entry>
|
||||
<swc-path>$(AppConfig)/ActionScript 3.0/libs</swc-path>
|
||||
<linkage>merge</linkage>
|
||||
</library-path-entry>
|
||||
<library-path-entry>
|
||||
<swc-path>$(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc</swc-path>
|
||||
<linkage usesDefault="true">rsl</linkage>
|
||||
<rsl-url>http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz</rsl-url>
|
||||
<policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url>
|
||||
<rsl-url>textLayout_2.0.0.232.swz</rsl-url>
|
||||
</library-path-entry>
|
||||
</LibraryPath>
|
||||
<LibraryVersions>
|
||||
<library-version>
|
||||
<swc-path>$(AppConfig)/ActionScript 3.0/libs/11.0/textLayout.swc</swc-path>
|
||||
<feature name="tlfText" majorVersion="2" minorVersion="0" build="232"/>
|
||||
<rsl-url>http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz</rsl-url>
|
||||
<policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url>
|
||||
<rsl-url>textLayout_2.0.0.232.swz</rsl-url>
|
||||
</library-version>
|
||||
</LibraryVersions>
|
||||
</PublishFlashProperties>
|
||||
<PublishJpegProperties enabled="true">
|
||||
<Width>550</Width>
|
||||
<Height>400</Height>
|
||||
<Progressive>0</Progressive>
|
||||
<DPI>4718592</DPI>
|
||||
<Size>0</Size>
|
||||
<Quality>80</Quality>
|
||||
<MatchMovieDim>1</MatchMovieDim>
|
||||
</PublishJpegProperties>
|
||||
<PublishRNWKProperties enabled="true">
|
||||
<exportFlash>1</exportFlash>
|
||||
<flashBitRate>0</flashBitRate>
|
||||
<exportAudio>1</exportAudio>
|
||||
<audioFormat>0</audioFormat>
|
||||
<singleRateAudio>0</singleRateAudio>
|
||||
<realVideoRate>100000</realVideoRate>
|
||||
<speed28K>1</speed28K>
|
||||
<speed56K>1</speed56K>
|
||||
<speedSingleISDN>0</speedSingleISDN>
|
||||
<speedDualISDN>0</speedDualISDN>
|
||||
<speedCorporateLAN>0</speedCorporateLAN>
|
||||
<speed256K>0</speed256K>
|
||||
<speed384K>0</speed384K>
|
||||
<speed512K>0</speed512K>
|
||||
<exportSMIL>1</exportSMIL>
|
||||
</PublishRNWKProperties>
|
||||
<PublishGifProperties enabled="true">
|
||||
<Width>550</Width>
|
||||
<Height>400</Height>
|
||||
<Animated>0</Animated>
|
||||
<MatchMovieDim>1</MatchMovieDim>
|
||||
<Loop>1</Loop>
|
||||
<LoopCount>0</LoopCount>
|
||||
<OptimizeColors>1</OptimizeColors>
|
||||
<Interlace>0</Interlace>
|
||||
<Smooth>1</Smooth>
|
||||
<DitherSolids>0</DitherSolids>
|
||||
<RemoveGradients>0</RemoveGradients>
|
||||
<TransparentOption></TransparentOption>
|
||||
<TransparentAlpha>128</TransparentAlpha>
|
||||
<DitherOption></DitherOption>
|
||||
<PaletteOption></PaletteOption>
|
||||
<MaxColors>255</MaxColors>
|
||||
<PaletteName></PaletteName>
|
||||
</PublishGifProperties>
|
||||
<PublishPNGProperties enabled="true">
|
||||
<Width>550</Width>
|
||||
<Height>400</Height>
|
||||
<OptimizeColors>1</OptimizeColors>
|
||||
<Interlace>0</Interlace>
|
||||
<Transparent>0</Transparent>
|
||||
<Smooth>1</Smooth>
|
||||
<DitherSolids>0</DitherSolids>
|
||||
<RemoveGradients>0</RemoveGradients>
|
||||
<MatchMovieDim>1</MatchMovieDim>
|
||||
<DitherOption></DitherOption>
|
||||
<FilterOption></FilterOption>
|
||||
<PaletteOption></PaletteOption>
|
||||
<BitDepth>24-bit with Alpha</BitDepth>
|
||||
<MaxColors>255</MaxColors>
|
||||
<PaletteName></PaletteName>
|
||||
</PublishPNGProperties>
|
||||
<PublishQTProperties enabled="true">
|
||||
<Width>550</Width>
|
||||
<Height>400</Height>
|
||||
<MatchMovieDim>1</MatchMovieDim>
|
||||
<UseQTSoundCompression>0</UseQTSoundCompression>
|
||||
<AlphaOption></AlphaOption>
|
||||
<LayerOption></LayerOption>
|
||||
<QTSndSettings>00000000</QTSndSettings>
|
||||
<ControllerOption>0</ControllerOption>
|
||||
<Looping>0</Looping>
|
||||
<PausedAtStart>0</PausedAtStart>
|
||||
<PlayEveryFrame>0</PlayEveryFrame>
|
||||
<Flatten>1</Flatten>
|
||||
</PublishQTProperties>
|
||||
</flash_profile>
|
||||
</flash_profiles>
|
||||
BIN
libsrc/ffdec_lib/testdata/morphshape/morphshape/bin/SymDepend.cache
vendored
Normal file
BIN
libsrc/ffdec_lib/testdata/morphshape/morphshape/bin/SymDepend.cache
vendored
Normal file
Binary file not shown.
1
libsrc/ffdec_lib/testdata/morphshape/morphshape/morphshape.xfl
vendored
Normal file
1
libsrc/ffdec_lib/testdata/morphshape/morphshape/morphshape.xfl
vendored
Normal file
@@ -0,0 +1 @@
|
||||
PROXY-CS5
|
||||
@@ -924,7 +924,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
public void load(SWFList newSwfs, boolean first) {
|
||||
View.checkAccess();
|
||||
|
||||
List<List<String>> expandedNodes = View.getExpandedNodes(tagTree);
|
||||
List<List<String>> expandedNodes = View.getExpandedNodes(getCurrentTree());
|
||||
previewPanel.clear();
|
||||
|
||||
swfs.add(newSwfs);
|
||||
@@ -935,7 +935,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
|
||||
doFilter();
|
||||
reload(false);
|
||||
View.expandTreeNodes(tagTree, expandedNodes);
|
||||
View.expandTreeNodes(getCurrentTree(), expandedNodes);
|
||||
}
|
||||
|
||||
public ABCPanel getABCPanel() {
|
||||
@@ -2416,9 +2416,19 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
fc.setCurrentDirectory(new File(selDir));
|
||||
if (!selDir.endsWith(File.separator)) {
|
||||
selDir += File.separator;
|
||||
}
|
||||
String swfShortName = swf.getShortFileName();
|
||||
if ("".equals(swfShortName)) {
|
||||
swfShortName = "untitled.swf";
|
||||
}
|
||||
String fileName = new File(swf.getFile()).getName();
|
||||
fileName = fileName.substring(0, fileName.length() - 4) + ".fla";
|
||||
String fileName;
|
||||
if (swfShortName.contains(".")) {
|
||||
fileName = swfShortName.substring(0, swfShortName.lastIndexOf(".")) + ".fla";
|
||||
} else {
|
||||
fileName = swfShortName + ".fla";
|
||||
}
|
||||
final String fSwfShortName = swfShortName;
|
||||
|
||||
fc.setSelectedFile(new File(selDir + fileName));
|
||||
List<FileFilter> flaFilters = new ArrayList<>();
|
||||
List<FileFilter> xflFilters = new ArrayList<>();
|
||||
@@ -2484,9 +2494,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
try {
|
||||
AbortRetryIgnoreHandler errorHandler = new GuiAbortRetryIgnoreHandler();
|
||||
if (compressed) {
|
||||
swf.exportFla(errorHandler, selfile.getAbsolutePath(), new File(swf.getFile()).getName(), ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), selectedVersion);
|
||||
swf.exportFla(errorHandler, selfile.getAbsolutePath(), fSwfShortName, ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), selectedVersion);
|
||||
} else {
|
||||
swf.exportXfl(errorHandler, selfile.getAbsolutePath(), new File(swf.getFile()).getName(), ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), selectedVersion);
|
||||
swf.exportXfl(errorHandler, selfile.getAbsolutePath(), fSwfShortName, ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), selectedVersion);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
logger.log(Level.SEVERE, "FLA export error", ex);
|
||||
|
||||
Reference in New Issue
Block a user