diff --git a/CHANGELOG.md b/CHANGELOG.md index ceb5a76e4..8f9ce2352 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed +- [#2004] Freezing when a shape has nonimage character set as fill ## [18.4.1] - 2023-04-05 ### Fixed @@ -3024,6 +3026,7 @@ 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 +[#2004]: https://www.free-decompiler.com/flash/issues/2004 [#1993]: https://www.free-decompiler.com/flash/issues/1993 [#1994]: https://www.free-decompiler.com/flash/issues/1994 [#1477]: https://www.free-decompiler.com/flash/issues/1477 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 784a78c6a..ccf3c397a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -658,7 +658,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { int characterId = ((CharacterTag) tag).getCharacterId(); if (characterId != -1) { Set needed = new HashSet<>(); - tag.getNeededCharacters(needed); + tag.getNeededCharacters(needed, this); for (Integer needed1 : needed) { Set s = dep.get(needed1); if (s == null) { @@ -4382,7 +4382,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { CharacterTag cht = (CharacterTag) t; if (cht.getCharacterId() != -1) { Set needed = new HashSet<>(); - cht.getNeededCharacters(needed); + cht.getNeededCharacters(needed, this); characterToNeeded.put(cht.getCharacterId(), needed); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java index fc2bdfe87..cb525dcc7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java @@ -127,7 +127,7 @@ public class CSMTextSettingsTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(textID); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java index eadde9692..760c89514 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java @@ -100,7 +100,7 @@ public class DefineButtonCxformTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(buttonId); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java index 19147f5f0..a62effd76 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java @@ -142,7 +142,7 @@ public class DefineButtonSoundTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (buttonSoundChar0 != 0) { needed.add(buttonSoundChar0); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java index d851adbc9..542340d65 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java @@ -944,7 +944,7 @@ public class DefineEditTextTag extends TextTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (hasFont) { needed.add(fontId); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java index 611884760..5e60578c7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java @@ -119,7 +119,7 @@ public class DefineFontAlignZonesTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(fontID); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfo2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfo2Tag.java index 457e070f2..378c542c9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfo2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfo2Tag.java @@ -187,7 +187,7 @@ public class DefineFontInfo2Tag extends FontInfoTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(fontID); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfoTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfoTag.java index bba46c5a5..1cd22571f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfoTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontInfoTag.java @@ -188,7 +188,7 @@ public class DefineFontInfoTag extends FontInfoTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(fontID); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java index b064d62d6..ef9d929e8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java @@ -97,7 +97,7 @@ public class DefineFontNameTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(fontId); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java index 47f6e7c42..a4f7db053 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java @@ -217,7 +217,7 @@ public class DefineScalingGridTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(characterId); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java index 8d7730d1c..48fae125b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java @@ -375,7 +375,7 @@ public class DefineSpriteTag extends DrawableTag implements Timelined { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { for (Tag t : getTags()) { if ((t instanceof CharacterIdTag) && !(t instanceof SoundStreamHeadTypeTag) && !(t instanceof DefineExternalStreamSound)) { needed.add(((CharacterIdTag) t).getCharacterId()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java index 1c0353260..1755c606f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java @@ -277,7 +277,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(spriteId); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java index d0f25ecee..b35a512e9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java @@ -151,7 +151,7 @@ public class ExportAssetsTag extends SymbolClassTypeTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.addAll(tags); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FreeCharacterTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FreeCharacterTag.java index d1e3600fd..6ca74c71c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FreeCharacterTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FreeCharacterTag.java @@ -85,7 +85,7 @@ public class FreeCharacterTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(characterId); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/NameCharacterTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/NameCharacterTag.java index ebc52d95a..efb504c8a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/NameCharacterTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/NameCharacterTag.java @@ -94,7 +94,7 @@ public class NameCharacterTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(characterId); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java index 93106e139..ad0f7db6e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java @@ -289,7 +289,7 @@ public class PlaceObject2Tag extends PlaceObjectTypeTag implements ASMSourceCont } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (placeFlagHasCharacter) { needed.add(characterId); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java index ffadc4ee6..8f5703169 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java @@ -476,7 +476,7 @@ public class PlaceObject3Tag extends PlaceObjectTypeTag implements ASMSourceCont } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (placeFlagHasCharacter) { needed.add(characterId); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java index c3ecb6824..50cc16dae 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java @@ -497,7 +497,7 @@ public class PlaceObject4Tag extends PlaceObjectTypeTag implements ASMSourceCont } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (placeFlagHasCharacter) { needed.add(characterId); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java index bd4c2ba4a..66dc06c0b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java @@ -143,7 +143,7 @@ public class PlaceObjectTag extends PlaceObjectTypeTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(characterId); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/RemoveObjectTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/RemoveObjectTag.java index 757453f86..0c8257b61 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/RemoveObjectTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/RemoveObjectTag.java @@ -108,7 +108,7 @@ public class RemoveObjectTag extends RemoveTag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(characterId); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java index 58c5133fb..8e90b1807 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SymbolClassTag.java @@ -141,7 +141,7 @@ public class SymbolClassTag extends SymbolClassTypeTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { for (int t : tags) { if (t != 0) { //main class needed.add(t); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java index 66dcba882..44ef81e49 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java @@ -608,7 +608,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { } public Set getMissingNeededCharacters(Set needed) { @@ -645,7 +645,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { public void getNeededCharactersDeep(Set needed) { Set needed2 = new LinkedHashSet<>(); - getNeededCharacters(needed2); + getNeededCharacters(needed2, swf); List needed3 = new ArrayList<>(needed2); for (int i = 0; i < needed3.size(); i++) { @@ -656,7 +656,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { if (swf.getCharacters().containsKey(characterId)) { Set needed4 = new LinkedHashSet<>(); CharacterTag character = swf.getCharacter(characterId); - character.getNeededCharacters(needed4); + character.getNeededCharacters(needed4, swf); List newItems = new ArrayList<>(); for(int n : needed4) { int index = needed3.indexOf((Integer) n); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/VideoFrameTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/VideoFrameTag.java index 69b033981..618eb9546 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/VideoFrameTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/VideoFrameTag.java @@ -99,7 +99,7 @@ public class VideoFrameTag extends Tag implements CharacterIdTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { needed.add(streamID); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java index 7fafb4d9b..aacd5ae98 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java @@ -66,7 +66,7 @@ public abstract class ButtonTag extends DrawableTag implements Timelined { public abstract boolean trackAsMenu(); @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { for (BUTTONRECORD r : getRecords()) { needed.add(r.characterId); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java index 11998f698..cf687d0f5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java @@ -116,10 +116,10 @@ public abstract class MorphShapeTag extends DrawableTag { } @Override - public void getNeededCharacters(Set needed) { - morphFillStyles.getNeededCharacters(needed); - startEdges.getNeededCharacters(needed); - endEdges.getNeededCharacters(needed); + public void getNeededCharacters(Set needed, SWF swf) { + morphFillStyles.getNeededCharacters(needed, swf); + startEdges.getNeededCharacters(needed, swf); + endEdges.getNeededCharacters(needed, swf); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/NeedsCharacters.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/NeedsCharacters.java index 3e269aa1a..a15d9310c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/NeedsCharacters.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/NeedsCharacters.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.tags.base; +import com.jpexs.decompiler.flash.SWF; import java.util.Set; /** @@ -24,7 +25,7 @@ import java.util.Set; */ public interface NeedsCharacters { - public void getNeededCharacters(Set needed); + public void getNeededCharacters(Set needed, SWF swf); public boolean replaceCharacter(int oldCharacterId, int newCharacterId); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java index 0c61c36cb..5c7d783fa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java @@ -94,10 +94,10 @@ public abstract class ShapeTag extends DrawableTag implements LazyObject { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { SHAPEWITHSTYLE shapes = getShapes(); if (shapes != null) { - getShapes().getNeededCharacters(needed); + getShapes().getNeededCharacters(needed, swf); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java index 55deb7c8b..36b5788fb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java @@ -607,7 +607,7 @@ public abstract class StaticTextTag extends TextTag { } @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { for (TEXTRECORD tr : textRecords) { if (tr.styleFlagsHasFont) { needed.add(tr.fontId); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java index 0154e7a44..cb313dfe3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java @@ -16,8 +16,11 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.DefineShape3Tag; import com.jpexs.decompiler.flash.tags.DefineShape4Tag; +import com.jpexs.decompiler.flash.tags.base.CharacterTag; +import com.jpexs.decompiler.flash.tags.base.ImageTag; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; import com.jpexs.decompiler.flash.types.annotations.Conditional; import com.jpexs.decompiler.flash.types.annotations.ConditionalType; @@ -86,7 +89,7 @@ public class FILLSTYLE implements NeedsCharacters, FieldChangeObserver, Serializ public MATRIX bitmapMatrix; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if ((fillStyleType == REPEATING_BITMAP) || (fillStyleType == CLIPPED_BITMAP) || (fillStyleType == NON_SMOOTHED_REPEATING_BITMAP) @@ -94,7 +97,10 @@ public class FILLSTYLE implements NeedsCharacters, FieldChangeObserver, Serializ if (bitmapId == 65535) { //In some cases, this special value is used, but is not used. Ignore it. (#1851) return; } - needed.add(bitmapId); + CharacterTag character = swf.getCharacter(bitmapId); + if (character instanceof ImageTag) { + needed.add(bitmapId); + } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java index 11aa6c74f..d634018fa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; import com.jpexs.decompiler.flash.types.annotations.SWFArray; import java.io.Serializable; @@ -31,9 +32,9 @@ public class FILLSTYLEARRAY implements NeedsCharacters, Serializable { public FILLSTYLE[] fillStyles; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { for (FILLSTYLE fs : fillStyles) { - fs.getNeededCharacters(needed); + fs.getNeededCharacters(needed, swf); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java index b6bea6fba..320d762bc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.DefineShape3Tag; import com.jpexs.decompiler.flash.tags.DefineShape4Tag; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; @@ -37,7 +38,7 @@ public class LINESTYLE implements NeedsCharacters, Serializable, ILINESTYLE { public RGB color; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java index 16375fce9..6c0b22c73 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; import com.jpexs.decompiler.flash.types.annotations.Conditional; import com.jpexs.decompiler.flash.types.annotations.EnumValue; @@ -88,9 +89,9 @@ public class LINESTYLE2 implements NeedsCharacters, Serializable, ILINESTYLE { public FILLSTYLE fillType; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (hasFillFlag) { - fillType.getNeededCharacters(needed); + fillType.getNeededCharacters(needed, swf); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java index 649728794..f5a7d1d26 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.DefineShape2Tag; import com.jpexs.decompiler.flash.tags.DefineShape3Tag; import com.jpexs.decompiler.flash.tags.DefineShape4Tag; @@ -41,15 +42,15 @@ public class LINESTYLEARRAY implements NeedsCharacters, Serializable { public LINESTYLE2[] lineStyles2 = new LINESTYLE2[0]; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (lineStyles != null) { for (ILINESTYLE ls : lineStyles) { - ls.getNeededCharacters(needed); + ls.getNeededCharacters(needed, swf); } } if (lineStyles != null) { for (ILINESTYLE ls : lineStyles2) { - ls.getNeededCharacters(needed); + ls.getNeededCharacters(needed, swf); } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java index 92531e028..09e82c05e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLE.java @@ -16,6 +16,9 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.tags.base.CharacterTag; +import com.jpexs.decompiler.flash.tags.base.ImageTag; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; import com.jpexs.decompiler.flash.types.annotations.Conditional; import com.jpexs.decompiler.flash.types.annotations.EnumValue; @@ -81,12 +84,18 @@ public class MORPHFILLSTYLE implements NeedsCharacters, Serializable { public MATRIX endBitmapMatrix; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if ((fillStyleType == REPEATING_BITMAP) || (fillStyleType == CLIPPED_BITMAP) || (fillStyleType == NON_SMOOTHED_REPEATING_BITMAP) || (fillStyleType == NON_SMOOTHED_CLIPPED_BITMAP)) { - needed.add(bitmapId); + if (bitmapId == 65535) { //In some cases, this special value is used, but is not used. Ignore it. (#1851) + return; + } + CharacterTag character = swf.getCharacter(bitmapId); + if (character instanceof ImageTag) { + needed.add(bitmapId); + } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLEARRAY.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLEARRAY.java index 591d2ddfd..7f28088ff 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLEARRAY.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MORPHFILLSTYLEARRAY.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; import java.io.Serializable; import java.util.Set; @@ -29,9 +30,9 @@ public class MORPHFILLSTYLEARRAY implements NeedsCharacters, Serializable { public MORPHFILLSTYLE[] fillStyles; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { for (MORPHFILLSTYLE fs : fillStyles) { - fs.getNeededCharacters(needed); + fs.getNeededCharacters(needed, swf); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java index 6b22ff368..67081bdfd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java @@ -50,9 +50,9 @@ public class SHAPE implements NeedsCharacters, Serializable { private Shape fastCachedOutline; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { for (SHAPERECORD r : shapeRecords) { - r.getNeededCharacters(needed); + r.getNeededCharacters(needed, swf); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java index 599b02073..09dc6f86a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; @@ -35,11 +36,11 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab public LINESTYLEARRAY lineStyles; @Override - public void getNeededCharacters(Set needed) { - fillStyles.getNeededCharacters(needed); - lineStyles.getNeededCharacters(needed); + public void getNeededCharacters(Set needed, SWF swf) { + fillStyles.getNeededCharacters(needed, swf); + lineStyles.getNeededCharacters(needed, swf); for (SHAPERECORD r : shapeRecords) { - r.getNeededCharacters(needed); + r.getNeededCharacters(needed, swf); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java index f87db25a1..82b782394 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java @@ -62,7 +62,7 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters, Seriali public abstract void calculateBits(); @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java index 8fd7054d9..4bede6428 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.types.shaperecords; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.types.BasicType; import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; @@ -83,9 +84,9 @@ public final class StyleChangeRecord extends SHAPERECORD implements Cloneable { public int numLineBits; @Override - public void getNeededCharacters(Set needed) { + public void getNeededCharacters(Set needed, SWF swf) { if (stateNewStyles) { - fillStyles.getNeededCharacters(needed); + fillStyles.getNeededCharacters(needed, swf); } } 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 cea91c78b..32786308c 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 @@ -1815,7 +1815,7 @@ public class XFLConverter { for (Tag tag : swf.getTags()) { if (tag instanceof ShapeTag) { Set needed = new HashSet<>(); - tag.getNeededCharacters(needed); + tag.getNeededCharacters(needed, swf); ShapeTag sht = (ShapeTag) tag; if (needed.contains(imageTag.getCharacterId())) { List fs = new ArrayList<>(); diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index f50cf22be..e0620efb1 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -5444,7 +5444,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se jpegTablesTag = imageTag.getSwf().getJtt(); } Set needed = new LinkedHashSet<>(); - imageTag.getNeededCharacters(needed); + imageTag.getNeededCharacters(needed, swf); List neededCopies = new ArrayList<>(); for (int n : needed) {