From a366516da40576248856aefd766e3e14f29ec6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Mon, 14 Jan 2013 21:04:08 +0100 Subject: [PATCH] Faster tag displaying, bitmapdata fix --- trunk/src/com/jpexs/asdec/Main.java | 2 - trunk/src/com/jpexs/asdec/SWF.java | 6 +- trunk/src/com/jpexs/asdec/SWFInputStream.java | 7 +- trunk/src/com/jpexs/asdec/action/Action.java | 74 +++++++++---------- trunk/src/com/jpexs/asdec/action/TagNode.java | 31 ++++---- .../jpexs/asdec/action/gui/ActionPanel.java | 1 - .../jpexs/asdec/action/gui/TagTreeModel.java | 6 +- .../jpexs/asdec/action/swf4/ActionPop.java | 2 +- .../asdec/action/treemodel/BreakTreeItem.java | 2 +- .../action/treemodel/ContinueTreeItem.java | 2 +- .../action/treemodel/DirectValueTreeItem.java | 4 +- .../action/treemodel/NewMethodTreeItem.java | 15 ++-- trunk/src/com/jpexs/asdec/gui/MainFrame.java | 8 +- trunk/src/com/jpexs/asdec/gui/TagNode.java | 1 - trunk/src/com/jpexs/asdec/gui/TagPanel.java | 69 +++++++++-------- .../jpexs/asdec/tags/DefineEditTextTag.java | 2 +- .../com/jpexs/asdec/tags/DefineFont2Tag.java | 10 ++- .../com/jpexs/asdec/tags/DefineFont3Tag.java | 8 +- .../com/jpexs/asdec/tags/DefineFontTag.java | 9 ++- .../asdec/tags/DefineMorphShape2Tag.java | 2 +- .../jpexs/asdec/tags/DefineMorphShapeTag.java | 2 +- .../com/jpexs/asdec/tags/DefineShape2Tag.java | 2 +- .../com/jpexs/asdec/tags/DefineShape3Tag.java | 2 +- .../com/jpexs/asdec/tags/DefineShape4Tag.java | 2 +- .../com/jpexs/asdec/tags/DefineShapeTag.java | 2 +- .../com/jpexs/asdec/tags/DefineSpriteTag.java | 11 +++ .../com/jpexs/asdec/tags/DefineText2Tag.java | 15 +++- .../com/jpexs/asdec/tags/DefineTextTag.java | 13 ++++ .../com/jpexs/asdec/tags/PlaceObject2Tag.java | 11 +++ .../com/jpexs/asdec/tags/PlaceObject3Tag.java | 11 +++ .../com/jpexs/asdec/tags/PlaceObjectTag.java | 9 +++ trunk/src/com/jpexs/asdec/tags/Tag.java | 6 ++ .../com/jpexs/asdec/tags/base/AloneTag.java | 1 - .../com/jpexs/asdec/tags/base/FontTag.java | 2 + .../src/com/jpexs/asdec/types/GLYPHENTRY.java | 4 +- 35 files changed, 216 insertions(+), 138 deletions(-) diff --git a/trunk/src/com/jpexs/asdec/Main.java b/trunk/src/com/jpexs/asdec/Main.java index a00883c3f..45b69e2a8 100644 --- a/trunk/src/com/jpexs/asdec/Main.java +++ b/trunk/src/com/jpexs/asdec/Main.java @@ -77,9 +77,7 @@ public class Main { return commandLineMode; } public static boolean DEBUG_COPY = false; - public static boolean FLASH_PLAYER = true; - /** * Debug mode = throwing an error when comparing original file and recompiled */ diff --git a/trunk/src/com/jpexs/asdec/SWF.java b/trunk/src/com/jpexs/asdec/SWF.java index 905148cf4..58170e0a9 100644 --- a/trunk/src/com/jpexs/asdec/SWF.java +++ b/trunk/src/com/jpexs/asdec/SWF.java @@ -18,7 +18,6 @@ package com.jpexs.asdec; import SevenZip.Compression.LZMA.Encoder; import com.jpexs.asdec.action.TagNode; -import com.jpexs.asdec.helpers.Highlighting; import com.jpexs.asdec.tags.DefineBitsJPEG2Tag; import com.jpexs.asdec.tags.DefineBitsJPEG3Tag; import com.jpexs.asdec.tags.DefineBitsJPEG4Tag; @@ -28,7 +27,6 @@ import com.jpexs.asdec.tags.DefineBitsTag; import com.jpexs.asdec.tags.DoABCTag; import com.jpexs.asdec.tags.JPEGTablesTag; import com.jpexs.asdec.tags.Tag; -import com.jpexs.asdec.tags.base.ASMSource; import com.jpexs.asdec.types.RECT; import java.io.*; import java.util.ArrayList; @@ -373,14 +371,12 @@ public class SWF { if (!asV3Found) { List list2 = new ArrayList(); list2.addAll(tags); - List list=TagNode.createTagList(list2); + List list = TagNode.createTagList(list2); TagNode.setExport(list, true); return TagNode.exportNode(list, outdir, isPcode); } return asV3Found; } - - protected HashSet listeners = new HashSet(); public void addEventListener(EventListener listener) { diff --git a/trunk/src/com/jpexs/asdec/SWFInputStream.java b/trunk/src/com/jpexs/asdec/SWFInputStream.java index 6bf64ed90..6e8cd104c 100644 --- a/trunk/src/com/jpexs/asdec/SWFInputStream.java +++ b/trunk/src/com/jpexs/asdec/SWFInputStream.java @@ -1931,7 +1931,7 @@ public class SWFInputStream extends InputStream { int glyphCount = readUI8(); ret.glyphEntries = new GLYPHENTRY[glyphCount]; for (int i = 0; i < glyphCount; i++) { - ret.glyphEntries[i] = readGLYPHENTRY(glyphBits, advanceBits); + ret.glyphEntries[i] = readGLYPHENTRY(glyphBits, advanceBits); } alignByte(); return ret; @@ -2236,13 +2236,10 @@ public class SWFInputStream extends InputStream { dataLen += 4; pix24.add(readPIX24()); } - dataLen++; } - x--; - while ((x % 4) != 0) { + while ((dataLen % 4) != 0) { dataLen++; readUI8(); - x++; } } if (bitmapFormat == DefineBitsLosslessTag.FORMAT_15BIT_RGB) { diff --git a/trunk/src/com/jpexs/asdec/action/Action.java b/trunk/src/com/jpexs/asdec/action/Action.java index 2b8bbebb1..b244c5816 100644 --- a/trunk/src/com/jpexs/asdec/action/Action.java +++ b/trunk/src/com/jpexs/asdec/action/Action.java @@ -502,12 +502,12 @@ public class Action { } if (stripped.startsWith("continue ")) { if (loopStack.size() > 0) { - int pos=loopStack.size()-1; - String loopname=""; - do{ - loopname=loopStack.get(pos); + int pos = loopStack.size() - 1; + String loopname = ""; + do { + loopname = loopStack.get(pos); pos--; - }while((pos>=0)&&(loopname.startsWith("loopswitch"))); + } while ((pos >= 0) && (loopname.startsWith("loopswitch"))); if (stripped.equals("continue " + loopname + ";")) { parts[p] = parts[p].replace(" " + loopname, ""); } @@ -591,7 +591,7 @@ public class Action { return treeToString(tree); } catch (Exception ex) { - Logger.getLogger(Action.class.getName()).log(Level.SEVERE,null,ex); + Logger.getLogger(Action.class.getName()).log(Level.SEVERE, null, ex); return "//Decompilation error :" + ex.getLocalizedMessage(); } } @@ -605,7 +605,7 @@ public class Action { * @return List of treeItems */ public static List actionsToTree(HashMap regNames, List actions, int version) { - Stack stack=new Stack(); + Stack stack = new Stack(); return actionsToTree(regNames, new ArrayList(), new ArrayList(), getActionsAllIfsOrJumps(actions), stack, new ConstantPool(), actions, 0, actions.size() - 1, version); } @@ -641,35 +641,35 @@ public class Action { long addr = ip2adr(actions, ip, version); if (unknownJumps.contains(addr)) { unknownJumps.remove(new Long(addr)); - /* boolean switchFound = false; - for (int i = output.size() - 1; i >= 0; i--) { - if (output.get(i) instanceof SwitchTreeItem) { - if (((SwitchTreeItem) output.get(i)).defaultCommands == null) { - List continues = ((SwitchTreeItem) output.get(i)).getContinues(); - boolean breakFound = false; - for (ContinueTreeItem cti : continues) { - if (cti.loopPos == addr) { - cti.isKnown = true; - cti.isBreak = true; - ((SwitchTreeItem) output.get(i)).loopBreak = addr; - breakFound = true; - } - } - if (breakFound) { - switchFound = true; - ((SwitchTreeItem) output.get(i)).defaultCommands = new ArrayList(); - for (int k = i + 1; k < output.size(); k++) { - ((SwitchTreeItem) output.get(i)).defaultCommands.add(output.remove(i + 1)); - } - } - } - break; - } - }*/ - /* if (!switchFound) { - throw new UnknownJumpException(stack, addr, output); - }*/ - + /* boolean switchFound = false; + for (int i = output.size() - 1; i >= 0; i--) { + if (output.get(i) instanceof SwitchTreeItem) { + if (((SwitchTreeItem) output.get(i)).defaultCommands == null) { + List continues = ((SwitchTreeItem) output.get(i)).getContinues(); + boolean breakFound = false; + for (ContinueTreeItem cti : continues) { + if (cti.loopPos == addr) { + cti.isKnown = true; + cti.isBreak = true; + ((SwitchTreeItem) output.get(i)).loopBreak = addr; + breakFound = true; + } + } + if (breakFound) { + switchFound = true; + ((SwitchTreeItem) output.get(i)).defaultCommands = new ArrayList(); + for (int k = i + 1; k < output.size(); k++) { + ((SwitchTreeItem) output.get(i)).defaultCommands.add(output.remove(i + 1)); + } + } + } + break; + } + }*/ + /* if (!switchFound) { + throw new UnknownJumpException(stack, addr, output); + }*/ + throw new UnknownJumpException(stack, addr, output); } if (ip > end) { @@ -965,7 +965,7 @@ public class Action { } } } while (ip < end); - loopList.add(new Loop(-1,ip2adr(actions,ip,version))); + loopList.add(new Loop(-1, ip2adr(actions, ip, version))); for (int i = 0; i < caseBodyIps.size(); i++) { int caseEnd = ip - 1; if (i < caseBodyIps.size() - 1) { diff --git a/trunk/src/com/jpexs/asdec/action/TagNode.java b/trunk/src/com/jpexs/asdec/action/TagNode.java index f7c449296..1de6801d6 100644 --- a/trunk/src/com/jpexs/asdec/action/TagNode.java +++ b/trunk/src/com/jpexs/asdec/action/TagNode.java @@ -37,7 +37,7 @@ public class TagNode { public List subItems; public Object tag; - public boolean export=false; + public boolean export = false; public TagNode(Object tag) { this.tag = tag; @@ -117,26 +117,27 @@ public class TagNode { } return ret; } - - public static void setExport(List nodeList,boolean export){ - for(TagNode node:nodeList){ - node.export=export; + + public static void setExport(List nodeList, boolean export) { + for (TagNode node : nodeList) { + node.export = export; setExport(node.subItems, export); } } - - public static boolean exportNode(List nodeList, String outdir, boolean isPcode){ - return exportNode(nodeList,outdir,isPcode,null); + + public static boolean exportNode(List nodeList, String outdir, boolean isPcode) { + return exportNode(nodeList, outdir, isPcode, null); } + public static boolean exportNode(List nodeList, String outdir, boolean isPcode, EventListener ev) { - File dir = new File(outdir); + File dir = new File(outdir); List existingNames = new ArrayList(); for (TagNode node : nodeList) { String name = ""; if (node.tag instanceof Tag) { name = ((Tag) node.tag).getExportName(); - }else{ - name=node.tag.toString(); + } else { + name = node.tag.toString(); } int i = 1; String baseName = name; @@ -146,14 +147,14 @@ public class TagNode { } existingNames.add(name); if (node.subItems.isEmpty()) { - if ((node.tag instanceof ASMSource)&&(node.export)) { + if ((node.tag instanceof ASMSource) && (node.export)) { if (!dir.exists()) { dir.mkdirs(); } try { String f = outdir + File.separatorChar + name + ".as"; - if(ev!=null){ - ev.handleEvent("export", "Exporting " + f + " ..."); + if (ev != null) { + ev.handleEvent("export", "Exporting " + f + " ..."); } String ret; if (isPcode) { @@ -172,7 +173,7 @@ public class TagNode { } } } else { - exportNode(node.subItems, outdir + File.separatorChar + name, isPcode,ev); + exportNode(node.subItems, outdir + File.separatorChar + name, isPcode, ev); } } diff --git a/trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java b/trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java index d16adb126..195d6048b 100644 --- a/trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java +++ b/trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java @@ -18,7 +18,6 @@ package com.jpexs.asdec.action.gui; import com.jpexs.asdec.Main; import com.jpexs.asdec.SWF; -import com.jpexs.asdec.abc.gui.TreeElement; import com.jpexs.asdec.action.TagNode; import com.jpexs.asdec.action.parser.ASMParser; import com.jpexs.asdec.action.parser.ParseException; diff --git a/trunk/src/com/jpexs/asdec/action/gui/TagTreeModel.java b/trunk/src/com/jpexs/asdec/action/gui/TagTreeModel.java index 24be9107e..96c90bdd6 100644 --- a/trunk/src/com/jpexs/asdec/action/gui/TagTreeModel.java +++ b/trunk/src/com/jpexs/asdec/action/gui/TagTreeModel.java @@ -34,11 +34,11 @@ public class TagTreeModel implements TreeModel { list2.addAll(list); this.list = TagNode.createTagList(list2); } - - public List getNodeList(){ + + public List getNodeList() { return list; } - + public Object getRoot() { return root; } diff --git a/trunk/src/com/jpexs/asdec/action/swf4/ActionPop.java b/trunk/src/com/jpexs/asdec/action/swf4/ActionPop.java index b3f92cd04..2b58f8b30 100644 --- a/trunk/src/com/jpexs/asdec/action/swf4/ActionPop.java +++ b/trunk/src/com/jpexs/asdec/action/swf4/ActionPop.java @@ -37,7 +37,7 @@ public class ActionPop extends Action { @Override public void translate(Stack stack, ConstantPool constants, List output, java.util.HashMap regNames) { - if(stack.isEmpty()){ + if (stack.isEmpty()) { return; } TreeItem val = stack.pop(); diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/BreakTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/BreakTreeItem.java index e8dfb6e01..4c5b1e583 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/BreakTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/BreakTreeItem.java @@ -35,6 +35,6 @@ public class BreakTreeItem extends TreeItem { @Override public String toString(ConstantPool constants) { - return hilight("break") + " loop" + loopPos+";"; + return hilight("break") + " loop" + loopPos + ";"; } } diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/ContinueTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/ContinueTreeItem.java index 90ebe0021..fada05448 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/ContinueTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/ContinueTreeItem.java @@ -36,6 +36,6 @@ public class ContinueTreeItem extends TreeItem { @Override public String toString(ConstantPool constants) { - return hilight(isBreak ? "break" : "continue") + " " + (isKnown ? "loop" : "unk") + loopPos+";"; + return hilight(isBreak ? "break" : "continue") + " " + (isKnown ? "loop" : "unk") + loopPos + ";"; } } diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java index 5b9b842db..36e4efbd1 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/DirectValueTreeItem.java @@ -32,7 +32,7 @@ public class DirectValueTreeItem extends TreeItem { this.value = value; } - public String toStringNoQuotes(ConstantPool constants){ + public String toStringNoQuotes(ConstantPool constants) { if (value instanceof Double) { if (Double.compare((double) (Double) value, 0) == 0) { return "0"; @@ -51,7 +51,7 @@ public class DirectValueTreeItem extends TreeItem { } return value.toString(); } - + @Override public String toString(ConstantPool constants) { if (value instanceof Double) { diff --git a/trunk/src/com/jpexs/asdec/action/treemodel/NewMethodTreeItem.java b/trunk/src/com/jpexs/asdec/action/treemodel/NewMethodTreeItem.java index 65acacf4c..9e118713b 100644 --- a/trunk/src/com/jpexs/asdec/action/treemodel/NewMethodTreeItem.java +++ b/trunk/src/com/jpexs/asdec/action/treemodel/NewMethodTreeItem.java @@ -43,21 +43,20 @@ public class NewMethodTreeItem extends TreeItem { paramStr += arguments.get(t).toString(constants); } boolean blankMethod = false; - String methodNameStr=""; + String methodNameStr = ""; if (methodName instanceof DirectValueTreeItem) { if (((DirectValueTreeItem) methodName).value instanceof Undefined) { blankMethod = true; - }else - if (((DirectValueTreeItem) methodName).value instanceof String) { + } else if (((DirectValueTreeItem) methodName).value instanceof String) { if (((DirectValueTreeItem) methodName).value.equals("")) { blankMethod = true; } - methodNameStr=((DirectValueTreeItem) methodName).toStringNoQuotes(constants); - }else{ - methodNameStr=methodName.toString(constants); + methodNameStr = ((DirectValueTreeItem) methodName).toStringNoQuotes(constants); + } else { + methodNameStr = methodName.toString(constants); } - }else{ - methodNameStr=methodName.toString(constants); + } else { + methodNameStr = methodName.toString(constants); } if (blankMethod) { return scriptObject.toString(constants) + "(" + paramStr + ")"; diff --git a/trunk/src/com/jpexs/asdec/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/gui/MainFrame.java index 8c9a733fc..3fe5d0646 100644 --- a/trunk/src/com/jpexs/asdec/gui/MainFrame.java +++ b/trunk/src/com/jpexs/asdec/gui/MainFrame.java @@ -600,13 +600,13 @@ public class MainFrame extends JFrame implements ActionListener { Main.startWork("Exporting " + (i + 1) + "/" + tlsList.size() + " " + tls.abc.script_info[tls.scriptIndex].getPath(tls.abc) + " ..."); tls.abc.script_info[tls.scriptIndex].export(tls.abc, abcPanel.list, selFile, isPcode); } - } else if(actionPanel!=null) { - List nodes=actionPanel.getSelectedNodes(); + } else if (actionPanel != null) { + List nodes = actionPanel.getSelectedNodes(); if (nodes.isEmpty()) { JOptionPane.showMessageDialog(null, "No nodes selected!"); } - com.jpexs.asdec.action.gui.TagTreeModel ttm=(com.jpexs.asdec.action.gui.TagTreeModel)actionPanel.tagTree.getModel(); - List allnodes=ttm.getNodeList(); + com.jpexs.asdec.action.gui.TagTreeModel ttm = (com.jpexs.asdec.action.gui.TagTreeModel) actionPanel.tagTree.getModel(); + List allnodes = ttm.getNodeList(); com.jpexs.asdec.action.TagNode.setExport(allnodes, false); com.jpexs.asdec.action.TagNode.setExport(nodes, true); com.jpexs.asdec.action.TagNode.exportNode(allnodes, selFile, isPcode); diff --git a/trunk/src/com/jpexs/asdec/gui/TagNode.java b/trunk/src/com/jpexs/asdec/gui/TagNode.java index 2f76b9109..9cd5b416a 100644 --- a/trunk/src/com/jpexs/asdec/gui/TagNode.java +++ b/trunk/src/com/jpexs/asdec/gui/TagNode.java @@ -16,7 +16,6 @@ */ package com.jpexs.asdec.gui; -import com.jpexs.asdec.gui.TagNode; import com.jpexs.asdec.tags.DefineBitsJPEG2Tag; import com.jpexs.asdec.tags.DefineBitsJPEG3Tag; import com.jpexs.asdec.tags.DefineBitsJPEG4Tag; diff --git a/trunk/src/com/jpexs/asdec/gui/TagPanel.java b/trunk/src/com/jpexs/asdec/gui/TagPanel.java index 8a6c2431e..5cc094d07 100644 --- a/trunk/src/com/jpexs/asdec/gui/TagPanel.java +++ b/trunk/src/com/jpexs/asdec/gui/TagPanel.java @@ -25,30 +25,19 @@ import com.jpexs.asdec.tags.DefineBitsJPEG4Tag; import com.jpexs.asdec.tags.DefineBitsLossless2Tag; import com.jpexs.asdec.tags.DefineBitsLosslessTag; import com.jpexs.asdec.tags.DefineBitsTag; -import com.jpexs.asdec.tags.DefineFont2Tag; -import com.jpexs.asdec.tags.DefineFont3Tag; -import com.jpexs.asdec.tags.DefineFontTag; import com.jpexs.asdec.tags.DefineMorphShape2Tag; import com.jpexs.asdec.tags.DefineMorphShapeTag; -import com.jpexs.asdec.tags.DefineSpriteTag; import com.jpexs.asdec.tags.DefineTextTag; -import com.jpexs.asdec.tags.DoABCTag; -import com.jpexs.asdec.tags.DoActionTag; -import com.jpexs.asdec.tags.DoInitActionTag; import com.jpexs.asdec.tags.EndTag; import com.jpexs.asdec.tags.JPEGTablesTag; import com.jpexs.asdec.tags.PlaceObject2Tag; -import com.jpexs.asdec.tags.PlaceObject3Tag; -import com.jpexs.asdec.tags.PlaceObjectTag; -import com.jpexs.asdec.tags.RemoveObject2Tag; -import com.jpexs.asdec.tags.RemoveObjectTag; import com.jpexs.asdec.tags.SetBackgroundColorTag; import com.jpexs.asdec.tags.ShowFrameTag; -import com.jpexs.asdec.tags.SymbolClassTag; import com.jpexs.asdec.tags.Tag; import com.jpexs.asdec.tags.base.AloneTag; import com.jpexs.asdec.tags.base.BoundedTag; import com.jpexs.asdec.tags.base.CharacterTag; +import com.jpexs.asdec.tags.base.Container; import com.jpexs.asdec.tags.base.FontTag; import com.jpexs.asdec.types.GLYPHENTRY; import com.jpexs.asdec.types.MATRIX; @@ -59,15 +48,19 @@ import com.jpexs.flashplayer.FlashPanel; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; -import java.awt.Dimension; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.BorderFactory; import javax.swing.JList; import javax.swing.JPanel; +import javax.swing.JScrollPane; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -86,6 +79,18 @@ public class TagPanel extends JPanel implements ListSelectionListener { final static String CARDIMAGEPANEL = "Image card"; final static String CARDEMPTYPANEL = "Empty card"; private JPEGTablesTag jtt; + private HashMap characters; + + private void parseCharacters(List list) { + for (Object t : list) { + if (t instanceof CharacterTag) { + characters.put(((CharacterTag) t).getCharacterID(), (CharacterTag) t); + } + if (t instanceof Container) { + parseCharacters(((Container) t).getSubItems()); + } + } + } public TagPanel(List list, SWF swf) { this.swf = swf; @@ -94,10 +99,13 @@ public class TagPanel extends JPanel implements ListSelectionListener { jtt = (JPEGTablesTag) t; } } + characters = new HashMap(); + List list2 = new ArrayList(); + list2.addAll(swf.tags); + parseCharacters(list2); tagList = new JList(list.toArray(new Tag[list.size()])); tagList.addListSelectionListener(this); - tagList.setPreferredSize(new Dimension(200, 1)); - tagList.setSize(200, 1); + setLayout(new BorderLayout()); if (Main.FLASH_PLAYER) { flashPanel = new FlashPanel(); @@ -114,7 +122,7 @@ public class TagPanel extends JPanel implements ListSelectionListener { tagList.setBorder(BorderFactory.createLoweredBevelBorder()); displayPanel.setBorder(BorderFactory.createLineBorder(Color.black)); - add(tagList, BorderLayout.WEST); + add(new JScrollPane(tagList), BorderLayout.WEST); add(displayPanel, BorderLayout.CENTER); } private File tempFile; @@ -168,34 +176,25 @@ public class TagPanel extends JPanel implements ListSelectionListener { sos2.writeUI8(swf.frameRate); sos2.writeUI16(100); //framecnt sos2.writeTag(new SetBackgroundColorTag(new RGB(255, 255, 255))); - - if (tagObj instanceof AloneTag) { - sos2.writeTag(tagObj); + if (tagObj instanceof DefineBitsTag) { + if (jtt != null) { + sos2.writeTag(jtt); + } + } else if (tagObj instanceof AloneTag) { } else { - for (Tag tag : swf.tags) { - if ((!(tag instanceof PlaceObjectTag)) - && (!(tag instanceof PlaceObject2Tag)) - && (!(tag instanceof PlaceObject3Tag)) - && (!(tag instanceof RemoveObjectTag)) - && (!(tag instanceof RemoveObject2Tag)) - && (!(tag instanceof DoActionTag)) - && (!(tag instanceof DoInitActionTag)) - && (!(tag instanceof DoABCTag)) - && (!(tag instanceof SymbolClassTag)) - && (!(tag instanceof ShowFrameTag)) - && (!(tag instanceof SetBackgroundColorTag))) { - sos2.writeTag(tag); - } + Set needed = tagObj.getNeededCharacters(); + for (int n : needed) { + sos2.writeTag(characters.get(n)); } } + sos2.writeTag(tagObj); int chtId = 0; if (tagObj instanceof CharacterTag) { chtId = ((CharacterTag) tagObj).getCharacterID(); } - //sos2.writeTag((Tag) tagObj); MATRIX mat = new MATRIX(); mat.hasRotate = false; mat.hasScale = false; @@ -269,7 +268,7 @@ public class TagPanel extends JPanel implements ListSelectionListener { } } catch (Exception ex) { - + Logger.getLogger(TagPanel.class.getName()).log(Level.SEVERE, null, ex); } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java b/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java index 3b5c752f0..d0de71368 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java @@ -69,7 +69,7 @@ public class DefineEditTextTag extends CharacterTag implements BoundedTag { public RECT getRect() { return bounds; } - + @Override public int getCharacterID() { return characterID; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java index 3873c7f20..9568bf5c4 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java @@ -19,6 +19,7 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; import com.jpexs.asdec.abc.CopyOutputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import com.jpexs.asdec.tags.base.FontTag; import com.jpexs.asdec.types.KERNINGRECORD; import com.jpexs.asdec.types.LANGCODE; @@ -34,7 +35,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineFont2Tag extends Tag implements FontTag { +public class DefineFont2Tag extends CharacterTag implements FontTag { public int fontId; public boolean fontFlagsHasLayout; @@ -207,7 +208,7 @@ public class DefineFont2Tag extends Tag implements FontTag { } } } - + @Override public int getFontId() { return fontId; @@ -217,4 +218,9 @@ public class DefineFont2Tag extends Tag implements FontTag { public SHAPE[] getGlyphShapeTable() { return glyphShapeTable; } + + @Override + public int getCharacterID() { + return fontId; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java index f6ae73f5a..39b8d29c5 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java @@ -19,6 +19,7 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; import com.jpexs.asdec.abc.CopyOutputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import com.jpexs.asdec.tags.base.FontTag; import com.jpexs.asdec.types.KERNINGRECORD; import com.jpexs.asdec.types.LANGCODE; @@ -29,7 +30,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; -public class DefineFont3Tag extends Tag implements FontTag { +public class DefineFont3Tag extends CharacterTag implements FontTag { public int fontId; public boolean fontFlagsHasLayout; @@ -208,4 +209,9 @@ public class DefineFont3Tag extends Tag implements FontTag { public SHAPE[] getGlyphShapeTable() { return glyphShapeTable; } + + @Override + public int getCharacterID() { + return fontId; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java b/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java index a39d51b06..35a61c599 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java @@ -18,7 +18,7 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; -import com.jpexs.asdec.tags.base.AloneTag; +import com.jpexs.asdec.tags.base.CharacterTag; import com.jpexs.asdec.tags.base.FontTag; import com.jpexs.asdec.types.SHAPE; import java.io.ByteArrayInputStream; @@ -31,7 +31,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineFontTag extends Tag implements FontTag { +public class DefineFontTag extends CharacterTag implements FontTag { public int fontId; public int offsetTable[]; @@ -94,4 +94,9 @@ public class DefineFontTag extends Tag implements FontTag { public SHAPE[] getGlyphShapeTable() { return glyphShapeTable; } + + @Override + public int getCharacterID() { + return fontId; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java index 4185d08df..1f1993809 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java @@ -35,7 +35,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineMorphShape2Tag extends CharacterTag implements BoundedTag,AloneTag { +public class DefineMorphShape2Tag extends CharacterTag implements BoundedTag, AloneTag { public int characterId; public RECT startBounds; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java b/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java index 12caa3cd7..e59db24e2 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java @@ -35,7 +35,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineMorphShapeTag extends CharacterTag implements BoundedTag,AloneTag { +public class DefineMorphShapeTag extends CharacterTag implements BoundedTag, AloneTag { public int characterId; public RECT startBounds; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java index 496ab5156..557ff41ec 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java @@ -25,7 +25,7 @@ import com.jpexs.asdec.types.SHAPEWITHSTYLE; import java.io.ByteArrayInputStream; import java.io.IOException; -public class DefineShape2Tag extends CharacterTag implements BoundedTag,AloneTag { +public class DefineShape2Tag extends CharacterTag implements BoundedTag, AloneTag { public int shapeId; public RECT shapeBounds; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java index 198923649..2b6c1fa70 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java @@ -25,7 +25,7 @@ import com.jpexs.asdec.types.SHAPEWITHSTYLE; import java.io.ByteArrayInputStream; import java.io.IOException; -public class DefineShape3Tag extends CharacterTag implements BoundedTag,AloneTag { +public class DefineShape3Tag extends CharacterTag implements BoundedTag, AloneTag { public int shapeId; public RECT shapeBounds; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java index 46fdcfcef..44c542a24 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java @@ -25,7 +25,7 @@ import com.jpexs.asdec.types.SHAPEWITHSTYLE; import java.io.ByteArrayInputStream; import java.io.IOException; -public class DefineShape4Tag extends CharacterTag implements BoundedTag,AloneTag { +public class DefineShape4Tag extends CharacterTag implements BoundedTag, AloneTag { public int shapeId; public RECT shapeBounds; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java b/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java index 771b366ff..49bf33b35 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java @@ -25,7 +25,7 @@ import com.jpexs.asdec.types.SHAPEWITHSTYLE; import java.io.ByteArrayInputStream; import java.io.IOException; -public class DefineShapeTag extends CharacterTag implements BoundedTag,AloneTag { +public class DefineShapeTag extends CharacterTag implements BoundedTag, AloneTag { public int shapeId; public RECT shapeBounds; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java b/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java index 43f00764d..59e814b3a 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java @@ -27,7 +27,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Defines a sprite character @@ -126,4 +128,13 @@ public class DefineSpriteTag extends CharacterTag implements Container { public List getSubTags() { return subTags; } + + @Override + public Set getNeededCharacters() { + Set ret = new HashSet(); + for (Tag t : subTags) { + ret.addAll(t.getNeededCharacters()); + } + return ret; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java index ea810f2c1..c96c1b68d 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java @@ -28,7 +28,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @@ -48,7 +50,7 @@ public class DefineText2Tag extends CharacterTag implements BoundedTag { public RECT getRect() { return textBounds; } - + @Override public int getCharacterID() { return characterID; @@ -101,4 +103,15 @@ public class DefineText2Tag extends CharacterTag implements BoundedTag { textRecords.add(tr); } } + + @Override + public Set getNeededCharacters() { + Set ret = new HashSet(); + for (TEXTRECORD tr : textRecords) { + if (tr.styleFlagsHasFont) { + ret.add(tr.fontId); + } + } + return ret; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java b/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java index 3a9567b55..20a32f708 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java @@ -28,7 +28,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @@ -111,4 +113,15 @@ public class DefineTextTag extends CharacterTag implements BoundedTag { public RECT getRect() { return textBounds; } + + @Override + public Set getNeededCharacters() { + Set ret = new HashSet(); + for (TEXTRECORD tr : textRecords) { + if (tr.styleFlagsHasFont) { + ret.add(tr.fontId); + } + } + return ret; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java b/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java index bc50c0538..b3fe75fb7 100644 --- a/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java @@ -29,7 +29,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Extends the functionality of the PlaceObject2Tag @@ -243,4 +245,13 @@ public class PlaceObject2Tag extends Tag implements Container { } return clipActions.clipActionRecords.size(); } + + @Override + public Set getNeededCharacters() { + Set ret = new HashSet(); + if (placeFlagHasCharacter) { + ret.add(characterId); + } + return ret; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java b/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java index 3c4cf473d..23a757afc 100644 --- a/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java @@ -30,7 +30,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Extends the functionality of the PlaceObject2Tag @@ -311,4 +313,13 @@ public class PlaceObject3Tag extends Tag implements Container { } return clipActions.clipActionRecords.size(); } + + @Override + public Set getNeededCharacters() { + Set ret = new HashSet(); + if (placeFlagHasCharacter) { + ret.add(characterId); + } + return ret; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java b/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java index 864299917..8c6446ada 100644 --- a/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java +++ b/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java @@ -24,6 +24,8 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.HashSet; +import java.util.Set; /** * Adds character to the display list @@ -97,4 +99,11 @@ public class PlaceObjectTag extends Tag { this.matrix = matrix; this.colorTransform = colorTransform; } + + @Override + public Set getNeededCharacters() { + Set ret = new HashSet(); + ret.add(characterId); + return ret; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/Tag.java b/trunk/src/com/jpexs/asdec/tags/Tag.java index 1f81502c8..8f117984f 100644 --- a/trunk/src/com/jpexs/asdec/tags/Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/Tag.java @@ -16,7 +16,9 @@ */ package com.jpexs.asdec.tags; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Represents Tag inside SWF file @@ -114,4 +116,8 @@ public class Tag { public long getPos() { return pos; } + + public Set getNeededCharacters() { + return new HashSet(); + } } diff --git a/trunk/src/com/jpexs/asdec/tags/base/AloneTag.java b/trunk/src/com/jpexs/asdec/tags/base/AloneTag.java index 12f82741e..ab0b02ae5 100644 --- a/trunk/src/com/jpexs/asdec/tags/base/AloneTag.java +++ b/trunk/src/com/jpexs/asdec/tags/base/AloneTag.java @@ -5,5 +5,4 @@ package com.jpexs.asdec.tags.base; * @author JPEXS */ public interface AloneTag { - } diff --git a/trunk/src/com/jpexs/asdec/tags/base/FontTag.java b/trunk/src/com/jpexs/asdec/tags/base/FontTag.java index e8b8be1d7..b783b16b4 100644 --- a/trunk/src/com/jpexs/asdec/tags/base/FontTag.java +++ b/trunk/src/com/jpexs/asdec/tags/base/FontTag.java @@ -7,6 +7,8 @@ import com.jpexs.asdec.types.SHAPE; * @author JPEXS */ public interface FontTag extends AloneTag { + public int getFontId(); + public SHAPE[] getGlyphShapeTable(); } diff --git a/trunk/src/com/jpexs/asdec/types/GLYPHENTRY.java b/trunk/src/com/jpexs/asdec/types/GLYPHENTRY.java index 105da76c3..e8e9eb380 100644 --- a/trunk/src/com/jpexs/asdec/types/GLYPHENTRY.java +++ b/trunk/src/com/jpexs/asdec/types/GLYPHENTRY.java @@ -27,8 +27,6 @@ public class GLYPHENTRY { @Override public String toString() { - return "[GLYPHENTRY index="+glyphIndex+", advance="+glyphAdvance+"]"; + return "[GLYPHENTRY index=" + glyphIndex + ", advance=" + glyphAdvance + "]"; } - - }