diff --git a/CHANGELOG.md b/CHANGELOG.md index fb9845290..5d8039694 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,9 @@ All notable changes to this project will be documented in this file. ### Changed - [#1455] All tag types are now allowed inside DefineSprite +### Removed +- Auto fixing character tags order based on dependencies during saving + ## [16.0.4] - 2022-11-03 ### Fixed - [#1860] FLA export - EmptyStackException during exporting MorphShape diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 66c5a741e..94bbb23b5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -811,51 +811,7 @@ public final class SWF implements SWFContainerItem, Timelined { } return null; - } - - public void fixCharactersOrder(boolean checkAll) { - Set addedCharacterIds = new HashSet<>(); - Set movedTags = new HashSet<>(); - for (int i = 0; i < tags.size(); i++) { - Tag tag = tags.get(i); - if (checkAll || tag.isModified()) { - Set needed = new HashSet<>(); - tag.getNeededCharacters(needed); - if (tag instanceof CharacterTag) { - CharacterTag characterTag = (CharacterTag) tag; - needed.remove(characterTag.getCharacterId()); - } - boolean moved = false; - for (Integer id : needed) { - if (!addedCharacterIds.contains(id)) { - CharacterTag neededCharacter = getCharacter(id); - if (neededCharacter == null) { - continue; - } - - if (movedTags.contains(neededCharacter)) { - logger.log(Level.SEVERE, "Fixing characters order failed, recursion detected."); - return; - } - - // move the needed character to the current position - tags.remove(neededCharacter); - tags.add(i, neededCharacter); - movedTags.add(neededCharacter); - moved = true; - } - } - - if (moved) { - i--; - continue; - } - } - if (tag instanceof CharacterTag) { - addedCharacterIds.add(((CharacterTag) tag).getCharacterId()); - } - } - } + } public void resetTimelines(Timelined timelined) { timelined.resetTimeline(); @@ -1007,9 +963,7 @@ public final class SWF implements SWFContainerItem, Timelined { return saveToByteArray(gfx); } - private byte[] saveToByteArray(boolean gfx) throws IOException { - fixCharactersOrder(false); - + private byte[] saveToByteArray(boolean gfx) throws IOException { byte[] data; try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); SWFOutputStream sos = new SWFOutputStream(baos, version)) {