Merge pull request #141 from jindrapetrik/dev

Dev
This commit is contained in:
Jindra Petřík
2022-11-03 22:37:58 +01:00
committed by GitHub
16 changed files with 715 additions and 146 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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

View File

@@ -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);

View File

@@ -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<>();

View 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>

Binary file not shown.

View 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>

View 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"?>

View 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=&quot;true&quot;;</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>

Binary file not shown.

View File

@@ -0,0 +1 @@
PROXY-CS5

View File

@@ -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);