From 79dd81cd82a9aaa3bbc221266acb2a6007076ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Wed, 15 Feb 2023 19:26:04 +0100 Subject: [PATCH] Fixed FLA export - allow single empty layer --- .../decompiler/flash/xfl/XFLConverter.java | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index 6e3622975..2e4f32e86 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -2481,8 +2481,7 @@ public class XFLConverter { } } } - if (!lastElements.isEmpty() || writer2.length() > 0) - { + if (!lastElements.isEmpty() || writer2.length() > 0) { frame++; convertFrame(false, null, null, (frame - duration < 0 ? 0 : frame - duration), duration, "", lastElements, files, writer2); } @@ -2852,7 +2851,7 @@ public class XFLConverter { return hasLabel; } - private void convertSoundLayer(int layerIndex, ReadOnlyTagList timeLineTags, HashMap files, XFLXmlWriter writer) throws XMLStreamException { + private void convertSoundLayer(ReadOnlyTagList timeLineTags, HashMap files, XFLXmlWriter writer) throws XMLStreamException { int soundLayerIndex = 0; XFLXmlWriter writer2 = new XFLXmlWriter(); List startSounds = new ArrayList<>(); @@ -3063,16 +3062,40 @@ public class XFLConverter { }*/ boolean nonEmpty = writeLayer(index, depthToFramesList.get(d), d, 0, Integer.MAX_VALUE, -1, writer, nonLibraryShapes, tags, timelineTags, characters, flaVersion, files); if (nonEmpty) { - index++; + index++; } } + + if (index == 0) { + writeEmptyLayer(writer, frameCount); + index++; + } - int soundLayerIndex = maxDepth; - maxDepth++; - convertSoundLayer(soundLayerIndex, timelineTags, files, writer); + convertSoundLayer(timelineTags, files, writer); writer.writeEndElement(); writer.writeEndElement(); } + + private void writeEmptyLayer(XFLXmlWriter writer, int frameCount) throws XMLStreamException { + writer.writeStartElement("DOMLayer", new String[]{ + "name", "Layer 1", + "color", randomOutlineColor() + }); + writer.writeAttribute("current", true); + writer.writeAttribute("isSelected", true); + writer.writeStartElement("frames"); + + writer.writeStartElement("DOMFrame"); + writer.writeAttribute("index", 0); + writer.writeAttribute("duration", frameCount); + writer.writeAttribute("keyMode", KEY_MODE_NORMAL); + writer.writeStartElement("elements"); + writer.writeEndElement(); //elements + writer.writeEndElement(); //DOMFrame + + writer.writeEndElement();//frames + writer.writeEndElement();//DOMLayer + } private boolean writeLayer(int index, List onlyFrames, int d, int startFrame, int endFrame, int parentLayer, XFLXmlWriter writer, List nonLibraryShapes, ReadOnlyTagList tags, ReadOnlyTagList timelineTags, HashMap characters, FLAVersion flaVersion, HashMap files) throws XMLStreamException { XFLXmlWriter layerPrev = new XFLXmlWriter();