diff --git a/CHANGELOG.md b/CHANGELOG.md index b08832883..d2ca826be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ All notable changes to this project will be documented in this file. - AS1/2 Debugging - _global variable accessible - AS Debugging - Variables with flag DontEnumerate are hidden by default (can be changed in Advanced Settings) +- Basic support for PlaceImagePrivate tag ### Fixed - [#2474] Gotos incorrectly decompiled @@ -96,6 +97,7 @@ All notable changes to this project will be documented in this file. - SWF3 actions split into SWF1, SWF2 and SWF3 actions (in FFDec source code, docs, etc.) - Serial form of AS3 search results changed so the decompiler is unable to read saved AS3 search result from older versions and vice-versa +- CSMTextSettings tag renamed to CSMSettings ### Removed - Resample wav to 44kHz feature from GUI diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java index 3a9b0248c..b7079e44b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -127,7 +127,7 @@ import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.dumpview.DumpInfo; import com.jpexs.decompiler.flash.dumpview.DumpInfoSpecial; import com.jpexs.decompiler.flash.dumpview.DumpInfoSpecialType; -import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag; +import com.jpexs.decompiler.flash.tags.CSMSettingsTag; import com.jpexs.decompiler.flash.tags.DebugIDTag; import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag; @@ -181,6 +181,7 @@ import com.jpexs.decompiler.flash.tags.JPEGTablesTag; import com.jpexs.decompiler.flash.tags.MetadataTag; import com.jpexs.decompiler.flash.tags.NameCharacterTag; import com.jpexs.decompiler.flash.tags.PathsArePostScriptTag; +import com.jpexs.decompiler.flash.tags.PlaceImagePrivateTag; import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; import com.jpexs.decompiler.flash.tags.PlaceObject3Tag; import com.jpexs.decompiler.flash.tags.PlaceObject4Tag; @@ -1632,7 +1633,7 @@ public class SWFInputStream implements AutoCloseable { case 37: ret = new DefineEditTextTag(sis, data); break; - //case 38: DefineMouseTarget + //case 38: DefineVideo / DefineMouseTarget case 39: ret = new DefineSpriteTag(sis, level, data, parallel, skipUnusualTags); break; @@ -1715,7 +1716,7 @@ public class SWFInputStream implements AutoCloseable { ret = new DefineFontAlignZonesTag(sis, data); break; case 74: - ret = new CSMTextSettingsTag(sis, data); + ret = new CSMSettingsTag(sis, data); break; case 75: ret = new DefineFont3Tag(sis, data); @@ -1740,7 +1741,9 @@ public class SWFInputStream implements AutoCloseable { case 84: ret = new DefineMorphShape2Tag(sis, data); break; - //case 85: PlaceImagePrivate + case 85: + ret = new PlaceImagePrivateTag(sis, data); + break; case 86: ret = new DefineSceneAndFrameLabelDataTag(sis, data); break; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.java index e2979ce05..d90688ee2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SwfXmlImporter.java @@ -37,6 +37,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.abc.types.traits.Traits; import com.jpexs.decompiler.flash.amf.amf3.Amf3Value; +import com.jpexs.decompiler.flash.tags.CSMSettingsTag; import com.jpexs.decompiler.flash.tags.DefineSpriteTag; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.TagTypeInfo; @@ -486,6 +487,10 @@ public class SwfXmlImporter { if ("UnknownTag".equals(type)) { return new UnknownTag(swf, tagTypeId); } + + if ("CSMTextSettings".equals(type)) { + type = CSMSettingsTag.NAME; + } Class cls = swfTags.get(type); if (cls != null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMSettingsTag.java similarity index 93% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMSettingsTag.java index 7611d1c29..edca78269 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMSettingsTag.java @@ -35,11 +35,11 @@ import java.util.Set; * @author JPEXS */ @SWFVersion(from = 8) -public class CSMTextSettingsTag extends Tag implements CharacterIdTag { +public class CSMSettingsTag extends Tag implements CharacterIdTag { public static final int ID = 74; - public static final String NAME = "CSMTextSettings"; + public static final String NAME = "CSMSettings"; @SWFType(BasicType.UI16) public int textID; @@ -69,7 +69,7 @@ public class CSMTextSettingsTag extends Tag implements CharacterIdTag { * * @param swf SWF */ - public CSMTextSettingsTag(SWF swf) { + public CSMSettingsTag(SWF swf) { super(swf, ID, NAME, null); } @@ -80,7 +80,7 @@ public class CSMTextSettingsTag extends Tag implements CharacterIdTag { * @param data Data * @throws IOException On I/O error */ - public CSMTextSettingsTag(SWFInputStream sis, ByteArrayRange data) throws IOException { + public CSMSettingsTag(SWFInputStream sis, ByteArrayRange data) throws IOException { super(sis.getSwf(), ID, NAME, data); readData(sis, data, 0, false, false, false); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceImagePrivateTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceImagePrivateTag.java new file mode 100644 index 000000000..0c0b9b2a1 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceImagePrivateTag.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2010-2025 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFInputStream; +import com.jpexs.decompiler.flash.SWFOutputStream; +import com.jpexs.decompiler.flash.types.BasicType; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.decompiler.flash.types.annotations.SWFVersion; +import com.jpexs.helpers.ByteArrayRange; +import java.io.IOException; + +/** + * + * @author JPEXS + */ +@SWFVersion(from = 9) +public class PlaceImagePrivateTag extends Tag { + public static final int ID = 85; + + public static final String NAME = "PlaceImagePrivate"; + + @SWFType(BasicType.UI16) + public int imageId = 0; + + @SWFType(BasicType.UI16) + public int depth = 0; + + public RECT bounds = new RECT(); + + public PlaceImagePrivateTag(SWF swf) { + super(swf, ID, NAME, null); + } + + public PlaceImagePrivateTag(SWFInputStream sis, ByteArrayRange data) throws IOException { + super(sis.getSwf(), ID, NAME, data); + readData(sis, data, 0, false, false, false); + } + + @Override + public void readData(SWFInputStream sis, ByteArrayRange data, int level, boolean parallel, boolean skipUnusualTags, boolean lazy) throws IOException { + imageId = sis.readUI16("imageId"); + if (sis.available() > 0) { + depth = sis.readUI16("depth"); + } + if (sis.available() > 0) { + bounds = sis.readRECT("bounds"); + } + } + + @Override + public void getData(SWFOutputStream sos) throws IOException { + sos.writeUI16(imageId); + sos.writeUI16(depth); + sos.writeRECT(bounds); + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ShowFrameTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ShowFrameTag.java index b33472220..92346e15f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ShowFrameTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ShowFrameTag.java @@ -43,6 +43,7 @@ public class ShowFrameTag extends Tag { add(PlaceObject2Tag.ID); add(PlaceObject3Tag.ID); add(PlaceObject4Tag.ID); + add(PlaceImagePrivateTag.ID); add(RemoveObjectTag.ID); add(RemoveObject2Tag.ID); add(FrameLabelTag.ID); 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 82972fc80..036602dde 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 @@ -325,7 +325,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { if (knownTagInfosById == null) { Map map = new HashMap<>(); Map map2 = new HashMap<>(); - addTagInfo(map, map2, CSMTextSettingsTag.ID, CSMTextSettingsTag.class, CSMTextSettingsTag.NAME); + addTagInfo(map, map2, CSMSettingsTag.ID, CSMSettingsTag.class, CSMSettingsTag.NAME); addTagInfo(map, map2, DebugIDTag.ID, DebugIDTag.class, DebugIDTag.NAME); addTagInfo(map, map2, DefineBinaryDataTag.ID, DefineBinaryDataTag.class, DefineBinaryDataTag.NAME); addTagInfo(map, map2, DefineBitsJPEG2Tag.ID, DefineBitsJPEG2Tag.class, DefineBitsJPEG2Tag.NAME); @@ -379,6 +379,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { addTagInfo(map, map2, PlaceObject3Tag.ID, PlaceObject3Tag.class, PlaceObject3Tag.NAME); addTagInfo(map, map2, PlaceObject4Tag.ID, PlaceObject4Tag.class, PlaceObject4Tag.NAME); addTagInfo(map, map2, PlaceObjectTag.ID, PlaceObjectTag.class, PlaceObjectTag.NAME); + addTagInfo(map, map2, PlaceImagePrivateTag.ID, PlaceImagePrivateTag.class, PlaceImagePrivateTag.NAME); addTagInfo(map, map2, ProductInfoTag.ID, ProductInfoTag.class, ProductInfoTag.NAME); addTagInfo(map, map2, ProtectTag.ID, ProtectTag.class, ProtectTag.NAME); addTagInfo(map, map2, RemoveObject2Tag.ID, RemoveObject2Tag.class, RemoveObject2Tag.NAME); 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 9efb6b0a6..ab4ca38d1 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 @@ -67,7 +67,7 @@ import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.flash.helpers.StringBuilderTextWriter; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag; +import com.jpexs.decompiler.flash.tags.CSMSettingsTag; import com.jpexs.decompiler.flash.tags.DefineButton2Tag; import com.jpexs.decompiler.flash.tags.DefineButtonCxformTag; import com.jpexs.decompiler.flash.tags.DefineButtonSoundTag; @@ -4966,7 +4966,7 @@ public class XFLConverter { private static void convertText(int frame, AccessibilityBag accessibility, String instanceName, TextTag tag, MATRIX m, List filters, XFLXmlWriter writer, Map characterImportLinkageURL, Reference lastImportedId, Map characterNameMap, Set characters) throws XMLStreamException { MATRIX matrix = new MATRIX(m); - CSMTextSettingsTag csmts = null; + CSMSettingsTag csmts = null; XFLXmlWriter filterStr = new XFLXmlWriter(); if (filters != null) { filterStr.writeStartElement("filters"); @@ -4978,8 +4978,8 @@ public class XFLConverter { SWF swf = tag.getSwf(); for (Tag t : swf.getTags()) { - if (t instanceof CSMTextSettingsTag) { - CSMTextSettingsTag c = (CSMTextSettingsTag) t; + if (t instanceof CSMSettingsTag) { + CSMSettingsTag c = (CSMSettingsTag) t; if (c.textID == tag.getCharacterId()) { csmts = c; break; diff --git a/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java b/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java index 070024415..99bd166f6 100644 --- a/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java +++ b/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java @@ -28,7 +28,7 @@ public enum TreeNodeType { FONT_INFO, FONT_NAME, TEXT, - CSM_TEXT_SETTINGS, + CSM_SETTINGS, IMAGE, SHAPE, MORPH_SHAPE, @@ -88,5 +88,6 @@ public enum TreeNodeType { SET_TABINDEX, SYMBOL_CLASS, SCENE_AND_FRAME_LABEL_DATA, - DEBUG_ID + DEBUG_ID, + PLACE_IMAGE_PRIVATE } diff --git a/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java b/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java index 0627f46df..31eba14a1 100644 --- a/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java +++ b/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java @@ -33,7 +33,7 @@ import com.jpexs.decompiler.flash.gui.MainPanel; import com.jpexs.decompiler.flash.gui.TreeNodeType; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.gui.tagtree.TagTree; -import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag; +import com.jpexs.decompiler.flash.tags.CSMSettingsTag; import com.jpexs.decompiler.flash.tags.DebugIDTag; import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag; @@ -81,6 +81,7 @@ import com.jpexs.decompiler.flash.tags.ImportAssets2Tag; import com.jpexs.decompiler.flash.tags.ImportAssetsTag; import com.jpexs.decompiler.flash.tags.JPEGTablesTag; import com.jpexs.decompiler.flash.tags.MetadataTag; +import com.jpexs.decompiler.flash.tags.PlaceImagePrivateTag; import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; import com.jpexs.decompiler.flash.tags.PlaceObject3Tag; import com.jpexs.decompiler.flash.tags.PlaceObject4Tag; @@ -255,6 +256,9 @@ public class DumpTree extends JTree { case PlaceObject4Tag.NAME: nodeType = TreeNodeType.PLACE_OBJECT; break; + case PlaceImagePrivateTag.NAME: + nodeType = TreeNodeType.PLACE_IMAGE_PRIVATE; + break; case RemoveObjectTag.NAME: case RemoveObject2Tag.NAME: nodeType = TreeNodeType.REMOVE_OBJECT; @@ -269,8 +273,8 @@ public class DumpTree extends JTree { case DefineFontNameTag.NAME: nodeType = TreeNodeType.FONT_NAME; break; - case CSMTextSettingsTag.NAME: - nodeType = TreeNodeType.CSM_TEXT_SETTINGS; + case CSMSettingsTag.NAME: + nodeType = TreeNodeType.CSM_SETTINGS; break; case DefineButtonCxformTag.NAME: nodeType = TreeNodeType.BUTTON_CXFORM; @@ -323,7 +327,7 @@ public class DumpTree extends JTree { break; case DebugIDTag.NAME: nodeType = TreeNodeType.DEBUG_ID; - break; + break; default: nodeType = TreeNodeType.OTHER_TAG; } diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/csmtextsettings16.png b/src/com/jpexs/decompiler/flash/gui/graphics/csmsettings16.png similarity index 100% rename from src/com/jpexs/decompiler/flash/gui/graphics/csmtextsettings16.png rename to src/com/jpexs/decompiler/flash/gui/graphics/csmsettings16.png diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/csmtextsettings32.png b/src/com/jpexs/decompiler/flash/gui/graphics/csmsettings32.png similarity index 100% rename from src/com/jpexs/decompiler/flash/gui/graphics/csmtextsettings32.png rename to src/com/jpexs/decompiler/flash/gui/graphics/csmsettings32.png diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/placeimageprivate16.png b/src/com/jpexs/decompiler/flash/gui/graphics/placeimageprivate16.png new file mode 100644 index 000000000..37d5a66b7 Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/placeimageprivate16.png differ diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/placeimageprivate32.png b/src/com/jpexs/decompiler/flash/gui/graphics/placeimageprivate32.png new file mode 100644 index 000000000..9006f1840 Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/placeimageprivate32.png differ diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java index 0a82b3330..06bf26621 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java @@ -34,7 +34,7 @@ import com.jpexs.decompiler.flash.gui.abc.ClassesListTreeModel; import com.jpexs.decompiler.flash.gui.soleditor.Cookie; import com.jpexs.decompiler.flash.iggy.conversion.IggySwfBundle; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag; +import com.jpexs.decompiler.flash.tags.CSMSettingsTag; import com.jpexs.decompiler.flash.tags.DebugIDTag; import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; import com.jpexs.decompiler.flash.tags.DefineButton2Tag; @@ -67,6 +67,7 @@ import com.jpexs.decompiler.flash.tags.ImportAssets2Tag; import com.jpexs.decompiler.flash.tags.ImportAssetsTag; import com.jpexs.decompiler.flash.tags.JPEGTablesTag; import com.jpexs.decompiler.flash.tags.MetadataTag; +import com.jpexs.decompiler.flash.tags.PlaceImagePrivateTag; import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; import com.jpexs.decompiler.flash.tags.PlaceObject3Tag; import com.jpexs.decompiler.flash.tags.PlaceObject4Tag; @@ -326,8 +327,8 @@ public abstract class AbstractTagTree extends JTree { return TreeNodeType.TEXT; } - if (t instanceof CSMTextSettingsTag) { - return TreeNodeType.CSM_TEXT_SETTINGS; + if (t instanceof CSMSettingsTag) { + return TreeNodeType.CSM_SETTINGS; } // DefineBits, DefineBitsJPEG2, DefineBitsJPEG3, DefineBitsJPEG4, DefineBitsLossless, DefineBitsLossless2 @@ -519,6 +520,9 @@ public abstract class AbstractTagTree extends JTree { if (t instanceof PlaceObjectTypeTag) { return TreeNodeType.PLACE_OBJECT; } + if (t instanceof PlaceImagePrivateTag) { + return TreeNodeType.PLACE_IMAGE_PRIVATE; + } if (t instanceof RemoveTag) { return TreeNodeType.REMOVE_OBJECT; } @@ -869,7 +873,7 @@ public abstract class AbstractTagTree extends JTree { RemoveObjectTag.ID, RemoveObject2Tag.ID, ShowFrameTag.ID, FrameLabelTag.ID, StartSoundTag.ID, StartSound2Tag.ID, VideoFrameTag.ID, SoundStreamBlockTag.ID, SoundStreamHeadTag.ID, SoundStreamHead2Tag.ID, - SetTabIndexTag.ID + SetTabIndexTag.ID, PlaceImagePrivateTag.ID ); } @@ -945,8 +949,8 @@ public abstract class AbstractTagTree extends JTree { return TreeNodeType.TEXT; } - if (cl == CSMTextSettingsTag.class) { - return TreeNodeType.CSM_TEXT_SETTINGS; + if (cl == CSMSettingsTag.class) { + return TreeNodeType.CSM_SETTINGS; } // DefineBits, DefineBitsJPEG2, DefineBitsJPEG3, DefineBitsJPEG4, DefineBitsLossless, DefineBitsLossless2 @@ -1036,6 +1040,9 @@ public abstract class AbstractTagTree extends JTree { if (PlaceObjectTypeTag.class.isAssignableFrom(cl)) { return TreeNodeType.PLACE_OBJECT; } + if (cl == PlaceImagePrivateTag.class) { + return TreeNodeType.PLACE_IMAGE_PRIVATE; + } if (RemoveTag.class.isAssignableFrom(cl)) { return TreeNodeType.REMOVE_OBJECT; } @@ -1110,7 +1117,7 @@ public abstract class AbstractTagTree extends JTree { return Arrays.asList(DefineFontNameTag.ID, DefineFontAlignZonesTag.ID, DefineFontInfoTag.ID, DefineFontInfo2Tag.ID); } if (TextTag.class.isAssignableFrom(cls)) { - return Arrays.asList(CSMTextSettingsTag.ID); + return Arrays.asList(CSMSettingsTag.ID); } if (cls == DefineButtonTag.class) { return Arrays.asList(DefineButtonCxformTag.ID, DefineButtonSoundTag.ID, DefineScalingGridTag.ID); diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java index 6155c5f68..b353da4cb 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagIdClassMap.java @@ -16,7 +16,7 @@ */ package com.jpexs.decompiler.flash.gui.tagtree; -import com.jpexs.decompiler.flash.tags.CSMTextSettingsTag; +import com.jpexs.decompiler.flash.tags.CSMSettingsTag; import com.jpexs.decompiler.flash.tags.DebugIDTag; import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag; @@ -66,6 +66,7 @@ import com.jpexs.decompiler.flash.tags.ImportAssets2Tag; import com.jpexs.decompiler.flash.tags.ImportAssetsTag; import com.jpexs.decompiler.flash.tags.JPEGTablesTag; import com.jpexs.decompiler.flash.tags.MetadataTag; +import com.jpexs.decompiler.flash.tags.PlaceImagePrivateTag; import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; import com.jpexs.decompiler.flash.tags.PlaceObject3Tag; import com.jpexs.decompiler.flash.tags.PlaceObject4Tag; @@ -108,7 +109,7 @@ public class TagIdClassMap { private static final Map classTagIdMap = new HashMap<>(); static { - addTag(CSMTextSettingsTag.ID, CSMTextSettingsTag.class); + addTag(CSMSettingsTag.ID, CSMSettingsTag.class); addTag(DebugIDTag.ID, DebugIDTag.class); addTag(DefineBinaryDataTag.ID, DefineBinaryDataTag.class); addTag(DefineBitsJPEG2Tag.ID, DefineBitsJPEG2Tag.class); @@ -162,6 +163,7 @@ public class TagIdClassMap { addTag(PlaceObject3Tag.ID, PlaceObject3Tag.class); addTag(PlaceObject4Tag.ID, PlaceObject4Tag.class); addTag(PlaceObjectTag.ID, PlaceObjectTag.class); + addTag(PlaceImagePrivateTag.ID, PlaceImagePrivateTag.class); addTag(ProductInfoTag.ID, ProductInfoTag.class); addTag(ProtectTag.ID, ProtectTag.class); addTag(RemoveObject2Tag.ID, RemoveObject2Tag.class); diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index dc2a265a0..6fe7c34b9 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -62,6 +62,7 @@ import com.jpexs.decompiler.flash.tags.ImportAssets2Tag; import com.jpexs.decompiler.flash.tags.ImportAssetsTag; import com.jpexs.decompiler.flash.tags.JPEGTablesTag; import com.jpexs.decompiler.flash.tags.MetadataTag; +import com.jpexs.decompiler.flash.tags.PlaceImagePrivateTag; import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; import com.jpexs.decompiler.flash.tags.PlaceObject3Tag; import com.jpexs.decompiler.flash.tags.PlaceObject4Tag; @@ -292,7 +293,7 @@ public class TagTree extends AbstractTagTree { RemoveObjectTag.ID, RemoveObject2Tag.ID, ShowFrameTag.ID, FrameLabelTag.ID, StartSoundTag.ID, StartSound2Tag.ID, VideoFrameTag.ID, SoundStreamBlockTag.ID, SoundStreamHeadTag.ID, SoundStreamHead2Tag.ID, - SetTabIndexTag.ID); + SetTabIndexTag.ID, PlaceImagePrivateTag.ID); break; case TagTreeModel.FOLDER_OTHERS: ret = Arrays.asList( diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java index eeb13dda9..0c679f2f6 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java @@ -81,6 +81,7 @@ import com.jpexs.decompiler.flash.tags.ExportAssetsTag; import com.jpexs.decompiler.flash.tags.FileAttributesTag; import com.jpexs.decompiler.flash.tags.FrameLabelTag; import com.jpexs.decompiler.flash.tags.MetadataTag; +import com.jpexs.decompiler.flash.tags.PlaceImagePrivateTag; import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; import com.jpexs.decompiler.flash.tags.PlaceObject3Tag; import com.jpexs.decompiler.flash.tags.PlaceObject4Tag; @@ -5848,6 +5849,7 @@ public class TagTreeContextMenu extends JPopupMenu { */ private boolean isFrameTagToDelete(Tag tag) { return (tag instanceof PlaceObjectTypeTag) + || (tag instanceof PlaceImagePrivateTag) || (tag instanceof RemoveTag) || (tag instanceof FrameLabelTag) || (tag instanceof StartSoundTag)